zabbix从库若是复制有问题,在主库机器有问题的时候,切为主就会致使数据的丢失。或者主从分离的时候,若是从库出现延时状态的话,会致使前端页面展现的数据不是为最新的数据。所以,监控mysql从库的状态是必要的。前端
mysql从库的状态主要监控的值有三个,分别为Slave SQL Running,Slave IO Running和Seconds Behind Master。只有当Slave SQL Running,Slave IO Running为yes,而后Seconds Behind Master为0的时候,从库才有可能运行在正常的状态下(有时候这三个值都符合要求,从库数据也会有问题)。先看下监控的效果:python
因为是自动发现监控的mysql从库状态,所以,先贴下自动发现规则的配置,使用mysql.slave.discover去获取mysql从库的端口,在从库安装zabbix agentd,并添加配置(UserParameter=mysql.slave.discover,python /usr/local/zabbix/discover_mysql_slave.py):mysql
其中,自动发现mysql端口的python脚本见:https://my.oschina.net/zhuangweihong/blog/785919 此文章有相似的脚本。自动发现完mysql的端口后,使用的探测项目原型以下,使用三个原型去获取mysql从库的三个须要监控的值:sql
其中获取的键值须要在从库agent中添加配置,而后重启agentd:bash
UserParameter=mysql.slave.status[*],sh /usr/local/zabbix/check_mysql_slave.sh -u xxx-p xxx -P $1 -k $2 2>/dev/null.net
最后就看下/usr/local/zabbix/check_mysql_slave.sh脚本,以下:code
#!/bin/sh while getopts "u:p:P:k:" opt do case $opt in u ) user=$OPTARG;; p ) password=$OPTARG;; P ) port=$OPTARG;; k ) key=$OPTARG;; ? ) echo 'parameter is wrong!' exit 1;; esac done if [ ! "${user}" ] || [ ! "${password}" ] || [ ! "${port}" ] || [ ! "${key}" ];then echo "parameter is null" exit 1 fi mysql -u ${user} -p${password} -h 127.0.0.1 -P${port} -e "show slave status\G"|grep "${key}\:"|awk '{print $2}'
脚本使用-u传入用户名,-p传入密码,-P传入端口号,-k传入须要获取show slave status\G的某个值。blog
Zabbix实战教程:https://edu.51cto.com/sd/36433教程