zabbix监控误报的问题

1、zabbix监控误报的问题

最近发现zabbix监控一些端口比较多的服务器的时候,会产生误报情况,就是端口明明是正常的,却报警说端口挂了,然后很快恢复;另一个监控软件nagios却没有报警,查了几天,也没得到很好的解决办法,初步怀疑是不是队列问题,后来网上查到一个解决办法,在agentd.conf中添加一条自定义的项,取代现有的默认项。

UserParameter=net.tcp.listen.grep[*],grep -q $$(printf '%04X.00000000:0000.0A' $1) /proc/net/tcp && echo 1 || echo 0


补充:我在配置过程中忽略了两个问题,导致自定义的键值可能没有生效!

第一:如果你的UserParameter 包含\ ' ” ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @这些字符,则需要开启下面这个参数

修改/etc/zabbix/zabbix_agentd.conf

UnsafeUserParameters=1

关于key 的名称定义注意事项

1、所有的数字;

2、所有的小写字母;

3、所有大写字母;

4、下划线;

5、破折号;

6、点.


第二:既然新定义了key,就得用net.tcp.listen.grep[*]取代旧的net.tcp.listen[*]

所以你还得在web界面修改项目的键值为net.tcp.listen.grep[端口]

这个经过验证后,发现效果很明显,从多台机器一晚上几十封误报,到一晚上特定两个端口几封误报!


另一方案,哥这次尝试用触发器表达式,某一分钟或者两分钟之内,出现两次误报才报警!

{postfix:net.tcp.listen[25].count(2m,0)}>1

这个只能是第一种方案的补充,改过后,那几个特定端口,在周五和双休日的三天里,只误报过两封!至于为何不能彻底杜绝,我也很无语了!


2、关于键值中$和$$用法的问题

在使用自定义键值中,发现一个问题,那就是后面的命令项中,明明在shell中可用的$,换到agentd中,会get不到值,后来问了一些朋友,才恍然大悟,因为例如awk '{print $1}',这里的$1本来在awk中是取第一列,但是这里却还有个问题,$1也同时是参数替代,这样就变得混乱了;如果想继续使用shell中的含义,就必须要多加一个$$符号才行


本文转自 蔡小赵 51CTO博客,原文链接:http://blog.51cto.com/zhaopeiyan/1754873

上一篇:远程终端服务的简单实现


下一篇:解决zabbix中文乱码问题