version: "3.2"
services:
mysqld_exporter:
image: swr.cn-south-1.myhuaweicloud.com/starsl.cn/mysqld_exporter:latest
container_name: mysqld_exporter
hostname: mysqld_exporter
restart: unless-stopped
volumes:
- /usr/share/zoneinfo/PRC:/etc/localtime
environment:
MYSQLD_EXPORTER_PASSWORD: exporter@2021
entrypoint:
- /bin/mysqld_exporter
- --collect.info_schema.innodb_metrics
- --collect.info_schema.tables
- --collect.info_schema.processlist
- --collect.info_schema.tables.databases=*
- --mysqld.username=mysql_exporter
expose:
- 9104
network_mode: "host"
Docker Compose 使用说明
- 该镜像用于多个 MySQL 实例共享一个 mysqld_exporter。
MYSQLD_EXPORTER_PASSWORD
需修改为实际监控专用账号密码后再启动。- 该配置适用于所有 MySQL 实例使用相同的监控账号密码。
- 若不同 MySQL 实例需要不同监控账号密码,请参考官方 README 使用配置文件方式启动。
监控专用账户权限配置
CREATE USER 'mysql_exporter'@'multi_mysqld_exporter主机的IP' IDENTIFIED BY 'exporter@2021' WITH MAX_USER_CONNECTIONS 10;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'multi_mysqld_exporter主机的IP';
Prometheus 配置
静态配置方式
- job_name: multi_mysqld_exporter
scrape_interval: 30s
metrics_path: /probe
static_configs:
- targets:
- server1:3306
- server2:3306
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 你的mysqld_exporter地址:9104
Mysqld Exporter Dashboard 中文版
该仪表板基于 Mysqld Exporter 监控指标设计,
- 汉化官方版本,增加总览页。
- 新增表大小行数统计,优化重要指标展示。
其他监控信息
- 自建 MySQL:从 node-exporter 获取 CPU、内存、磁盘等信息,通过实例 IP 进行关联。
- 云 DRS:从 ConsulManager-MySQL 获取,基于实例 ID 进行关联(数据来源于云监控)。
MySQL 监控告警规则配置指南
告警规则分类
1. 实例存活监控
- alert: MySQLDown
expr: mysql_up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "MySQL 实例 {{ $labels.instance }} 已停机"
description: "MySQL 实例 {{ $labels.instance }} 已经停机超过 5 分钟"
监控指标:mysql_up
触发条件:实例不可用持续5分钟
严重等级:Critical
处理建议:
- 检查实例进程状态
- 检查主机资源使用情况
- 验证网络连通性
2. 主从角色状态监控
主库异常只读
- alert: 主库处于只读状态
expr: mysql_global_variables_read_only{role="master"} == 1
for: 1m
labels:
severity: critical
从库未设只读
- alert: 从库未处于只读状态
expr: mysql_global_variables_read_only{role="slave"} == 0
for: 1m
labels:
severity: warning
监控指标:mysql_global_variables_read_only
配置要求:
- 主库必须
read_only=0
- 从库必须
read_only=1
3. 主从复制监控
SQL线程停止
- alert: MySQL从库SQL线程未运行
expr: mysql_slave_status_slave_sql_running == 0
for: 1m
severity: critical
同步延迟
- alert: MySQL从库延迟过高
expr: mysql_slave_status_seconds_behind_master > 300
for: 2m
severity: warning
关键指标:
mysql_slave_status_slave_sql_running
:SQL线程运行状态mysql_slave_status_seconds_behind_master
:主从延迟秒数
阈值建议:
- 延迟告警阈值:300秒(5分钟)
- 生产环境建议根据业务特点调整
4. 连接数监控
- alert: MySQL连接数过高
expr: mysql_global_status_threads_connected > 1500
for: 2m
severity: warning
容量规划建议:
-- 查看最大连接数配置
SHOW VARIABLES LIKE 'max_connections';
-- 建议设置:
-- 专用数据库:max_connections = (可用内存MB / 6MB) * 0.8
-- 共享环境:根据业务需求调整
告警规则模板使用说明
-
变量替换:
- 所有
{{ $labels.instance }}
会自动替换为实际实例名 role="master/slave"
标签需要预先在Prometheus中配置
- 所有
-
阈值调整建议:
# 查看当前连接数趋势 mysqladmin -uroot -p extended-status | grep Threads_connected # 查看历史最大连接数 SHOW GLOBAL STATUS LIKE 'Max_used_connections';
-
告警升级策略:
- 延迟告警持续10分钟未恢复 → 升级为Critical
- 连接数持续增长 → 建议配置递增告警规则
监控指标对照表
告警类型 | PromQL表达式 | 指标说明 |
---|---|---|
实例存活 | mysql_up |
二进制状态指标 |
主从状态 | mysql_global_variables_read_only |
只读模式开关 |
复制线程 | mysql_slave_status_slave_*_running |
IO/SQL线程状态 |
同步延迟 | mysql_slave_status_seconds_behind_master |
主从延迟秒数 |
连接数 | mysql_global_status_threads_connected |
当前连接数 |
评论