黑帽联盟

 找回密码
 会员注册
查看: 1354|回复: 0
打印 上一主题 下一主题

[运维监控] zabbix3.0.2 监控mysql服务down的时候不触发报警的问题修复

[复制链接]

895

主题

38

听众

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    前天 13:01
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    1mysql down了,zabbix没有报警
    去查看后台MySQL进程,确实没有mysql进程在运行着:
    [root@db_m2_slave2 ~]# ps -eaf|grep mysql
    root    62585 62087  0 19:48 pts/1    00:00:00 grep mysql
    [root@db_m2_slave2 ~]#

    那么,mysql 关机了,但是zabbix,没有报警出来,原因在哪里?

    2,找到zabbix-agent分析
    查看agent启动的配置文件路径:
    [root@db_m2_slave2 zabbix]# ps -eaf|grepzabbix
    root     3113 43637  0 20:28 pts/0    00:00:00 grep zabbix
    zabbix  52503     1  0 May17 ?        00:00:00 /usr/sbin/zabbix_agentd -c/etc/zabbix/zabbix_agentd.conf
    zabbix  52504 52503  0 May17 ?        00:03:10 /usr/sbin/zabbix_agentd:collector [idle 1 sec]         
    zabbix  52505 52503  0 May17 ?        00:03:31 /usr/sbin/zabbix_agentd:listener #1 [waiting for connection]
    zabbix  52506 52503  0 May17 ?        00:03:29 /usr/sbin/zabbix_agentd:listener #2 [waiting for connection]
    zabbix  52507 52503  0 May17 ?        00:03:28 /usr/sbin/zabbix_agentd:listener #3 [waiting for connection]
    zabbix  52508 52503  0 May17 ?        00:00:16 /usr/sbin/zabbix_agentd: activechecks #1 [idle 1 sec]  
    [root@db_m2_slave2 zabbix]#

    查看zabbix-agent启动方式,知道/etc/zabbix/zabbix_agentd.conf是配置文件,去查看里面的mysql.ping的参数设置:
    # vim /etc/zabbix/zabbix_agentd.conf
    UserParameter=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命令信息如下:
    [root@db_m2_slave2 zabbix]# mysqladmin  -P3317 -h127.0.0.1  ping | grep -c alive
    mysqladmin: connect to server at'127.0.0.1' failed
    error: '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
    [root@db_m2_slave2 zabbix]#

    再看zabbix自带的mysql模版的mysql is down的触发条件是:{db_m2_slave2:mysql.ping.last(0)}=0,当调用mysql.ping的最后一个值是0的时候,触发报警,如下图031.png所示:
    5.png

    因此可以知道mysqladmin在mysql服务down的时候,返回的字符串报警+数字0,完全触发不了zabbix的报警条件了,是需要考虑其它的方式来判断了。

    3telnet监听mysql端口3317
    Mysqladmin的组件直接访问mysql服务行不通,因为mysql服务已经down了,那么可以采用监听mysql服务启动的端口来试试看,监听mysql的端口3317,
    [root@db_m2_slave2 zabbix]# telnet127.0.0.1 3317
    Trying 127.0.0.1...
    telnet: connect to address 127.0.0.1:Connection refused
    [root@db_m2_slave2 zabbix]#

    [root@hch_test_121_12 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
    [root@hch_test_121_12 php-5.6.20]#

    看到telnet这个也不行,因为返回中有报警提示信息字符串而不是纯粹的数字0。
    4netstat监听mysql端口3317
    考虑下准备用netstat,先试下命令行:
    [root@db_m2_slave2 zabbix]# netstat -ntpl|grep 3317 |grep mysql |wc |awk '{print $1}'
    0
    [root@db_m2_slave2 zabbix]#
    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有效。
    [root@hch_test_121_12 php-5.6.20]#/usr/local/zabbix/bin/zabbix_get -s 192.168.3.73 -p10050 -k mysql.ping
    0
    [root@hch_test_121_12 php-5.6.20]#

    之后就收到了zabbix的报警邮件和短信了。

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部