本文介紹如何將自建 MySQL / MariaDB 接入CloudMonitor 2.0。接入組件基於 aio-exporter 的 MySQL(mysqld)適配採集指標,覆蓋串連、QPS、InnoDB 緩衝池、主從複製與慢查詢等觀測情境,支援 ACK 叢集(CS)與 ECS(VPC) 兩種部署環境。接入後自動產生 MySQL 執行個體實體、內建大盤與警示規則。
支援的中介軟體條件
接入前請確認目標執行個體滿足以下條件,否則可能出現採集不到資料或指標缺失。
|
條件項 |
要求 |
|
資料庫版本 |
MySQL ≥ 5.6、MariaDB ≥ 10.3(E2E 驗證 MySQL 8.0)。採集項按版本分級門控(5.1—8.0),版本越低可用採集項越少: |
|
部署形態 |
自建 MySQL / MariaDB / Percona。雲受管理的執行個體(如阿里雲 RDS MySQL)在滿足帳號與網路條件時同樣可接入,接入時把「雲廠商 / 部署來源」選為對應雲廠商即可 |
|
監控帳號 |
需專用唯讀帳號,具備 |
|
串連方式 |
以 |
|
網路連通 |
Exporter 需能直連資料庫連接埠(預設 3306)。CS 環境要求目標 MySQL 可在所選 ACK 叢集網路內連通;ECS(VPC) 環境要求託管探針交換器網段可訪問目標 ECS。安全性群組、白名單需允許存取對應出口地址 |
|
採集開銷 |
預設開啟 |
前提條件
-
已開通可觀測監控Prometheus版。
-
接入 CS 環境:目標 ACK 叢集已接入CloudMonitor 2.0,且叢集狀態為運行中;目標 MySQL 服務可在該叢集網路內連通。
-
接入 ECS(VPC) 環境:已選定目標 MySQL 所在 ECS,並確保託管探針交換器網段可訪問該 ECS。
費用說明
-
根據產生的指標資料量,在 Prometheus 產品中計費。無其他費用。
接入方法
步驟一:建立監控帳號
在目標資料庫上執行以下 SQL,建立專用監控帳號並授權(MAX_USER_CONNECTIONS 限制監控帳號佔用的串連數,避免影響業務):
CREATE USER 'exporter'@'%' IDENTIFIED BY '<password>' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
FLUSH PRIVILEGES;
|
許可權 |
用途 |
|
PROCESS |
讀取進程列表與全域狀態 |
|
REPLICATION CLIENT |
讀取主從複製狀態 |
|
SELECT |
讀取 information_schema / performance_schema 等中繼資料 |
步驟二:選擇接入環境
本外掛程式支援 CS 與 ECS(VPC) 兩種接入環境,工作原理不同,請按 MySQL 實際部署位置選擇:
CS(Container Service)
-
將 Exporter 安裝到使用者指定的目標 ACK 叢集,並複用該叢集已有的採集器進行指標採集。
-
觀測對象為 ACK 叢集。
-
網路要求:目標 MySQL 服務可在該叢集網路內連通即可(例如叢集內 Service,或叢集能訪問到的 VPC 內網地址)。
ECS(VPC)
-
選擇目標 MySQL 服務部署的 ECS 機器,系統根據該 ECS 的 VPC 資訊部署全託管採集器。
-
不會在 ECS 上安裝任何進程。
-
觀測對象為 ECS 執行個體。
-
網路要求:託管探針所在交換器網段需允許訪問目標 ECS(安全性群組、ACL 等需允許存取)。
|
環境 |
Exporter 部署位置 |
是否在業務機上裝進程 |
觀測對象 |
網路通達要求 |
|
CS |
使用者指定的 ACK 叢集 |
否(部署在叢集內,不佔用業務 Pod 宿主) |
ACK 叢集 |
MySQL 可在該叢集網路內連通 |
|
ECS(VPC) |
系統按 VPC 部署的全託管採集器 |
否,不在 ECS 上安裝任何進程 |
ECS 執行個體 |
託管探針交換器網段可訪問目標 ECS |
步驟三:接入配置
-
登入CloudMonitor2.0控制台,選擇目標工作空間後,在左側導覽列單擊 接入中心 ,單擊 MySQL 開始接入。
-
選擇接入環境(CS 或 ECS(VPC)),並在下拉式清單中選擇 觀測對象 。
-
接入配置,配置完成後單擊 確定 :
配置項
是否必填
說明
MySQL 服務地址
是
CS 環境填寫叢集內訪問地址,如
mysql-server.<namespace>;ECS(VPC) 環境填寫內網或公網訪問地址MySQL 服務連接埠
是
預設 3306
雲廠商 / 部署來源
否
寫入指標標籤
provider並參與實體發現,自建選擇「自建」(self-hosted/mysql),雲託管選擇對應雲廠商網路連通性測試
—
僅 CS 環境提供,用於驗證 Exporter 與資料庫之間的網路連通性
MySQL 帳號
是
步驟一建立的監控帳號,預設
exporterMySQL 密碼
是
監控帳號對應的密碼
Metric 採集間隔(秒)
是
預設 15,取值範圍 1—60
額外採集項
否
在預設四項之外追加採集項,可多選。
processlist、表級統計與performance_schema類開銷較大,建議按需開啟自訂標籤
否
注入到指標上的額外標籤,便於按業務維度篩選
使用公網鏡像地址
否
預設關閉走 VPC 內網鏡像倉庫;無法訪問內網鏡像倉庫時開啟
-
接入成功後,可在 實體探索 查看接入的實體及相關可觀測資料。
資料使用說明
實體說明
接入後,CloudMonitor每 3 分鐘從 mysql_up 指標的標籤中發現一次 MySQL 執行個體,並產生中介軟體實體:
|
維度 |
說明 |
|
域(domain) |
middleware |
|
實體類型 |
middleware.mysql |
|
實體過濾條件 |
|
|
觀測對象(綁定實體) |
CS 環境為 |
實體欄位來自採集標籤,與安裝次數無關:
|
欄位 |
說明 |
|
instance_id |
執行個體標識,取自 |
|
provider |
部署來源,如 |
|
port |
資料庫連接埠 |
|
region_id |
地區 |
|
env_type |
部署環境類型(CS / ECS) |
|
cluster_id |
所屬叢集標識 |
可在 實體探索 或 中介軟體洞察 應用中按上述欄位檢索執行個體。
內建大盤
|
大盤名稱 |
查看入口 |
說明 |
|
MySQL 概覽(執行個體概覽) |
實體詳情頁 執行個體概覽 頁簽 |
UModel 大盤,隨執行個體上下文自動綁定 |
|
MySQL 概覽 / MySQL Overview |
Grafana 大盤列表 |
Grafana 大盤,提供中英文兩套 |
核心指標
以下為實體資料集 middleware.metric.mysql 的完整指標清單(共 57 個),可在實體詳情、大盤與警示中直接使用:
|
指標名 |
類型 |
單位 |
顯示名稱 |
說明 |
|
mysql_up |
gauge |
- |
MySQL 存活 |
MySQL/MariaDB 執行個體是否可達且採集成功。1 表示存活,0 表示不可用。 |
|
mysql_uptime |
gauge |
秒 |
已耗用時間 |
MySQL 服務進程自啟動以來啟動並執行秒數。 |
|
mysql_qps |
counter |
次/秒 |
每秒查詢數 |
用戶端執行語句的每秒查詢數(Questions,不含 COM_PING / COM_STATISTICS 等)。 |
|
mysql_queries_s |
counter |
次/秒 |
每秒查詢總數 |
每秒執行的語句總數,包含儲存程式內部語句(Queries)。 |
|
mysql_threads_connected |
gauge |
- |
已連接線程數 |
當前已串連到伺服器的用戶端線程數。 |
|
mysql_threads_running |
gauge |
- |
運行中線程數 |
當前正在執行語句的非空閑線程數。 |
|
mysql_slow_queries_s |
counter |
次/秒 |
每秒慢查詢數 |
執行時間超過 long_query_time 的慢查詢速率(每秒)。 |
|
mysql_buffer_pool_size |
gauge |
位元組 |
InnoDB 緩衝池大小 |
已配置的 InnoDB 緩衝池大小(位元組,innodb_buffer_pool_size)。 |
|
mysql_connection_usage |
gauge |
% |
串連使用率 |
當前已連接線程數占 max_connections 的百分比。 |
|
mysql_max_used |
gauge |
- |
最大已用串連數 |
自上次 FLUSH STATUS 或服務重啟以來同時串連數的歷史峰值。 |
|
mysql_max_connections |
gauge |
- |
最大串連數 |
允許的最大並發用戶端串連數(max_connections)。 |
|
mysql_cached |
gauge |
- |
緩衝線程數 |
當前線程緩衝中空閑、可複用的線程數。 |
|
mysql_created_s |
counter |
次/秒 |
每秒建立線程數 |
為處理串連而建立線程的速率(偏高時可能表示 thread_cache_size 偏小)。 |
|
mysql_aborted_connects |
counter |
- |
中止串連次數 |
串連失敗次數的速率(如認證失敗、主機被拒絕等)。 |
|
mysql_aborted_clients |
counter |
- |
中止用戶端數 |
用戶端未正常關閉串連導致的中止串連速率。 |
|
mysql_connection_errors |
counter |
- |
串連錯誤數 |
按錯誤類型匯總的串連錯誤速率(如 max_connections、accept、internal 等)。 |
|
mysql_top_command_counters |
counter |
- |
Top 命令計數 |
按命令類型統計的 Top 10 COM_* 命令執行速率。 |
|
mysql_handlers |
counter |
- |
Handler 請求 |
按 Handler 類型統計的 Top 10 儲存引擎 Handler 請求速率(如 read_next、write、update)。 |
|
mysql_full_join |
counter |
- |
全表 JOIN |
對第一張表做全表掃描的 JOIN 速率(Select_full_join,通常表示缺少索引)。 |
|
mysql_full_range_join |
counter |
- |
全範圍 JOIN |
對參考表使用範圍搜尋的 JOIN 速率(Select_full_range_join)。 |
|
mysql_range |
counter |
- |
範圍查詢 |
在第一張表上使用範圍掃描的 JOIN 速率(Select_range)。 |
|
mysql_range_check |
counter |
- |
範圍檢查查詢 |
每行後檢查鍵使用方式的 JOIN 速率(Select_range_check,通常對效能不友好)。 |
|
mysql_scan |
counter |
- |
全表掃描 |
對第一張表做全表掃描的查詢速率(Select_scan)。 |
|
mysql_sort_rows |
counter |
- |
排序行數 |
參與排序的行數速率(Sort_rows)。 |
|
mysql_sort_range |
counter |
- |
範圍排序 |
使用範圍的排序速率(Sort_range)。 |
|
mysql_sort_merge_passes |
counter |
- |
排序歸併次數 |
排序歸併趟數速率;偏高時可能需要增大 sort_buffer_size。 |
|
mysql_sort_scan |
counter |
- |
掃描排序 |
通過掃描表完成的排序速率(Sort_scan)。 |
|
mysql_tmp_tables |
counter |
- |
暫存資料表建立數 |
記憶體中建立內部暫存資料表的速率(Created_tmp_tables)。 |
|
mysql_tmp_disk_tables |
counter |
- |
磁碟暫存資料表建立數 |
在磁碟上建立內部暫存資料表的速率(Created_tmp_disk_tables);相對記憶體暫存資料表佔比偏高時需調優。 |
|
mysql_tmp_files |
counter |
- |
臨時檔案建立數 |
伺服器建立臨時檔案的速率(Created_tmp_files)。 |
|
mysql_immediate |
counter |
- |
立即表鎖數 |
立即獲得表鎖的速率(Table_locks_immediate)。 |
|
mysql_waited |
counter |
- |
等待表鎖數 |
需要等待的表鎖速率(Table_locks_waited);偏高表示鎖競爭。 |
|
mysql_received |
counter |
位元組 |
接收流量 |
每秒從所有用戶端接收的位元組數。 |
|
mysql_sent |
counter |
位元組 |
發送流量 |
每秒發送給所有用戶端的位元組數。 |
|
mysql_data |
gauge |
- |
緩衝池頁數 |
InnoDB 緩衝池中的頁數量(按頁狀態區分時有相應維度)。 |
|
mysql_dirty |
gauge |
- |
緩衝池髒頁數 |
InnoDB 緩衝池中當前待刷盤的髒頁數量。 |
|
mysql_innodb_row_operations |
counter |
次/秒 |
InnoDB 行操作 |
按操作類型匯總的 InnoDB 行操作速率(read/insert/update/delete)。 |
|
mysql_read |
counter |
- |
緩衝頁讀取 |
按頁類型匯總的 InnoDB 緩衝頁讀取速率。 |
|
mysql_written |
counter |
- |
緩衝頁寫入 |
按頁類型匯總的 InnoDB 緩衝頁寫入速率。 |
|
mysql_log_waits |
counter |
- |
InnoDB 日誌等待 |
等待 InnoDB redo 日誌緩衝區空間的速率(Innodb_log_waits);偏高時可能需要增大 innodb_log_buffer_size。 |
|
mysql_open_files |
gauge |
- |
開啟檔案數 |
伺服器當前已開啟的檔案數量。 |
|
mysql_open_files_limit |
gauge |
- |
開啟檔案上限 |
伺服器允許開啟的檔案描述符上限(open_files_limit)。 |
|
mysql_opened_files_s |
counter |
次/秒 |
每秒開啟檔案數 |
伺服器開啟檔案的速率;持續偏高可能表示表/檔案快取不足。 |
|
mysql_open_tables |
gauge |
- |
開啟表數 |
當前表緩衝中已開啟的表數量。 |
|
mysql_table_open_cache |
gauge |
- |
表開啟緩衝 |
已配置的表開啟緩衝大小(table_open_cache)。 |
|
mysql_opened_tables_s |
counter |
次/秒 |
每秒開啟表數 |
開啟表的速率;相對已開啟表數偏高時可能需要增大 table_open_cache。 |
|
mysql_cache_hits |
counter |
- |
表快取命中 |
表開啟快取命中速率(表已在緩衝中)。 |
|
mysql_cache_misses |
counter |
- |
表緩衝未命中 |
表開啟緩衝未命中速率(需重新開啟表)。 |
|
mysql_process_states |
gauge |
- |
進程狀態分布 |
按線程狀態匯總的 PROCESSLIST 線程數。 |
|
mysql_user |
gauge |
- |
按使用者分布串連 |
按 MySQL 使用者匯總的 PROCESSLIST 線程數。 |
|
mysql_cmd |
gauge |
- |
按命令分布串連 |
按當前命令匯總的 PROCESSLIST 線程數(如 Sleep、Query)。 |
|
mysql_io_running |
gauge |
- |
副本 IO 線程狀態 |
副本 I/O 線程是否在運行(1/Yes)。適用於副本執行個體。 |
|
mysql_sql_running |
gauge |
- |
副本 SQL 線程狀態 |
副本 SQL 線程是否在運行(1/Yes)。適用於副本執行個體。 |
|
mysql_seconds_behind_master |
gauge |
秒 |
主從延遲秒數 |
相對主庫的複寫延遲秒數(Seconds_Behind_Master/Seconds_Behind_Source)。 |
|
mysql_relay_log_space |
gauge |
- |
中繼日誌空間 |
副本上中繼日誌(relay log)的總大小(位元組)。 |
|
mysql_collector_success_duration |
gauge |
- |
Collector 採集成功 |
各 mysqld_exporter Collector 採集是否成功(1 成功,0 失敗)。 |
|
mysql_duration |
gauge |
秒 |
Collector 採集耗時 |
各 mysqld_exporter Collector 最近一次採集耗時(秒)。 |
除上述 MetricSet 彙總指標外,Exporter 採集的原始指標(mysql_*、mysql_global_status_*、mysql_slave_status_* 等)均寫入 Prometheus 儲存,可直接用 PromQL 查詢。
常用查詢樣本
# 執行個體 QPS
sum by (target_uri) (rate(mysql_global_status_questions[5m]))
# 串連使用率(%)
100 * mysql_global_status_threads_connected / clamp_min(mysql_global_variables_max_connections, 1)
# 每秒慢查詢數
sum by (target_uri) (rate(mysql_global_status_slow_queries[5m]))
# InnoDB 緩衝池命中率(%)
100 * (1 - rate(mysql_global_status_innodb_buffer_pool_reads[5m])
/ clamp_min(rate(mysql_global_status_innodb_buffer_pool_read_requests[5m]), 1))
# 主從複寫延遲(秒)
mysql_slave_status_seconds_behind_master
警示模板
接入後以下警示規則自動生效,無需手動設定。CS 與 ECS(VPC) 兩個環境的規則一致。警示層級 P1 對應 critical(嚴重),P2 對應 warning(警告)。
|
警示名稱 |
層級 |
PromQL 運算式 |
期間 |
說明 |
|
MySQLDown |
P1(嚴重) |
|
5m |
執行個體不可用 |
|
MySQLReplicationNotRunning |
P1(嚴重) |
|
2m |
複製 IO 或 SQL 線程停止 |
|
MySQLReplicationLag |
P1(嚴重) |
|
1m |
複寫延遲持續擴大且未恢複 |
|
MySQLHeartbeatLag |
P1(嚴重) |
|
1m |
心跳延遲持續擴大且未恢複 |
|
MySQLNotReady |
P2(警告) |
|
5m |
Galera 叢集節點未就緒 |
|
MySQLOutOfSync |
P2(警告) |
|
5m |
Galera 叢集節點不同步 |
|
MySQLDonorFallingBehind |
P2(警告) |
|
5m |
捐贈節點落後,接收隊列積壓 |
|
MySQLInnoDBLogWaits |
P2(警告) |
|
— |
InnoDB 日誌寫入等待磁碟 |
MySQLNotReady、MySQLOutOfSync、MySQLDonorFallingBehind 依賴 Galera(wsrep)相關指標,僅在 Galera / PXC 叢集上生效。
儲存策略說明
接入 MySQL 後,CloudMonitor會建立對應的儲存執行個體用於儲存可觀測資料。
|
資料類型 |
預設儲存位置 |
備忘 |
|
指標 |
Prometheus 執行個體:RegionShare:{{workspaceName}}:{{regionId}} |
關聯資料集 |
卸載或修改接入策略
如果期望取消或修改 MySQL 的接入,可以在 接入中心 的 接入管理 頁,找到對應的接入策略,進行 編輯 或 刪除 。刪除接入策略後,Exporter 與採集配置一併移除,已寫入的歷史指標按儲存的生命週期策略保留。