[zabbix] zabbix检测mysql主从状态
环境说明:
zabbix-proxy 172.16.2.95(zabbix-server同理) zabbix-agent111 172.16.2.111 mysql从机
1.mysql从机添加用户权限,避开root权限
mysql> grant replication client on *.* to 'zabbix'@'localhost' identified by 'password';
2.将用户名密码写入/var/lib/zabbix/.my.cnf,不建议写在/etc/my.cnf,各系统用户都可直接调用该配置文件。至于为何是在/var/lib/zabbix底下,因为zabbix-agent配置文件/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf中定义了zabbix的HOME路径在该目录HOME=/var/lib/zabbix。
[root@zabbix-agent111 ~]# cat /var/lib/zabbix/.my.cnf [client] default-character-set = utf8 user=zabbix password=password [mysqladmin] user=zabbix password=password
3.往zabbix-agent机器上添加UserParameter(版本:zabbix-agent-3.4.10-1.el7.x86_64)
[root@zabbix-agent111 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf ...省略 UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive UserParameter=mysql.version,mysql -V UserParameter=mysql.slave.status1,echo "show slave status\G" | HOME=/var/lib/zabbix mysql | grep Running | grep -c Yes UserParameter=mysql.slave.status2,echo "show slave status\G" | HOME=/var/lib/zabbix mysql | awk '/Seconds_Behind_Master/{print $2}' 重启zabbix-agent [root@zabbix-agent111 ~]# systemctl restart zabbix-agent
4.确认zabbix-agent机器上zabbix用户可以直接执行mysql命令,如果该机器上的mysql安装在/usr/local/mysql,要么在UserParameter指定mysql完整路径,要么在机器给mysql软链接到/usr/local/bin等PATH环境变量中
[root@zabbix-agent111 ~]# which mysql /usr/local/bin/mysql [root@zabbix-agent111 ~]# ll /usr/local/bin/mysql lrwxrwxrwx 1 root root 26 Sep 6 14:04 /usr/local/bin/mysql -> /usr/local/mysql/bin/mysql
5.zabbix-proxy机器上确认可以获取两个新值
[root@zabbix-proxy ~]# zabbix_get -s 172.16.2.111 -k 'mysql.slave.status1' 2 [root@zabbix-proxy ~]# zabbix_get -s 172.16.2.111 -k 'mysql.slave.status2' 0
6.登录zabbix web控制台添加监控项、触发器,这里我选择将监控项和触发器添加到默认的模板“Template DB MySQL”
添加一个监控项,未尾不启用是出于模板“Template DB MySQL”在我环境中会应用到多台mysql服务器,如mysql主、无主从的mysql等;它们不需要获取主从状态,默认不启用,待模板链接到主机后,有需要检测主从状态的主机再单独点击启用。
未尾不启用,理由同上
添加触发器,show slave status\G的结果中Running的Yes数量不等于2个或者mysql.slave.status2最后两次结果最小的值大于60,就认为主从状态异常。
未尾同样不启用,理由同上
{mysql.slave.status1.last(0)}<>2 最后一次“Yes的数量”不等于2,触发 or {mysql.slave.status2.min(#2)}>60 或者最后两次“Seconds_Behind_Master”中的最小值大于60,触发