文章目录
- 一、prometheus监控mysql
-
- [1.1 mysql配置](#1.1 mysql配置)
- [1.2 mysqld_exporter安装](#1.2 mysqld_exporter安装)
- [1.3 配置告警规则](#1.3 配置告警规则)
- [1.5 配置grafana](#1.5 配置grafana)
- [1.6 配置告警](#1.6 配置告警)
一、prometheus监控mysql
prometheus监控mysql需要使用到mysqld_exporter。prometheus及相关组件的安装参考:prometheus安装
1.1 mysql配置
此次所使用mysql为8.0.43,通过mysql 为mysqld_exporter插件创建一个用户,供连接mysql进行数据采集。
bash
# 不同版本的命令有所差别
# 创建exporter用户,为mysqld_exporter使用
mysql> create user 'exporter'@'localhost' identified by 'Xhy@@0310';
Query OK, 0 rows affected (0.02 sec)
# 授予exporter用户权限
mysql> grant process,replication client,replication slave,select on *.* to 'exporter'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT SELECT ON performance_schema.* TO 'exporter'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
1.2 mysqld_exporter安装
下载地址: mysqld_exporter
解压安装
bash
tar -xf mysqld_exporter-0.16.0.linux-amd64.tar.gz
mv mysqld_exporter-0.16.0.linux-amd64 /usr/local/mysqld_exporter
创建配置文件
bash
cd //usr/local/mysqld_exporter
[root@localhost mysqld_exporter]# vim .my.cnf
[client]
user=exporter # mysql创建的exporter用户
password=Xhy@@0310 # mysql创建的exporter密码
host=localhost # mysql的端口
port=3306 # mysql服务的端口
[root@localhost mysqld_exporter]# useradd -M -s /usr/sbin/nologin mysqld_exporter
[root@localhost mysqld_exporter]# chown -R mysqld_exporter:mysqld_exporter /usr/local/mysqld_exporter/
配置mysqld_exporter服务
bash
[root@localhost mysqld_exporter]# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter Service
After=network.target
[Service]
User=mysqld_exporter
Group=mysqld_exporter
Type=simple
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
[root@localhost mysqld_exporter]# systemctl daemon-reload
[root@localhost mysqld_exporter]# systemctl start mysqld_exporter
[root@localhost mysqld_exporter]# systemctl enable mysqld_exporter
访问9104端口查看

1.3 配置告警规则
编辑rules/mysql_alerts.yml文件
yml
cat /usr/local/prometheus/rules/mysql_alerts.yml
groups:
- name: mysql-alerts
rules:
- alert: MySQLHighThreadsConnected
expr: mysql_global_status_threads_connected > 100
for: 5m
labels:
severity: "critical" # 设置告警等级为 critical
annotations:
summary: "MySQL 的连接线程数过高"
description: "MySQL 的连接线程数已超过 100,目前值为 {{ $value }}。请检查数据库连接池和连接数设置。"
- alert: MySQLHighSlowQueries
expr: mysql_global_status_slow_queries > 1000
for: 10m
labels:
severity: "warning" # 设置告警等级为 warning
annotations:
summary: "MySQL 慢查询数量过高"
description: "MySQL 的慢查询数量已超过 1000,当前值为 {{ $value }}。请检查查询性能或优化数据库查询。"
- alert: MySQLHighQueryLatency
expr: mysql_query_response_time_seconds_mean > 1
for: 5m
labels:
severity: "critical" # 设置告警等级为 critical
annotations:
summary: "MySQL 查询响应时间过长"
description: "MySQL 平均查询响应时间已超过 1 秒,当前值为 {{ $value }}。请检查数据库性能和索引优化。"
- alert: MySQLReplicaLag
expr: mysql_slave_status_seconds_behind_master > 60
for: 5m
labels:
severity: "warning" # 设置告警等级为 warning
annotations:
summary: "MySQL 从库延迟过高"
description: "MySQL 从库的延迟已超过 60 秒,当前值为 {{ $value }}。请检查主从复制配置或网络延迟。"
- alert: MySQLHighAbortedConnects
expr: mysql_global_status_aborted_connects > 100
for: 10m
labels:
severity: "critical"
annotations:
summary: "MySQL 中断连接次数过多"
description: "MySQL 的中断连接次数已超过 100,当前值为 {{ $value }}。请检查 MySQL 错误日志,排查可能的故障或配置问题。"
- alert: MySQLHighConnections
expr: mysql_global_status_max_used_connections > 200
for: 5m
labels:
severity: "warning" # 设置告警等级为 warning
annotations:
summary: "MySQL 最大连接数过高"
description: "MySQL 使用的最大连接数已超过 200,当前值为 {{ $value }}。请检查应用连接池配置或数据库连接数限制。"
- alert: MySQLDiskSpaceLow
expr: node_filesystem_free_bytes{fstype=~"ext4|xfs",mountpoint="/"} < 10737418240
for: 5m
labels:
severity: "warning" # 设置告警等级为 warning
annotations:
summary: "MySQL 主机磁盘空间不足"
description: "MySQL 主机的磁盘空间已低于 10GB,当前值为 {{ $value }}。请清理不必要的文件或扩展磁盘空间。"
编辑prometheus.yml文件
yml
global:
scrape_interval: 15s # 默认抓取时间间隔
evaluation_interval: 15s # 规则评估间隔
scrape_timeout: 10s # 抓取超时时间
# 告警管理器设置
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.56.110:9093 # Alertmanager地址,ip和端口
# 告警规则设置
rule_files:
- "/usr/local/prometheus/rules/*.yml" # 告警规则文件路径
# 监控配置
scrape_configs:
# 监控prometheus自身
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# 监控服务器的数据采集组件
- job_name: "nodes" # 每个job是一个分组,可以配置多个被监控服务器
static_configs:
- targets: ["192.168.56.109:9100","192.168.56.110:9100"] # 主机上数据采集组件的ip和端口
# 监控数据库的数据采集组件
- job_name: "mysqld"
static_configs:
- targets: ["192.168.56.112:9104"]
在文件末尾增加mysqld_exporter的配置信息
yml
# 监控数据库的数据采集组件
- job_name: "mysqld"
static_configs:
- targets: ["192.168.56.112:9104"]
更改完成后重启prometheus,在前端页面查看是否配置成功


可以看到告警规则和mysqld_exporter都已经配置成功。
1.5 配置grafana
grafana配置参考上一章节内容。导入的Dashboard从grafana官方获取,ID为7362

1.6 配置告警
告警配置参考上一章节内容。