共计 2829 个字符,预计需要花费 8 分钟才能阅读完成。
背景
大约三年前,由于 mysql_exporter 原生并不支持多实例监控(即每个 MySQL 实例都需要启动一个新的 exporter 才能抓取到指标),当时需要自行编译源码实现,略为繁琐。再加上团队内有同事专职开发 telegraf 实现指标统一收集,于是用 telegraf 取代了 mysql_exporter。
查阅资料时,发现 mysql_exporter 已于2022年原生支持多实例监控,着手测试下相关能力。
实操
从0开始进行测试,不直接操作线上环境。
software | IP | port |
---|---|---|
MySQL 5.7 | 192.168.2.11 | 3007 |
MySQL 8.0 | 192.168.2.11 | 3008 |
mysql_exporter 0.16.0 | 192.168.2.10 | 9104 |
Prometheus | 192.168.2.10 | 9090 |
部署MySQL
使用最简单的 docker 部署方式,部署两个 MySQL实例,版本分别为 5.7 & 8.0
# 创建数据目录
cd /usr/local/test/
mkdir ./mysql/mysql57/data -p
mkdir ./mysql/mysql80/data -p
# 创建启动脚本
# vim run-mysql57.sh
docker run -d \
--name mysql57 \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=root123passwd \
-v /usr/local/test/mysql-docker/mysql/mysql57/data:/var/lib/mysql \
mysql:5.7
# vim run-mysql80.sh
docker run -d \
--name mysql80 \
-p 3308:3306 \
-e MYSQL_ROOT_PASSWORD=root123passwd \
-v /usr/local/test/mysql-docker/mysql/mysql80/data:/var/lib/mysql \
mysql:8.0
# 启动 mysql 容器
bash run-mysql57.sh
bash run-mysql80.sh
# MySQL 5.7 添加监控用户
mysql -h127.0.0.1 -P3307 -uroot -proot123passwd
CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'testpasswd123' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';
# MySQL 8.0 添加监控用户
mysql -h127.0.0.1 -P3307 -uroot -proot123passwd
CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'testpasswd123' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';
mysql_exporter 配置
从 GitHub 下载对应版本:
# 下载
cd /tmp
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.16.0/mysqld_exporter-0.16.0.linux-amd64.tar.gz
tar xf tar xf mysqld_exporter-0.16.0.linux-amd64.tar.gz
cd /tmp/mysqld_exporter-0.16.0.linux-amd64
mv mysqld_exporter /usr/local/bin/
# 创建配置文件
# vim /var/lib/.my.cnf
[client]
user=mysql_exporter
password=testpasswd123
# 使用 systemd 管理 mysql_exporter
# 配置单元文件
# vim /etc/systemd/system/mysqld_exporter.service
[Unit]
Description=Prometheus Mysqld Exporter
After=network.target
[Service]
Type=simple
User=root
Group=root
Nice=-5
ExecStart=/usr/local/bin/mysqld_exporter \
--config.my-cnf=/var/lib/.my.cnf \
--web.listen-address=0.0.0.0:9104
SyslogIdentifier=mysqld_exporter
Restart=always
# 启动和开机自启
systemctl start mysqld_exporter.service
systemctl enable mysqld_exporter.service
systemctl status mysqld_exporter.service
Prometheus配置
一般情况下,job 中建议使用 file_sd_configs 而不是 static_configs 维护多实例的 target,这样可以使得配置文件结构更清晰,且便于管理。
# 添加 job
# vim /etc/prometheus/prometheus.yml
- job_name: 'mysqld_exporter'
file_sd_configs:
- files:
- '/etc/prometheus/file_sd/mysql.yml'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9104
# 维护对应的子配置文件以实现自动发现
# vim /etc/prometheus/file_sd/mysql.yml
- labels:
instance_name: "test-mysql-5.7"
targets:
- 192.168.2.11:3307
- labels:
instance_name: "test-mysql-8.0"
targets:
- 192.168.2.11:3308
# 重载 Prometheus
systemctl reload prometheus.service
查看 Prometheus web端的 target 抓取情况:
亦能看到指标已经被成功收集:
Grafana 展示
面板 json 有需要可自取:open.opshub.cn/wordpress/grafana-mysql.json
本文属于专题:Prometheus Exporter
- 使用 Redis Exporter 监控 Redis
- Prometheus 集成 Nginx 监控
- 云监控接入本地Prometheus
- 使用 MySQL Exporter 监控MySQL
- Blackbox 网络监控
- node_exporter 添加自定义指标
- 使用 node_exporter 实现路由器监控
引用链接
正文完
发表至: 监控
2024-12-31