当前位置: 首页 > article >正文

@Prometheus 监控-MySQL (Mysqld Exporter)

文章目录

    • **Prometheus 监控 MySQL **
      • **1. 目标**
      • **2. 环境准备**
        • **2.1 所需组件**
        • **2.2 权限要求**
      • **3. 部署 mysqld_exporter**
        • **3.1 下载与安装**
        • **3.2 创建配置文件**
        • **3.3 创建 Systemd 服务**
        • **3.4 验证 Exporter**
      • **4. 配置 Prometheus**
        • **4.1 添加 Job 到 `prometheus.yml`**
        • **4.2 重载 Prometheus**
      • **5. 核心监控指标说明**
      • **6. 告警规则配置**
        • **6.1 创建告警规则文件**
        • **6.2 在 `prometheus.yml` 中加载规则**
      • **7. Grafana 仪表盘配置**
      • **8. 维护与优化**
        • **8.1 定期检查**
        • **8.2 安全加固**
        • **8.3 性能调整**
      • **9. 故障排查**
        • **9.1 Exporter 无数据**
        • **9.2 Prometheus 未抓取**
      • **10. 附录**

**Prometheus 监控 MySQL **

1. 目标

  • 实时监控 MySQL 关键性能指标(如连接数、查询吞吐量、复制状态等)。
  • 设置告警规则,及时发现数据库异常。
  • 通过 Grafana 可视化监控数据。

2. 环境准备

2.1 所需组件
组件作用安装位置
Prometheus Server指标采集与存储监控服务器
mysqld_exporter暴露 MySQL 指标MySQL 服务器
Grafana数据可视化监控服务器
Alertmanager告警通知管理监控服务器
2.2 权限要求
  • MySQL 用户需具备 PROCESS, REPLICATION CLIENT, SELECT 权限:
    CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'YourStrongPassword';
    GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
    FLUSH PRIVILEGES;
    

3. 部署 mysqld_exporter

3.1 下载与安装
# 下载最新版 (替换版本号)
VERSION="0.15.1"
wget https://github.com/prometheus/mysqld_exporter/releases/download/v${VERSION}/mysqld_exporter-${VERSION}.linux-amd64.tar.gz
tar xvf mysqld_exporter-${VERSION}.linux-amd64.tar.gz
sudo mv mysqld_exporter-${VERSION}.linux-amd64/mysqld_exporter /usr/local/bin/
3.2 创建配置文件

创建 .my.cnf 文件存储数据库连接信息:

sudo tee /etc/.mysqld_exporter.cnf <<EOF
[client]
user=exporter
password=YourStrongPassword
host=localhost
port=3306
EOF
sudo chmod 600 /etc/.mysqld_exporter.cnf  # 限制权限
3.3 创建 Systemd 服务

/etc/systemd/system/mysqld_exporter.service

[Unit]
Description=MySQL Prometheus Exporter
After=network.target[Service]
User=mysqld_exporter
ExecStart=/usr/local/bin/mysqld_exporter \--config.my-cnf=/etc/.mysqld_exporter.cnf \--collect.global_status \--collect.info_schema.innodb_metrics \--collect.slave_status \--collect.info_schema.processlistRestart=always[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start mysqld_exporter
sudo systemctl enable mysqld_exporter
3.4 验证 Exporter

访问指标接口:
curl http://localhost:9104/metrics
应输出包含 mysql_ 前缀的指标。


4. 配置 Prometheus

4.1 添加 Job 到 prometheus.yml
scrape_configs:- job_name: 'mysql'static_configs:- targets: ['mysql-server-ip:9104']  # Exporter 地址relabel_configs:- source_labels: [__address__]target_label: instancereplacement: 'mysql-primary'  # 实例标识
4.2 重载 Prometheus
curl -X POST http://localhost:9090/-/reload  # 或重启服务

5. 核心监控指标说明

指标名称含义告警建议
mysql_global_status_threads_connected当前连接数> 80% max_connections
mysql_global_status_threads_running活跃连接数持续 > 100
mysql_global_status_slow_queries慢查询计数短时间内突增
mysql_global_variables_max_connections最大连接数规划容量参考
mysql_slave_status_slave_io_running主从 IO 线程状态≠ 1 (异常)
mysql_info_schema_innodb_row_lock_time_avg平均行锁等待时间> 500ms

6. 告警规则配置

6.1 创建告警规则文件

/etc/prometheus/rules/mysql_alerts.yml

groups:
- name: MySQL-Alertsrules:- alert: MySQLHighConnectionsexpr: mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100 > 80for: 5mlabels:severity: warningannotations:summary: "MySQL 高连接数 ({{ $value }}%)"description: "实例 {{ $labels.instance }} 连接数超过 80% 限制"- alert: MySQLReplicationFailureexpr: mysql_slave_status_slave_io_running != 1 or mysql_slave_status_slave_sql_running != 1for: 1mlabels:severity: criticalannotations:summary: "MySQL 复制中断 ({{ $labels.instance }})"
6.2 在 prometheus.yml 中加载规则
rule_files:- "/etc/prometheus/rules/mysql_alerts.yml"

7. Grafana 仪表盘配置

  1. 导入官方 Dashboard:
    • ID 7362 (MySQL Overview)
  2. 配置 Prometheus 为数据源。

8. 维护与优化

8.1 定期检查
  • 验证 Exporter 状态:systemctl status mysqld_exporter
  • 检查指标收集延迟:prometheus_target_interval_length_seconds
  • 审核 MySQL 用户权限(每年至少一次)。
8.2 安全加固
  • 使用 TLS 加密 Exporter 通信:
    mysqld_exporter --web.config.file=/path/to/web-config.yml
    
    web-config.yml 示例:
    tls_server_config:cert_file: server.crtkey_file: server.key
    
8.3 性能调整
  • 限制采集的指标(减少负载):
    --no-collect.info_schema.tables  # 禁用表统计
    
  • 调整 Prometheus 抓取间隔(默认 15s):
    scrape_interval: 30s  # prometheus.yml
    

9. 故障排查

9.1 Exporter 无数据
  • 检查 MySQL 用户权限。
  • 测试连接:mysql --defaults-file=/etc/.mysqld_exporter.cnf -e "SHOW STATUS"
  • 查看 Exporter 日志:journalctl -u mysqld_exporter -f
9.2 Prometheus 未抓取
  • 访问 http://prom-server:9090/targets 检查 Target 状态。
  • 验证网络连通性:telnet mysql-server-ip 9104

10. 附录

  • mysqld_exporter 官方文档
    https://github.com/prometheus/mysqld_exporter
  • MySQL 监控关键指标指南
    https://prometheus.io/docs/guides/mysqld-exporter/

按照此文档,可实现 MySQL 的全面监控与告警,确保数据库稳定性。部署后需通过压力测试验证监控有效性,并根据业务特点调整告警阈值。

http://www.lryc.cn/news/2401955.html

相关文章:

  • pc端小卡片功能-原生JavaScript金融信息与节日日历
  • 窗口聚合窗口聚合
  • es在Linux安装
  • Go语言学习-->第一个go程序--hello world!
  • 高雄市12岁以下身心障碍儿童口腔保健合作院所名单数据集
  • Spring Boot 自动参数校验
  • 破局新能源消纳难题!安科瑞智慧能源平台助力10KV配电网重构未来
  • 推荐10个AI视频生成工具网站
  • TIA博途中的程序导出为PDF格式的具体方法示例
  • 【大模型:知识图谱】--4.neo4j数据库管理(cypher语法1)
  • Java 实现下拉框树状结构接口的核心思路
  • 数字化时代养老机构运营实训室建设方案:养老机构运营沙盘实训模块设计
  • 自由开发者计划 004:创建一个苹果手机长截屏小程序
  • 【Go语言基础】基本语法
  • 工作流引擎-18-开源审批流项目之 plumdo-work 工作流,表单,报表结合的多模块系统
  • 【虚拟机版本号】如果忘记了版本号,这样查找版本号
  • std::conditional_t一个用法
  • Java高效批量读取Redis数据:原理、方案与实战案例
  • 基于RK3568的多网多串电力能源1U机箱解决方案,支持B码,4G等
  • 面试题:Java多线程并发
  • 2006-2020年各省用水总量数据
  • 舵机在弹簧刀无人机中的作用是什么?
  • c++ openssl 使用 DES(数据加密标准)进行加密和解密的基本操作
  • Git忽略规则.gitignore不生效解决
  • Excel高级函数使用FILTER、UNIQUE、INDEX
  • 6月5日day45
  • Linux 系统 rsyslog 配置
  • 基于rpc框架Dubbo实现的微服务转发实战
  • matlab基于GUI实现水果识别
  • 视频爬虫的Python库