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中的含义,就必须要多加一个$$符号才行