MySQL Server Exporter:Prometheus 监控 MySQL/MariaDB 指南
原文 :https://github.com/prometheus/mysqld_exporter
说明:安装方式和配置参数以官方文档为准。源码细节请参考 GitHub 仓库。
项目简介
Prometheus 官方维护的 MySQL Server Exporter,用来采集 MySQL 和 MariaDB 的指标。
支持的数据库版本:
- MySQL >= 5.6
- MariaDB >= 10.3
前置:创建数据库监控用户
MySQL 里创建一个专用账号,权限越小越好:
sql
CREATE USER 'exporter'@'localhost' IDENTIFIED BY '你的密码' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
MAX_USER_CONNECTIONS 3限制连接数,防止 exporter 频繁采集把数据库连接池打满。PROCESS权限用来查SHOW PROCESSLIST,REPLICATION CLIENT用来查主从状态。
配置连接信息
配置连接的方式有这么几种:
方式一:.my.cnf 文件(推荐)
创建 .my.cnf 文件,放到 exporter 同目录或指定路径:
ini
[client]
host = 127.0.0.1
port = 3306
user = exporter
password = 你的密码
方式二:命令行参数
bash
--mysqld.address="127.0.0.1:3306"
--mysqld.username="exporter"
密码通过环境变量传入(避免在命令行明文显示):
bash
export MYSQLD_EXPORTER_PASSWORD="你的密码"
./mysqld_exporter
方式三:多目标配置
多个 MySQL 实例共用一个 exporter 时,用 .my.cnf 的多节配置:
ini
[client]
user = exporter
password = pwd1
[client.server1]
user = exporter
password = pwd2
[client.server2]
user = exporter
password = pwd3
安装方式
二进制文件
bash
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.15.1.linux-amd64.tar.gz
cd mysqld_exporter-0.15.1.linux-amd64
# 把 .my.cnf 放到当前目录
./mysqld_exporter
默认监听 9104 端口。
Docker 运行
bash
docker run -d \
-p 9104:9104 \
-v /path/to/.my.cnf:/.my.cnf \
prom/mysqld-exporter
单目标 vs 多目标模式
单目标
exporter 直接连本地或指定的 MySQL 实例,在 /metrics 暴露指标。适合每台 MySQL 服务器部署一个 exporter 的场景。
多目标
一个 exporter 代理多个 MySQL 实例,通过 /probe 端点按需采集。配置方式:
yaml
# prometheus.yml
scrape_configs:
- job_name: 'mysql'
metrics_path: /probe
params:
auth_module: [client.server1]
static_configs:
- targets:
- db1:3306
- db2:3306
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: exporter服务器IP:9104
支持的收集器
默认启用的收集器:
| 收集器 | 说明 |
|---|---|
collect.global_status |
MySQL 全局状态(SHOW GLOBAL STATUS) |
collect.global_variables |
MySQL 全局变量(SHOW GLOBAL VARIABLES) |
collect.slave_status |
主从复制状态 |
可通过参数开启更多收集器:
bash
# 启用自增列监控
--collect.auto_increment.columns
# 启用表结构信息采集
--collect.info_schema.tables
# 启用 InnoDB 指标(默认就开了一部分)
--collect.innodb_metrics
# 启用用户统计
--collect.info_schema.userstats
# 启用 performance_schema
--collect.perf_schema.eventsstatements
收集的核心指标
| 指标 | 含义 |
|---|---|
mysql_up |
MySQL 是否在线(1=正常,0=宕机) |
mysql_global_status_connections |
累计连接数 |
mysql_global_status_threads_connected |
当前连接数 |
mysql_global_variables_max_connections |
最大连接数配置值 |
mysql_global_status_innodb_buffer_pool_pages_data |
InnoDB 缓冲池数据页数 |
mysql_slave_status_seconds_behind_master |
主从复制延迟(秒) |
mysql_global_status_uptime |
MySQL 运行时长 |
SSL/TLS 连接
如果 MySQL 启用了 SSL,在 .my.cnf 里加:
ini
ssl-ca=/path/to/ca.pem
ssl-key=/path/to/client-key.pem
ssl-cert=/path/to/client-cert.pem
常用 PromQL
promql
# MySQL 是否在线
mysql_up
# 连接使用率
mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100
# 复制延迟
mysql_slave_status_seconds_behind_master
# InnoDB 缓存命中率
(mysql_global_status_innodb_buffer_pool_read_requests - mysql_global_status_innodb_buffer_pool_reads) / mysql_global_status_innodb_buffer_pool_read_requests * 100
# QPS(每秒查询数)
rate(mysql_global_status_questions[5m])