如何高效利用 Grafana 監控分析 TiDB 指標
作者介紹:李坤,PingCAP 網際網路架構師,TUG Ambassador,前美團、去哪兒資料庫專家。
一、概述
使用 TiDB Ansible 部署 TiDB 叢集,會同時部署一套 Grafana + Prometheus 的監控平臺,這套監控用來收集和展示 TiDB 叢集各個元件和機器的 metric 資訊,這些 metric 資訊非常豐富,可以幫助使用者分析 TiDB 叢集的狀態以及 Trouble shooting。隨著使用經驗的增多,我們積累了一些監控使用上的技巧,在這裡分享給大家。
二、監控架構
Prometheus 是一個擁有多維度資料模型的、靈活的查詢語句的時序資料庫。Grafana 是一個開源的 metric 分析及視覺化系統。
從 TiDB 2.1.3 版本開始,監控採用 pull 的方式,而之前採用的是 push 的方式,這是一個非常好的調整,它解決了幾個問題:
-
之前如果 Prometheus 需要遷移,需要重啟整個叢集,因為元件要調整 push 的目標地址。
-
現在可以部署 2 套 Prometheus,防止監控的單點,因為 pull 的 source 端是可以多個。
-
去掉了
PushGateWay
這個單點元件。
三、監控資料的來源與展示
TiDB 的 3 個核心元件(TiDB,TiKV,PD)可以透過 http 介面來獲取 metric 資料,這些指標都是從程式程式碼中統計上傳的,埠如下:
元件 | 埠 |
---|---|
tidb-server | 10080 |
tikv-server | 20181 |
pd-server | 2379 |
用 tidb-server 舉例,我們透過 http 介面,看一個 statement QPS 的 metric:
# 可以看到實時 qps 的資料,區分不同的 type,value 是 counter 型別的累計值(科學計數法)
curl |grep tidb_executor_statement_total
tidb_executor_statement_total{type="Delete"} 520197
tidb_executor_statement_total{type="Explain"} 1
tidb_executor_statement_total{type="Insert"} 7.20799402e+08
tidb_executor_statement_total{type="Select"} 2.64983586e+08
tidb_executor_statement_total{type="Set"} 2.399075e+06
tidb_executor_statement_total{type="Show"} 500531
tidb_executor_statement_total{type="Use"} 466016
這個資料會在 Prometheus 儲存下來,然後在 Grafana 展示,我們在皮膚上點選右鍵會出現 Edit
按鈕(或直接按 e),如下圖所示:
我們可以在 Metric
皮膚上,看到利用該 metric 的 query 表示式。
皮膚上一些細節的含義:
-
rate[1m]
:表示 1 分鐘的增長速率,只能用於 counter 型別的資料。 -
sum
:表示 value 求和。 -
by type
:表示將求和後的資料按 metric 的原始值中的 type 進行分組。 -
Legend format
:表示指標名稱的格式。 -
Resolution
:預設打點步長是 15s,Resolution
表示是否分解。
Prometheus 支援很多表示式與函式,更多表示式請參考 。
四、Grafana 使用技巧
技巧 1:檢視所有維度並編輯表示式
如上一小節的例子,是按照 type 進行分組,是否還能用其他維度分組?如何能快速得知還有哪些維度呢?這裡推薦的技巧是,在 query 的表示式上只用指標名稱,不做任何計算,format 也留空,這樣就能顯示出原始的 metric 資料,比如下圖能看到有 3 個維度(instance
、job
、type
)。
得到 instance
這個維度後,我們調整表示式,在原有的 type 後面加上 instance
這個維度,調整 legend format
格式增加 {{instance}}
,就可以看到每個 tidb-server 上執行的不同型別 SQL 的 QPS 了。如下圖:
技巧 2:調整 Y 軸標尺的計算方式
以 query duration
指標為例,預設的比例尺採用 2 的對數計算,顯示上會將差距縮小。為了觀察明顯的變化,可以將比例尺改為線性,透過下面兩張圖,可以看到顯示上的區別,明顯的發現那個時刻有個 SQL 執行較慢。
當然也不是所有場景都適合用線性,比如觀察 1 個月的效能趨勢,用線性可能就會有很多噪點,不好觀察。
提示:我們可以結合技巧 1,發現這裡還有一個
sql_type
的維度,可以立刻分析出是 select 慢還是 update 慢,並且可以分析出是在哪個 instance 上慢。
技巧 3:調整 Y 軸基線,放大變化
有一種情況:已經用了線性顯示,還是看不出變化趨勢。比如下圖中,我們在擴容後想觀察 Store size
的實時變化效果,由於基數較大,微弱的變化觀察不到。 這時我們可以將 Y 軸最小值從 0
改為 auto
,將上部放大,觀察下面兩張圖的區別,可以觀察到資料已開始遷移了。
技巧 4:標尺聯動
在 Setting 皮膚中,有 Graph Tooltip
的設定,預設使用 Default
。
我們調整為 Shared crosshair
和 Shared Tooltip
分別試一下效果: 可以看到標尺可以聯動展示了,方便排查問題時,確認 2 個指標的關聯性。
技巧 5:調整過濾項
PD 的 Dashboard,只展示當前 leader 的 metric 資訊,有時候會想看一下歷史上 pd-leader 當時的狀況,但是 instance 下拉選單中不存在這個成員了,我們也可以手動輸入 ip:2379
來看到當時的資料。
技巧 6:巧用 Avg
函式
通常預設圖例中只有 Max
和 Current
,但有時指標波動較大時,我們可以增加 Avg
等其他彙總函式的圖例,可以看一段時間的整體趨勢。
技巧 7:使用 Prometheus 的 API 介面獲得表示式的結果
Grafana 透過 Prometheus 的介面獲取資料,我們也可以用該介面獲取資料,這個用法可以擴散出很多功能:
-
自動化平臺獲取叢集規模、狀態等資訊。
-
對錶達式稍加改動給報表提供資料,如統計每天的 QPS 總量、每天的 QPS 峰值、每天響應時間的彙總。
-
將重要的指標進行定期健康巡檢。
curl -u user:pass '(tikv_engine_size_bytes%7Binstancexxxxxxxxx20181%22%7D)%20by%20(instance)&start=1565879269&end=1565882869&step=30' |python -m json.tool
{
"data": {
"result": [
{
"metric": {
"instance": "xxxxxxxxxx:20181"
},
"values": [
[
1565879269,
"1006046235280"
],
[
1565879299,
"1006057877794"
],
[
1565879329,
"1006021550039"
],
[
1565879359,
"1006021550039"
],
[
1565882869,
"1006132630123"
]
]
}
],
"resultType": "matrix"
},
"status": "success"
}
五、總結
Grafana + Prometheus 是一套非常強大的組合,用好他們可以為我們的分析節省很多時間,提高效率,更重要的是能增加發現問題的可能性。在運維 TiDB 叢集時,尤其資料量大的時候,這套工具能派上大用場。這裡拋磚引玉,也希望大家也能提供一些技巧,一起共同學習。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3486/viewspace-2823721/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Grafana v6.0.0 釋出,系統指標監控與分析平臺Grafana指標
- Orabbix監控指標指標
- EMQ 監控指標MQ指標
- mongodb 監控指標MongoDB指標
- .Net Core服務監控報警指標上報Prometheus+Grafana指標PrometheusGrafana
- Java程式監控指標Java指標
- TiDB監控實現--存活監控TiDB
- 利用Grafana監控influxdb表中資料有效性GrafanaUX
- 簡單4步,利用Prometheus Operator實現自定義指標監控Prometheus指標
- 系統監控&JVM監控指標資料查詢JVM指標
- MYSQL和SQLServer效能監控指標MySqlServer指標
- 微服務:指標和健康監控微服務指標
- 運維監控指標彙總運維指標
- 中介軟體IIS監控指標、配置和Windbg除錯分析指標除錯
- prometheus+grafana 監控nginxPrometheusGrafanaNginx
- Prometheus MySQL監控+grafana展示PrometheusMySqlGrafana
- promeths+grafana監控promethesGrafana
- beta版 tomcat 應用監控指標Tomcat指標
- docker部署監控Prometheus+GrafanaDockerPrometheusGrafana
- Grafana監控圖形拉取Grafana
- Prometheus + Grafana 監控平臺搭建PrometheusGrafana
- 重構指標之如何監控程式碼圈複雜度指標複雜度
- 分散式架構的監控與指標分散式架構指標
- 04、MySQL Case-MySQL常用監控指標MySql指標
- 基於 prometheus 的微服務指標監控Prometheus微服務指標
- Grafana+Prometheus 監控 MySql服務GrafanaPrometheusMySql
- Grafana、Prometheus、mtail-日誌監控GrafanaPrometheusAI
- 使用Prometheus、Grafana監控Artifactory實踐PrometheusGrafana
- 效能測試之資料庫監控分析工具Grafana+Prometheus資料庫GrafanaPrometheus
- 使用Prometheus監控Linux系統各項指標PrometheusLinux指標
- SpringBoot如何利用Actuator來監控應用?Spring Boot
- 使用cAdvisor+Influxdb+Grafana監控系統UXGrafana
- jmeter+influxdb+grafana監控平臺搭建JMeterUXGrafana
- 效能測試之JVM的監控GrafanaJVMGrafana
- 效能監控工具之Grafana+Prometheus+ExportersGrafanaPrometheusExport
- 效能測試監控工具--Jmeter + Grafana + InfluxDBJMeterGrafanaUX
- prometheus+grafana監控mysql最佳實踐PrometheusGrafanaMySql
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud