前言:
1. zabbix默认监控模板中有监控Mysql的一些监控项,但是感觉不是太符合自己的情况使用,所以想着做一套自定义监控项来监控Mysql的各项数据。
2. 安装zabbix跟Mysql的步骤就略过了,可以看前面几篇帖子自行安装。
3. 这边我先监控了Mysql的以下一些数据,后边会根据需要在不断补充:
当前连接数 历史连接数 配置连接数 Mysql状态 线程正在运行 每秒创建的线程数 线程连接 缓存线程 Mysql CPU,内存利用率
第一步 创建自定义监控项
这边在我之前测试的agent2主机上已经使用Docker安装了Mysql8.0
在Mysql创建一个监控用户
# 在Mysql中创建一个zabbix监控用户
CREATE USER 'zabbix'@'%'IDENTIFIED BY 'zabbix';
GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix'@'%';
flush privileges;
# 修改一下mysql的配置文件,把用户添加进去,要不收集信息的时候mysql会警告命令行中输入密码是不安全的行为
vim /etc/mysql/my.cnf # 打开Mysql的配置文件底部添加以下几行
[client]
user=zabbix
password=zabbix
[mysqladmin]
host=localhost
user=zabbix
password=zabbix
docker restart mysql8.0 # 重启一下服务重载配置文件
创建自定义监控项配置文件
因为我的Mysql是用Docker搭建的,所以每个命令前面我都加了一个docker exec -it mysql8.0,如果自己有想法可以更改,不是必须的,只要能获取到想要的值就行
因为第一步已经把监控用户放到配置文件中了,所以这边就不需要mysql -u -p 的这两个参数了
自定义监控项参数为:
UserParameter= # 固定格式
mysql.Cpu # 键值,添加监控项就是用它等于标识符
,docker stats.... # 逗号以后的就是收集指标的命令了
创建一个自定义监控项的配置文件
vim /etc/zabbix/zabbix_agent2.d/mysql.conf
# Mysql CPU 内存利用率
UserParameter=mysql.Cpu,docker stats --no-stream | grep mysql8.0 | awk '{print $3}' | sed s'/%//'
UserParameter=mysql.Mem,docker stats --no-stream | grep mysql8.0 | awk '{print $4}' | sed s'/MiB//'
# 当前连接数 历史连接数 配置连接数
UserParameter=mysqld.Threads_connected,docker exec mysql8.0 bash -c "mysql -e \"SHOW GLOBAL STATUS LIKE 'Threads_connected';\"" | awk 'NR==2{print $2}'
UserParameter=mysql.Max_used_connections,docker exec mysql8.0 bash -c "mysql -e \"SHOW GLOBAL STATUS LIKE 'Max_used_connections';\"" | awk 'NR==2{print $2}'
UserParameter=mysql.Max_connections,docker exec mysql8.0 bash -c "mysql -e \"SHOW VARIABLES LIKE 'max_connections';\"" | awk 'NR==2{print $2}'
# Mysql状态 Mysql复制状态
UserParameter=mysql.Mysqladminstatus,docker exec mysql8.0 bash -c "if mysqladmin ping | grep -q 'mysqld is alive'; then echo 1; else echo 0; fi"
# 线程正在运行
UserParameter=mysql.MysqlThreads_running,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW GLOBAL STATUS LIKE 'Threads_running';\"" | awk 'NR==2{print $2}'
# 每秒创建的线程数
UserParameter=mysql.Threads_created,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW GLOBAL STATUS LIKE 'Threads_created';\"" | awk 'NR==2{print $2}'
# 线程连接
UserParameter=mysql.Threads_connected,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW GLOBAL STATUS LIKE 'Threads_connected';\"" | awk 'NR==2{print $2}'
# 缓存线程
UserParameter=mysql.Thread_cache_size,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW VARIABLES LIKE 'thread_cache_size';\"" | awk 'NR==2{print $2}'
# 配置好之后重启一下 agent2
systemctl restart zabbix-agent2.service
创建完之后测试
在 agent 端可以用 zabbix_agent2 -t 键值 来测试
在 server 端可以用 zabbix_get -s 192.168.1.11 -p 10050 -k 键值 来测试
zabbix_agent2 -t mysql.Cpu # 测试CPu键值的数据
mysql.Cpu [s|24.74] # 24.74就是数据
添加一下zabbix用户权限
因为 zabbix 服务是 zabbix 用户运行的,所以他没有执行 Docker 的权限,所以我需要把zabbix加到docker组中
sudo gpasswd -a zabbix docker
newgrp docker
# 加入之后重启一下agent2
systemctl restart zabbix-agent2.service
第二步:web页面创建一个单独的模板
第三步:创建自定义监控项
这边测试数据没问题保存就行
按照这个流程添加自己剩下所想监控的内容
第四步:创建几个触发器
按照上方配置流程添加自己想配置的触发器
第五步:创建主机测试效果
稍等没几分钟可以看到已经正常了
点击最新数据查看数据
测试触发器
我用其他主机登录Mysql 把Mysql的当前连接数给提上去
可以看到问题界面有报警,因为我触发器配置的是超过5个连接就告警
我现在断开连接看他恢复
第六步:接入Grafana
这步做不做都行,zabbix也有图形可以创建,我是因为正在学习这几个东西所以就接入一下
安装grafana就跳过了,可以看我的其他帖子安装
安装zabbix插件
因为grafana默认没有zabbix的数据源,所以需要自行安装插件激活一下
[root@Zabbix ~]# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 4.2.6
[root@Zabbix ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
✔ Downloaded alexanderzobnin-zabbix-app v4.2.6 zip successfully
Please restart Grafana after installing plugins. Refer to Grafana documentation for instructions if necessary.
[root@Zabbix ~]# ls /var/lib/grafana/plugins/
alexanderzobnin-zabbix-app
# 如果从github下载较慢,建议先下载然后安装
# 通过windows下载安装包 然后上传到/var/lib/grafana/plugins/进行解压
# 不管用哪种方式最后重启服务
安装好之后页面激活zabbix插件
添加数据源
创建仪表盘
这边我就示例创建两个仪表盘,也可以去grafana导入一个模板,那种做的也都不错
模板地址:Dashboards | Grafana Labs
多添加几个参数看下效果
保存仪表盘!!重要!!