zabbix3.x监控mysql服务down不报警_不通过修改mysql.ping为telnet解决

说明:
在工作中碰到mysql服务down掉后,zabbix不报警。在zabbix看mysql的item都不兼容,后面有!,提示cannot convert from string to numberics还是什么的。
这mysql监控模版在zabbix 2.x倒是能正常使用,放在3.x就没有正常报警。

分析:

zabbix通过{Template App MySQL:mysql.ping.last(0)}=0这个trigger来判断mysql是否存活。
而trigger则是通过mysql.ping这个自定义key,具体mysql命令mysqladmin ping | grep -c alive来判断。可以通过查看cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/mysql_status.conf查看
UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc /usr/bin/mysqladmin ping | grep -c alive

 
mysql正常情况下,输入密码后就直接输出1

# /usr/bin/mysqladmin ping -uroot -p |grep -c alive
Enter password: 
1

 
mysql down情况下,可以看到除了输出0外,还输出/usr/bin/mysqladmin: connect to server at ‘localhost’ failed等这些报错信息

# /usr/bin/mysqladmin ping -uroot -p |grep -c alive
Enter password: 
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!
0

 
结果:
这就导致mysql down时,zabbix通过mysqladmin ping来获取mysql,mysql把一些报错信息也发回给zabbix,导致zabbixs接收到的并不是纯数字,而是报错的字符串+0,导致zabbix trigger无法识别。

解决:
解决思路就是把mysql的错误日志重定向下

# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/mysql_status.conf
将
UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc /usr/bin/mysqladmin ping | grep -c alive
修改为如下,将错误输入重定向到 2>/dev/null
UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc /usr/bin/mysqladmin ping 2>/dev/null | grep -c alive

 
附录:
看网上有很多通过将myql.ping改成telnet,这种其实不太好,有可能会碰到telnet没有安装的情况。正常监控某项服务就尽量只使用那服务自带的命令,这样通用性是最好的。