天天看點

MySQL監控-Datadog資料庫監控調研

阿裡雲官方鏡像站:MySQ鏡像源

​​https://developer.aliyun.com/mirror/?utm_content=g_1000303593​​

前言

MySQL是最流行的資料庫之一,在大多系統的後端的存儲都有MySQL的身影,MySQL運作的是否健康,直接影響着整個系統的運作,資料庫的瓶頸往往也是整個系統的瓶頸,其重要性不言而喻,是以對于MySQL的監控必不可少,及時發現MySQL運作中的異常,可以有效提高系統的可用性和使用者體驗。

本文主要介紹下MySQL如何做監控,以及對Datadog的Database Monitoring的一些簡單調研。

監控類型

Google提出在系統監控中的黃金名額,分别是Latency,Traffic,Saturation,Errors,MySQL一般作為資源類服務系統出現,在MySQL監控中也可以以這些名額為指引來進行名額收集和監控。

黃金名額

  • Latency延遲:比如MySQL中的查詢的延遲,一條Select語句的延遲可能會直接影響使用者體驗,監控SQL語句的平均延遲,P99延遲可以提早發現對系統的影響。
  • Traffic:在MySQL中,查詢的QPS是吞吐量的一種名額,比如MySQL伺服器每秒可以支援多少查詢,多少更新,吞吐量的名額也會影響到使用者體驗。
  • Saturation飽和度:飽和度是指系統的資源被消耗殆盡的程度,比如在MySQL最大連接配接數為300,目前連接配接數已經達到240的情況可能需要引起注意,因為可能在不久的将來會将連接配接數打滿,導緻新的連接配接進不來,影響上層服務的可用性。
  • Errors錯誤:MySQL中的Aborted_clients和Aborted_connects的增加往往意味了使用方在使用的時候出現了一些錯誤,需要引起注意,比如用戶端在退出時沒有調用mysql_close會導緻Aborted_clients名額的增加,是以監控這個名額對于問題的排查很有幫助。

MySQL關鍵名額類型

黃金名額對于名額的監控有很大的指導意義,但是選取哪些名額,也是值得考量的,這裡借用Datadog的一篇​​MySQL監控文章​​來描述MySQL監控中的關鍵名額。從性能和資源使用角度大緻分為4類:

  • Query throuput:查詢吞吐量,主要包括查詢的QPS和更新QPS,用來表示延遲。
  • Query performance: 查詢性能,主要包括查詢的消耗的平均時間,查詢錯誤名額,慢查詢數量,分别包含吞吐量和錯誤。
  • Connections: 連接配接,主要包括目前打開連接配接數和運作連接配接數表示飽和度。錯誤連接配接數用來表示錯誤。
  • Buffer pool usage: 緩沖池使用情況,innodb_buffer_pool_reads表示InnoDB緩沖池無法滿足的請求數,計算出的緩沖池中的頁面使用數量使用率可以用表示資源的飽和度。

MySQL監控流程

MySQL的監控跟其他系統的監控類似,一般會包含名額日志類的資料收集,名額的可視化展示,名額告警,問題的排查等流程。

名額收集

MySQL的名額類型有很多,可以通過兩種方式擷取

  • 服務内部狀态/内部變量:一般通過show status或者show variable來擷取,表示全局的一些名額。
  • peformance shema和sys schema,提供了更加底層的運作時的詳細的名額資訊。

可視化展示

通過Agent将名額資料采集到後端存儲中,然後進行可視化展示,可視化儀表盤會将名額的曆史值和目前值繪制成曲線,便于檢視名額的變化,名額如果有明顯的變化,從圖表中可以明顯的看出來,對于排查問題有一定的參考意義。

名額異常告警

在某個名額出現異常時,可以配置相應的告警,告警監控可以使用門檻值設定或者AI算法來自動識别名額的異常,産生的告警可以分不同的嚴重等級,不同的等級可以配置不同的通知管道,比如嚴重度低的發郵件提醒既可以,對于高嚴重度的名額異常,配置電話通知。

通過儀表盤或者告警,可以找到哪個名額出現了異常,然後根據不同的名額進行不同的排查方式,比如連接配接數超過最大連接配接數報警,可以調大資料庫的最大連接配接數或者減少用戶端的連接配接數。對于更複雜的場景,可能需要借助問題發生時其他的日志或者名額進行根因分析。

接下來以Datadog的資料庫監控為例,來調研Datadog是如何做資料庫監控的,文中圖檔來自Datadog官網。

Datadog 資料庫監控

名額采集

Agent端采集

Datadog的名額采集是通過安裝Agent來采集,Agent可以部署在自建機器或者雲伺服器上,可以連接配接到伺服器即可。

名額資料

通過安裝Datadog Agent到資料庫所在伺服器或者能連接配接到資料的伺服器上,然後建立一個datadog使用者,并且給datadog賦予一定的權限如REPLICATION CLIENT,PROCESS和SELECT ON performance_schema.*的權限。Datadog為了收集explain plan還會建立幾個存儲過程explain_statement,enable_events_statements_consumers。

日志資料

Datadog Agent支援采集MySQL伺服器端General日志、錯誤日志、慢日志等,當然前提是MySQL服務端開啟這些日志存儲。

儀表盤

總體名額

MySQL總覽,主要展示了收集的MySQL名額的整體态勢。

MySQL監控-Datadog資料庫監控調研

Query Metrics

主要用來展示标準化查詢(normalized query)的曆史性能名額,可以按照查詢數,平均延遲,消耗總時間,傳回行數進行排序。

MySQL監控-Datadog資料庫監控調研

同時也可以根據标簽或聚合次元來展示消耗了最多查詢時間的Top查詢和延遲。根據不同的次元來分組展示每個組的查詢數,平均延遲,消耗總時間。

MySQL監控-Datadog資料庫監控調研

Query Details

在Query Metrics頁面搜尋特定的query,可以檢視其Query Detail頁面,在其中可以檢視語句的平均延遲和查詢總時間,同時頁面還會展示查詢關聯的Datadog中标簽,

MySQL監控-Datadog資料庫監控調研

查詢頁面除了延遲和消耗時間等,還會展示執行計劃,時序和執行這條查詢的主機分布。

  • 執行計劃頁面,會展示不同的執行計劃及其延遲和平均消耗。
MySQL監控-Datadog資料庫監控調研
  • 性能名額頁面,展示了一些常見名額的性能曆史。
MySQL監控-Datadog資料庫監控調研
  • 執行查詢的主機分布頁面,會展示執行目前查詢的主機分布,通過菜單可以連結到主機的相關頁面,這對于排查問題比較友善,比如某個主機上的查詢延遲非常高,可以直接跳轉到改主機的相關儀表盤頁面進行檢視。
MySQL監控-Datadog資料庫監控調研

Query Samples

主要包含采樣查詢的性能資料,延遲,消耗和執行計劃,同時也支援按照Table來展示Top消耗的查詢語句。

MySQL監控-Datadog資料庫監控調研

告警

Datadog提供了對于名額的監控告警,主要支援五種監控類型,包括:

  • Thresold Alert:門檻值監控。
  • Change Alert: 事件變更監控。
  • Anomaly Dectection:異常檢測,使用機器學習算法來判斷名額的異常。
  • Outlier Alert:離群點檢測告警。
  • Forecast Alert:預測告警。
MySQL監控-Datadog資料庫監控調研

總結

本文首先介紹了資料庫監控的關鍵名額和MySQL監控的一般流程主要包括名額收集,可視化展示,名額異常告警。然後通過對Datadog的資料庫監控産品做介紹,除了正常的總體名額展示,Datadog的資料庫監控還提供了Query相關的名額,分别包括Query Metrics,Query Detail和Query Samples,從查詢的角度進行監控和分析統計,除了Query級别的名額展示,還包括對執行計劃的展示,同時也支援從儀表盤Drill down到主機級别檢視資源名額,通過這些儀表盤可以比較友善的看出名額的異常。