zabbix3.0.2 监控mysql服务down的时候不触发报警的问题修复
1,mysql down了,zabbix没有报警去查看后台MySQL进程,确实没有mysql进程在运行着:# ps -eaf|grep mysqlroot 62585 62087 0 19:48 pts/1 00:00:00 grep mysql#那么,mysql 关机了,但是zabbix,没有报警出来,原因在哪里?
2,找到zabbix-agent分析查看agent启动的配置文件路径:# ps -eaf|grepzabbixroot 3113 43637 0 20:28 pts/0 00:00:00 grep zabbixzabbix 52503 1 0 May17 ? 00:00:00 /usr/sbin/zabbix_agentd -c/etc/zabbix/zabbix_agentd.confzabbix 52504 52503 0 May17 ? 00:03:10 /usr/sbin/zabbix_agentd:collector zabbix 52505 52503 0 May17 ? 00:03:31 /usr/sbin/zabbix_agentd:listener #1 zabbix 52506 52503 0 May17 ? 00:03:29 /usr/sbin/zabbix_agentd:listener #2 zabbix 52507 52503 0 May17 ? 00:03:28 /usr/sbin/zabbix_agentd:listener #3 zabbix 52508 52503 0 May17 ? 00:00:16 /usr/sbin/zabbix_agentd: activechecks #1 #
查看zabbix-agent启动方式,知道/etc/zabbix/zabbix_agentd.conf是配置文件,去查看里面的mysql.ping的参数设置:# vim /etc/zabbix/zabbix_agentd.confUserParameter=mysql.ping,mysqladmin -P3317 -h127.0.0.1 ping | grep -c alive
使用mysqladmin组件的一连串命令并且检索alive来获取结果集的,获取到就返回1表示mysql服务是开启的获取不到就返回0表示mysql服务关闭了,但是实际上呢?能返回1但是返回不了0,因为mysqladmin命令会先报错信息出来,这样zabbix-server调用的时候返回的不是纯粹数字,而是字符串+熟悉,zabbix-server的触发器里面识别不了,mysqladmin命令信息如下:# mysqladmin -P3317 -h127.0.0.1 ping | grep -c alivemysqladmin: connect to server at'127.0.0.1' failederror: 'Can't connect to MySQL server on'127.0.0.1' (111)'Check that mysqld is running on 127.0.0.1and that the port is 3317.You can check this by doing 'telnet127.0.0.1 3317'0#
再看zabbix自带的mysql模版的mysql is down的触发条件是:{db_m2_slave2:mysql.ping.last(0)}=0,当调用mysql.ping的最后一个值是0的时候,触发报警,如下图031.png所示:
因此可以知道mysqladmin在mysql服务down的时候,返回的字符串报警+数字0,完全触发不了zabbix的报警条件了,是需要考虑其它的方式来判断了。
3,telnet监听mysql端口3317Mysqladmin的组件直接访问mysql服务行不通,因为mysql服务已经down了,那么可以采用监听mysql服务启动的端口来试试看,监听mysql的端口3317,# telnet127.0.0.1 3317Trying 127.0.0.1...telnet: connect to address 127.0.0.1:Connection refused#
PHP-5.6.20]#/usr/local/zabbix/bin/zabbix_get -s 192.168.3.73 -p10050 -k mysql.ping(Not all processes could be identified,non-owned process info willnot be shown, you would have to be root to see it all.)0#
看到telnet这个也不行,因为返回中有报警提示信息字符串而不是纯粹的数字0。4,netstat监听mysql端口3317考虑下准备用netstat,先试下命令行:# netstat -ntpl|grep 3317 |grep mysql |wc |awk '{print $1}'0#Ok,没有告警信息存在,可以使用这个命令
之后修改agent的配置文件vim /etc/zabbix/zabbix_agentd.conf:UserParameter=mysql.ping,netstat -ntpl|grep 3317 |grep mysql |wc |awk '{print $1}'修改完,重启agentd服务
PS:执行chmod +s/bin/netstat防止zabbix-server远程调用失效。
去zabbix-server端check,能获取纯粹的数字0,证明此方法OK有效。#/usr/local/zabbix/bin/zabbix_get -s 192.168.3.73 -p10050 -k mysql.ping0#
之后就收到了zabbix的报警邮件和短信了。
页:
[1]