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
查看是否正常:
配置grafana面板
直接导入面板代码17320即可