Zabbix 随笔:监控 mysql 数据库(基础篇)

2022-03-04 10:26:51 浏览数 (1)

本文带来带来如何监控 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 下(如果没有就创建),本文演示没有。

代码语言:javascript复制
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 即可

代码语言:javascript复制
[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

效果

通过后台日志可以发现,原来不支持的监控项已经变成支持了,且数据也恢复正常了

日志显示正常日志显示正常
前端 dashboard 显示效果前端 dashboard 显示效果
最新数据最新数据

附录

有部分朋友有可能后端采用的为 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,才能更好的进步,毕竟千里之行,始于足下嘛,最后大家如果在使用中遇到什么问题或者有什么疑问,欢迎留言和私信我哦。

0 人点赞