本文带来带来如何监控 MySQL 的教程。MySQL 相比于 PG 和 MS SQL 监控难度最小,因为比较成熟,而且使用广泛,自然监控手段就没那么复杂,当然因为是基础篇,所以才说难度较低,监控的指标依照官方模板,对于初学者来说足够使用了。如果有深入的监控需求,那就需要和业务方沟通,根据监控的范围来制作自定义指标了。
正文
本文环境
- Zabbix 6.0 LTS
- Mysql 8.0 / Mariadb 10.6
- RockyLinux 8.5
- Zabbix agent 6.0.1
Zabbix 前端配置
由于是基础篇,本文以 Zabbix Server 自身的后端数据库为例(如果环境为 mariadb 10.6 的朋友脚本请参考附录)
调用数据库模板
进入配置选项里的主机选项,点击 Zabbix Server
由于 6.0 相比于 5.0 的前端操作逻辑有点区别,所以这里点击模板块的 select
监控 mysql 的模板在Templates/Databases
下的Template DB MYSQL
(如果是 Zabbix 5,则为 Template DB MySql by Zabbix agent)
添加完成如下
此时等了一会发现无法获取 mysql 的相关数据,点击主机的监控项查看发现显示都为 Unsupported item key,其次通过查看 Zabbix Server 的日志也可以发现也是这问题。
创建监控用户及授权
代码语言:javascript复制CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'xiaoyu123';
GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
创建数据库免密登录文件(.my.cnf)
由于普通的 Zabbix agent 是不具备数据库登录环境的,所以需要调用数据库客户端登录数据库,此时需要创建免密登录文件来实现,而 Zabbix agent 的家目录在 /var/lib/zabbix
下(如果没有就创建),本文演示没有。
mkdir -m u=rwx,g=rwx,o= -p /var/lib/zabbix
chown zabbix:zabbix /var/lib/zabbix
touch /var/lib/zabbix/.my.cnf
将下面内容填入到 .my.cnf
即可
[client]
user='zbx_monitor'
password='xiaoyu123'
创建自定义监控项
代码语言:javascript复制vim /etc/zabbix/zabbix_agentd.d/mysql.conf
代码语言:javascript复制UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
重启 agent
代码语言:javascript复制systemctl restart zabbix-agent
效果
通过后台日志可以发现,原来不支持的监控项已经变成支持了,且数据也恢复正常了
附录
有部分朋友有可能后端采用的为 Mariadb ,10.6 版本做了比较大的调整,所以自定脚本需要调整,调整如下
代码语言:javascript复制UserParameter=mysql.ping[*], mysqladmin -h"$1" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -sNX -e "show slave status"
写在最后
整个过程不太难,当然要理解其中模板的调用关系还是稍微有点复杂,只有了解了 Zabbix 自定义监控脚本才能更深层次监控 MySQL 数据库,当然这个是后话了,先要从 0 到 1,才能更好的进步,毕竟千里之行,始于足下嘛,最后大家如果在使用中遇到什么问题或者有什么疑问,欢迎留言和私信我哦。