Centos8使用prometheus监控MySQL
前情提要
前面呢,我们已经在Centos8搭建了服务监控prometheus+node_export+grafana的整体环境,现在我们就把MySQL也加入prometheus监控吧,这样能更方便我们的工作。
安装部署mysqld_exporter
创建目录
[root@dxm22 /]# mkdir /data/mysqld_exporter
下载
[root@dxm22 mysqld_exporter]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
[root@dxm22 mysqld_exporter]# ll -h
总用量 6.8M
-rw-r--r-- 1 root root 6.8M 7月 29 2019 mysqld_exporter-0.12.1.linux-amd64.tar.gz
解压
[root@dxm22 mysqld_exporter]# tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
mysqld_exporter-0.12.1.linux-amd64/
mysqld_exporter-0.12.1.linux-amd64/NOTICE
mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter
mysqld_exporter-0.12.1.linux-amd64/LICENSE
将二进制文件mysqld_exporter拷贝到/usr/local/bin目录下
[root@dxm22 mysqld_exporter]# cp mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter /usr/local/bin/
[root@dxm22 mysqld_exporter]# ll /usr/local/bin/mysqld_exporter
-rwxr-xr-x 1 root root 14813452 12月 9 16:01 /usr/local/bin/mysqld_exporter
MySQL授权
mysqld_exporter需要连接MySQL,首先为它创建用户并赋予所需要的权限
# 选择使用mysql库
root@db 16:04: [(none)]> use mysql
Database changed
# 创建用户'mysqld_exporter'@'localhost'并设置密码为123456
root@db 16:04: [mysql]> create user 'mysqld_exporter'@'localhost' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.07 sec)
# 给用户'mysqld_exporter'@'localhost'授权
root@db 16:06: [mysql]> GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysqld_exporter'@'localhost';
Query OK, 0 rows affected (0.01 sec)
root@db 16:06: [mysql]> GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'localhost';
Query OK, 0 rows affected (0.01 sec)
# 刷新MySQL的系统权限相关表
root@db 16:06: [mysql]> flush privileges;
Query OK, 0 rows affected (0.01 sec)
配置启动exporter
修改my.cnf配置文件
mysqld_exporter启动的时候需要读取mysql授权用户的一个配置文件,所以我们要先修改一下这个配置文件my.cnf:
[root@dxm22 mysqld_exporter]# vim /etc/my.cnf
# 增加以下内容:
user=mysqld_exporter
password=123456
启动
[root@dxm22 mysqld_exporter]# /usr/local/bin/mysqld_exporter
INFO[0000] Starting mysqld_exporter (version=0.12.1, branch=HEAD, revision=48667bf7c3b438b5e93b259f3d17b70a7c9aff96) source="mysqld_exporter.go:257"
INFO[0000] Build context (go=go1.12.7, user=root@0b3e56a7bc0a, date=20190729-12:35:58) source="mysqld_exporter.go:258"
FATA[0000] failed reading ini file: open /root/.my.cnf: no such file or directory source="mysqld_exporter.go:264"
# 我们把my.cnf拷贝到root目录下一份,之后再尝试启动
[root@dxm22 mysqld_exporter]# cp /etc/my.cnf /root/.my.cnf
[root@dxm22 mysqld_exporter]# /usr/local/bin/mysqld_exporter &
[1] 39464
INFO[0000] Starting mysqld_exporter (version=0.12.1, branch=HEAD, revision=48667bf7c3b438b5e93b259f3d17b70a7c9aff96) source="mysqld_exporter.go:257"
INFO[0000] Build context (go=go1.12.7, user=root@0b3e56a7bc0a, date=20190729-12:35:58) source="mysqld_exporter.go:258"
INFO[0000] Enabled scrapers: source="mysqld_exporter.go:269"
INFO[0000] --collect.global_variables source="mysqld_exporter.go:273"
INFO[0000] --collect.slave_status source="mysqld_exporter.go:273"
INFO[0000] --collect.global_status source="mysqld_exporter.go:273"
INFO[0000] --collect.info_schema.innodb_cmpmem source="mysqld_exporter.go:273"
INFO[0000] --collect.info_schema.query_response_time source="mysqld_exporter.go:273"
INFO[0000] --collect.info_schema.innodb_cmp source="mysqld_exporter.go:273"
INFO[0000] Listening on :9104 source="mysqld_exporter.go:283"
可以看到没有报错,而且Listening on :9104,说明服务启动成功。
验证一下:
# 查看是否存在mysqld_exporter进程
[root@dxm22 mysqld_exporter]# ps aux | grep mysqld_exporter
root 39464 0.0 0.5 111904 9844 pts/0 Sl 16:22 0:00 /usr/local/bin/mysqld_exporter
root 39487 0.0 0.0 12320 992 pts/0 S+ 16:23 0:00 grep --color=auto mysqld_exporter
# 查看9104端口是否处于监听状态
[root@dxm22 mysqld_exporter]# netstat -ntlp | grep :9104
tcp6 0 0 :::9104 :::* LISTEN 39464/mysqld_export
浏览器输入IP+端口访问一下。
也可以在终端curl一下
[root@dxm22 mysqld_exporter]# curl localhost:9104/metrics | grep mysql_up
mysql_up 1 说明mysql启动,并且能正常监控到了
修改prometheus配置文件
修改prometheus.yml配置文件,添加一个job配置项,然后重新启动prometheus server端。
[root@dxm22 mysqld_exporter]# vim /etc/prometheus/prometheus.yml
# 在scrape_configs下面增加以下内容:
- job_name: 'mysql'
static_configs:
- targets: ['localhost:9104']
labels:
instance: pre-product_mysql_192.168.0.22
重启prometheus服务
我前面一篇文章已经搭建好了一套prometheus、node_exporter和grafana的监控环境,并且都加入到systemctl管理,所以我这里直接restart即可。
[root@dxm22 mysqld_exporter]# systemctl restart prometheus.service
Active: active (running)重启完成。访问http://192.168.0.22:9090/targets就可以看到MySQL。
将mysqld_exporter加入systemctl管理
创建mysqld_exporter.service服务文件
[root@dxm22 mysqld_exporter]# vim /etc/systemd/system/mysqld_exporter.service
# 内容如下:
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
User=mysql
Environment=DATA_SOURCE_NAME=mysqld_exporter:123456@(localhost:3306)/
ExecStart=/usr/local/bin/mysqld_exporter
--web.listen-address=0.0.0.0:9104
--config.my-cnf /etc/my.cnf \
--collect.slave_status \
--collect.slave_hosts \
--log.level=error \
--collect.info_schema.processlist \
--collect.info_schema.innodb_metrics \
--collect.info_schema.innodb_tablespaces \
--collect.info_schema.innodb_cmp \
--collect.info_schema.innodb_cmpmem
Restart=on-failure
[Install]
WantedBy=multi-user.targe
重新加载服务列表
[root@dxm22 mysqld_exporter]# systemctl daemon-reload
启动服务
# 查看上面手动启动的mysqld_exporter的进程
[root@dxm22 mysqld_exporter]# ps aux | grep mysqld_exporter
root 39464 0.0 0.8 114208 15836 pts/0 Sl 16:22 0:00 /usr/local/bin/mysqld_exporter
root 39920 0.0 0.0 12320 1088 pts/0 S+ 16:44 0:00 grep --color=auto mysqld_exporter
# 停止mysqld_exporter的进程
[root@dxm22 mysqld_exporter]# kill -9 39464
# 检查是否还存在mysqld_exporter进程
[root@dxm22 mysqld_exporter]# ps aux | grep mysqld_exporter
root 40153 0.0 0.0 12320 1084 pts/0 S+ 16:49 0:00 grep --color=auto mysqld_exporter
# 查询所有服务单元是否有mysqld_exporter
[root@dxm22 mysqld_exporter]# systemctl list-unit-files | grep mysqld_exporter
mysqld_exporter.service disabled
# 存在,且非开启自启动,接着使用systemctl启动mysqld_exporter服务
[root@dxm22 mysqld_exporter]# systemctl start mysqld_exporter.service
# 查看mysqld_exporter服务状态
[root@dxm22 mysqld_exporter]# systemctl status mysqld_exporter.service
Active: active (running) 可以看到mysqld_exporter服务已经启动成功。
配置grafana,导入MySQL模板
grafana官方市场已经为我们提供了mysql的模板,我们只需要import进来就可以使用了。 模板地址:https://grafana.com/grafana/dashboards/7362或者直接输入编号7362也可以。如图:
点击load,选择prometheus
点击import。
至此我们就完成了mysqld_export的安装配置以及使用prometheus的监控了。