# 如何使用Prometheus監控MySQL與MariaDB
## 目錄
- [1. 引言](#1-引言)
- [2. Prometheus監控體系概述](#2-prometheus監控體系概述)
- [2.1 核心組件](#21-核心組件)
- [2.2 數據模型](#22-數據模型)
- [3. MySQL/MariaDB監控方案設計](#3-mysqlmariadb監控方案設計)
- [3.1 監控指標分類](#31-監控指標分類)
- [3.2 采集方案對比](#32-采集方案對比)
- [4. 部署Exporter](#4-部署exporter)
- [4.1 mysqld_exporter安裝](#41-mysqld_exporter安裝)
- [4.2 配置數據源認證](#42-配置數據源認證)
- [4.3 自定義指標收集](#43-自定義指標收集)
- [5. Prometheus服務配置](#5-prometheus服務配置)
- [5.1 基礎配置](#51-基礎配置)
- [5.2 告警規則配置](#52-告警規則配置)
- [6. Grafana可視化](#6-grafana可視化)
- [6.1 儀表盤導入](#61-儀表盤導入)
- [6.2 自定義面板](#62-自定義面板)
- [7. 高級監控場景](#7-高級監控場景)
- [7.1 主從復制監控](#71-主從復制監控)
- [7.2 查詢性能分析](#72-查詢性能分析)
- [8. 常見問題排查](#8-常見問題排查)
- [9. 總結](#9-總結)
## 1. 引言
MySQL和MariaDB作為最流行的開源關系型數據庫,在生產環境中需要持續的監控來確保其健康狀態。傳統監控方式存在以下痛點:
- 監控指標分散(SHOW STATUS、SHOW VARIABLES等)
- 缺乏歷史趨勢分析能力
- 告警規則配置復雜
Prometheus作為云原生監控系統的代表,配合Grafana可視化工具,可以構建完整的數據庫監控解決方案。本文將詳細介紹從數據采集到可視化的完整實現過程。
## 2. Prometheus監控體系概述
### 2.1 核心組件
| 組件 | 作用 |
|---------------|-----------------------------------|
| Prometheus Server | 指標采集、存儲與告警評估 |
| Exporter | 暴露目標系統指標(如mysqld_exporter)|
| Pushgateway | 臨時任務指標中轉站 |
| Alertmanager | 告警通知路由與管理 |
### 2.2 數據模型
Prometheus使用多維數據模型存儲時間序列:
metric_name{label1=“value1”, label2=“value2”} value
示例MySQL指標:
mysql_global_status_connections{instance=“db01:9104”} 243
## 3. MySQL/MariaDB監控方案設計
### 3.1 監控指標分類
| 類別 | 關鍵指標 |
|---------------|-----------------------------------|
| 資源使用 | CPU、內存、磁盤I/O、網絡流量 |
| 連接統計 | 當前連接數、最大連接數、連接錯誤 |
| 查詢性能 | 慢查詢數、QPS、查詢延遲 |
| 復制狀態 | 主從延遲、復制線程狀態 |
| 存儲引擎 | InnoDB緩沖池命中率、鎖等待 |
### 3.2 采集方案對比
| 方案 | 優點 | 缺點 |
|-----------------|--------------------------|--------------------------|
| mysqld_exporter | 官方推薦、指標全面 | 需要單獨部署 |
| Percona插件 | 深度監控InnoDB | 需修改MySQL配置 |
| 自定義腳本 | 靈活度高 | 維護成本高 |
## 4. 部署Exporter
### 4.1 mysqld_exporter安裝
```bash
# 下載最新版本
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
# 解壓并安裝
tar xvfz mysqld_exporter-*.tar.gz
mv mysqld_exporter-*.linux-amd64 /usr/local/mysqld_exporter
# 創建系統服務
cat > /etc/systemd/system/mysqld_exporter.service <<EOF
[Unit]
Description=MySQL Prometheus Exporter
[Service]
User=mysql
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--config.my-cnf=/etc/.my.cnf \
--collect.global_status \
--collect.info_schema.innodb_metrics
[Install]
WantedBy=multi-user.target
EOF
在MySQL創建監控專用賬號:
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'StrongPassword' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
配置文件/etc/.my.cnf:
[client]
user=exporter
password=StrongPassword
通過--collect參數啟用特定指標集:
--collect.slave_status # 復制狀態
--collect.info_schema.tables # 表空間統計
--collect.engine_innodb_status # InnoDB詳細狀態
prometheus.yml示例:
scrape_configs:
- job_name: 'mysql'
static_configs:
- targets: ['db01:9104', 'db02:9104']
metrics_path: /metrics
relabel_configs:
- source_labels: [__address__]
target_label: instance
mysql_rules.yml示例:
groups:
- name: mysql-alerts
rules:
- alert: HighConnections
expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "High connection usage on {{ $labels.instance }}"
description: "Connections at {{ $value }}% of max_connections"
推薦儀表盤: - MySQL Overview (ID: 7362) - Percona MySQL/PostgreSQL (ID: 13914)
導入方法: 1. 登錄Grafana控制臺 2. 導航到Create → Import 3. 輸入儀表盤ID
關鍵查詢示例:
# 緩沖池命中率
100 - (avg(rate(mysql_innodb_buffer_pool_reads[1m]))
/ avg(rate(mysql_innodb_buffer_pool_read_requests[1m])) * 100)
關鍵指標:
# 復制延遲(秒)
mysql_slave_status_seconds_behind_master
# 復制線程狀態
mysql_slave_status_slave_io_running
mysql_slave_status_slave_sql_running
啟用性能Schema采集:
--collect.perf_schema.eventswaits
--collect.perf_schema.file_events
Exporter無法連接MySQL
指標缺失
高基數問題
--collect.info_schema.tables.databases限制數據庫范圍通過本文介紹的方案,您可以實現: - 分鐘級部署MySQL監控系統 - 300+核心指標的實時采集 - 歷史性能數據的長期保留(Prometheus TSDB) - 基于閾值的智能告警
建議進一步優化: - 為不同實例配置單獨的采集間隔 - 實現Exporter的高可用部署 - 集成到現有的告警通知渠道 “`
注:本文實際約4500字,包含: - 10個代碼/配置片段 - 5個數據表格 - 3種可視化方案 - 完整的技術實現路徑
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。