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

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

相关推荐
charlee442 小时前
Ubuntu 下配置 SFTP 服务并实现安全数据共享
linux·ubuntu·sftp·freefilesync
tuokuac2 小时前
Linux的目录结构
linux·运维·服务器
A-刘晨阳2 小时前
【探索实战】基于Kubernetes部署Kurator
运维·云原生·容器·kubernetes·kurator
梦仔生信进阶2 小时前
【Linux基础】Linux磁盘空间管理之批量删除文件
linux
MarkHD2 小时前
智能体在车联网中的应用:第6天 核心工具链与仿真世界:从零构建车联网开发环境——Linux Ubuntu与命令行精要指南
linux·运维·ubuntu
qq762118222 小时前
Linux mq_open打开失败
linux·运维·服务器
2401_858286112 小时前
纪念人生提交的第一个即将并入Linux内核的补丁
linux·运维·服务器
tuokuac2 小时前
Linux中的cd ~命令
linux·运维·服务器
彬鸿科技2 小时前
【SDR课堂第42讲】RFSOC开发入门之开发环境搭建(三)
linux·运维·数据库·ubuntu·postgresql·软件无线电·软无