Prometheus监控MySQL配置过程
Tags: MySQLPrometheus巡检数据库监控监控
简介
https://github.com/prometheus/mysqld_exporter
https://github.com/prometheus/mysqld_exporter/releases
https://prometheus.io/download/
mysql_exporter:用于收集MySQL性能信息。
mysqld_exporter是一个客户端软件,所以可以不用部署到MySQL服务器上,所以对MySQL服务器来说是0侵入的。
因此,监控MySQL分为2种部署方式:
1、分离部署+环境变量
这种方式是在每个mysql服务器上跑一个exporter程序,比如10.10.20.14服务器上跑自己的mysqld_exporter,而登到10.10.20.15服务器上也启动自己的mysqld_exporter,也就是分离部署,这样的话每个mysql服务器上除了mysqld进程外还会多一个mysqld_exporter的进程。
2、集中部署+配置文件
如果我们想要保持mysql服务器零入侵的纯净环境,这时候就可以尝试一下集中部署+配置文件的方式。集中部署,就是说我们将所有的mysqld_exporter部署在同一台服务器上,在这台服务器上对mysqld_exporter进行统一的管理。
prometheus+grafana安装配置
请参考:https://www.xmmup.com/dbbao36shiyongdockerfenfenzhongdajianpiaoliangdeprometheusgrafanajiankong.html
安装mysqld_exporter
下载地址:https://github.com/prometheus/mysqld_exporter
1 2 3 4 | wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz tar -xzvf mysqld_exporter-0.13.0.linux-amd64.tar.gz mv mysqld_exporter-0.13.0.linux-amd64 /usr/local/mysqld_exporter chown -R prometheus:prometheus /usr/local/mysqld_exporter |
登录mysql为exporter创建账号并授权
1 2 3 4 5 6 7 8 | grant process,replication client,select on *.* to 'agent'@'%' identified by '123456'; flush privileges; grant select,process,super,replication client,reload on *.* to 'lhr'@'%' identified by 'lhr'; flush privileges; CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost'; |
启动mysqld_exporter服务
1 2 3 4 5 | export DATA_SOURCE_NAME='lhr:lhr@(172.72.0.5:3306)/' nohup /usr/local/bin/mysqld_exporter 1>/dev/null 2>&1 & lsof -i:9104 |
注:如上内容DATA_SOURCE_NAME可以写入rc.local文件开机自启,可以配置服务开机自启。
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
(也可以)配置mysqld_exporter系统服务
配置文件
1 2 3 4 | > vim /usr/local/mysqld_exporter/.my.cnf [client] user=agent password=123456 |
配置成系统服务
1 2 3 4 5 6 7 8 9 | > vim /usr/lib/systemd/system/mysqld_exporter.service [Unit] Description=https://prometheus.io [Service] Restart=on-failureExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=.my.cnf [Install] WantedBy=multi-user.target |
启动mysqld_exporter服务
1 2 | > systemctl daemon-reload > systemctl start mysqld_exporter |
配置prometheus
1 2 3 4 5 6 7 8 | > vim /usr/local/prometheus/prometheus.yml scrape_configs: # 添加作业并命名 - job_name: 'mysql' # 静态添加node static_configs: # 指定监控端 - targets: ['127.0.0.1:9104'] |
重启prometheus服务
1 2 3 4 | # 通过命令热加载,也可以直接“pkill prometheus”: curl -XPOST http://localhost:9090/-/reload -- systemctl reload prometheus.service |
测试已经集成的监控指标:
curl http://192.168.66.35:9104/metrics
查看监控端
访问:https://rumenz.com:9090/targets
回到web管理界面 --》点Status --》点Targets --》可以看到监控MySQL了
Granfana 导入Mysql 监控
选择Import,Load框输入7362
效果展示
集中部署+配置文件
例如:直接将mysqld_exporter部署到Prometheus服务器上,用来其它监控多个MySQL服务器。
① 在Prometheus服务器上安装mysqld_exporter
② 配置mysql文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | mkdir -p /etc/mysqld_exporter/ cd /etc/mysqld_exporter/ cat > mysql573317.cnf << "EOF" [client] user=root password=lhr host=192.168.66.35 port=3317 EOF cat > mysql803318.cnf << "EOF" [client] user=root password=lhr host=192.168.66.35 port=3318 EOF unset DATA_SOURCE_NAME nohup mysqld_exporter --web.listen-address=localhost:9104 --config.my-cnf=/etc/mysqld_exporter/mysql573317.cnf 1>/dev/null 2>&1 & nohup mysqld_exporter --web.listen-address=localhost:9105 --config.my-cnf=/etc/mysqld_exporter/mysql803318.cnf 1>/dev/null 2>&1 & curl http://localhost:9104/metrics curl http://localhost:9105/metrics |
这里看到mysqld_exporter的启动多了两个选项,"--web.listen-address"和"--config.my-cnf"。
web.listen-address代表这个mysqld_exporter进程绑定的端口,以供prometheus调用,这里暴露的是本机的9104端口。
config.my-cnf代表这个mysqld_exporter进程监控的MySQL的连接信息。
③ 在prometheus服务器配置prometheus文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | vi /usr/local/prometheus/prometheus.yml - job_name: 'MYSQL' static_configs: - targets: ['localhost:9104'] labels: instance: 192.168.66.35:3317 - targets: ['localhost:9105'] labels: instance: 192.168.66.35:3318 #mysql组 - job_name: 'MYSQL' scrape_interval: 30s static_configs: - targets: ['192.168.66.35:9104'] - targets: ['192.168.66.35:9105'] -- 热重启 curl -XPOST http://localhost:9090/-/reload |
④ 在Grafana中刷新即可