prometheus监控mysql服务

文章目录

  • 一、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 配置告警

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

相关推荐
M1582276905521 小时前
四通道全能组网!SG-Canet-410 CAN转以太网网关,破解工业CAN通信瓶颈
linux·运维·服务器
誰能久伴不乏21 小时前
【Qt实战】工业级多线程串口通信:从底层协议设计到完美收发闭环
linux·c++·qt
bjxiaxueliang21 小时前
一文解决蓝牙连接难题:Ubuntu命令行蓝牙强制配对
linux·ubuntu·蓝牙连接命令
浪客灿心21 小时前
Linux库制作与原理
linux·运维·服务器
成为你的宁宁1 天前
【Linux Swap 交换分区:定义、作用与操作指南】
linux·交换分区
快乐非自愿1 天前
【面试题】MySQL 的索引类型有哪些?
数据库·mysql·面试
Dontla1 天前
Vite代理 vs Nginx代理(开发环境用Vite,生产环境用Nginx)
运维·nginx
运维小欣1 天前
博睿数据:以Agentic AI驱动智能运维未来
运维·人工智能
Ha_To1 天前
2026.1.28 docker安装
运维·docker·容器
霖霖总总1 天前
[小技巧55]深入解析数据库日志机制:逻辑日志、物理日志与物理逻辑日志在 MySQL InnoDB 中的实现
数据库·mysql