prometheus+grafana监控mysql(单一 mysql_exporter 抓取多个 mysql 主机)

部署mysqld_exporter

在prometheus机器部署即可

# 创建数据库账号,所有需要监控的mysql提供的账户密码需要一致
use mysql;
CREATE USER 'exporter'@'%' IDENTIFIED BY '1qaz@WSX';
grant PROCESS, REPLICATION CLIENT, SELECT on *.* To 'exporter'@'%';
flush privileges;

# 安装mysqld_exporter
tar -xf mysqld_exporter-0.17.2.linux-amd64.tar.gz -C /usr/local
mv /usr/local/mysqld_exporter-0.17.2.linux-amd64 /usr/local/mysqld_exporter

# 编辑mysqld_exporter配置文件my_exporter.cnf
vim /usr/local/mysqld_exporter/my_exporter.cnf
[client]
user=exporter
password=1qaz@WSX

# 启动mysqd_exporter
cat > /usr/lib/systemd/system/mysqld_exporter.service << EOF
[Unit]
Description=Prometheus
After=network-online.target

[Service]
Restart=on-failure
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/my_exporter.cnf --collect.info_schema.processlist --collect.info_schema.tables  --collect.info_schema.tablestats

[Install]
WantedBy=multi-user.target
EOF
# --collect.info_schema.processlist: 开启对 MySQL 活跃进程列表的采集。
# --collect.info_schema.tables: 开启对 MySQL 表级信息的采集。
# --collect.info_schema.tablestats: 开启对 MySQL 表级状态信息的采集(需 MySQL 5.6+ 支持)。

systemctl daemon-reload 
systemctl enable mysqld_exporter
systemctl start   mysqld_exporter
systemctl status  mysqld_exporter

配置prometheus拉取mysql_exporter的数据

vim /data/prometheus/prometheus.yml 
  - job_name: "mysql_exporter"
    scrape_interval: 15s # 表示 Prometheus 每隔 15 秒会对目标服务(如 node_exporter)进行一次数据采集
    scrape_timeout: 5s  # 定义了每次采集的超时时间
    file_sd_configs:
      - files:
        - /data/prometheus/target/mysql.yml
        refresh_interval: 15s #代表15秒加载一次配置文件
    metrics_path: /probe  # 指定 Prometheus 采集指标时请求的路径为 /probe。
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:9104
      
# relabel_configs:
# 第一条规则:将原始目标地址(__address__)的值复制到 __param_target 参数中。例如:如果 __address__ 是 mysql-server:3306,那么 __param_target 也会变成 mysql-server:3306。
# 第二条规则:将 __param_target 的值复制到 instance 标签。这样 instance 标签会记录被监控的 MySQL 实例地址。
# 第三条规则:将抓取请求的实际目标地址(__address__)重写为 localhost:9104(即 mysqld_exporter 的地址)。这意味着 Prometheus 会向本地的 mysqld_exporter 发送请求,而不是直接访问 MySQL。

cat /data/prometheus/target/mysql.yml
- targets: ["10.0.0.71:3306"]
  labels:
    group: ruoyi
    name: ruoyi-mysql-master
- targets: ["10.0.0.72:3306"]
  labels:
    group: ruoyi
    name: ruoyi-mysql-slave
- targets: ["10.0.0.81:3306"]
  labels:
    group: eladmin
    name: eladmin-mysql-master
- targets: ["10.0.0.82:3306"]
  labels:
    group: eladmin
    name: eladmin-mysql-slave
- targets: ["10.0.0.61:3306"]
  labels:
    group: ruoyi
    name: ruoyi-docker-mysql
- targets: ["10.0.0.62:3306"]
  labels:
    group: eladmin
    name: eladmin-docker-mysql

热加载prometheus:

curl -X POST http://localhost:9090/-/reload

调试命令:

curl http://127.0.0.1:9104/probe?target=10.0.0.61:3306

查看是否正常:
20250822124805

配置grafana面板

直接导入面板代码17320即可
20250822130038

posted @ 2025-07-28 18:53  阿峰博客站  阅读(7)  评论(0)    收藏  举报