zabbix键值net.tcp.listen取值紊乱

最近zabbix的几个监控端口时不时的触发报警,后来网上查找了下,发现了这篇文章https://support.zabbix.com/browse/ZBX-6790。zabbix读取/proc/net/tcp文件,从中获取监听的端口的信息。由于内核频繁读取这个文件,导致有时取值不正常,解决方法是自定义键值,该文章也给出来了。

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

在centos上测试发现这段shell有点不兼容报错,做了适当的修改,变成这样

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

他的这个键值写的很干净利落,大赞!我试着解释下这个键值:
net.tcp.listen.grep[*]:自定义键值net.tcp.listen.grep,[*]表示可以有很多参数,用变量表示分别是$1,$2,$3… …,比如监控80端口时,item中的键值这样写net.tcp.listen.grep[80];
printf ‘%04X.00000000:0000.0A’ $1:将$1变量格式化为4字符的16进制并指定匹配状态(/pro/net/tcp中的0A表示监听状态),其中的点号(.)是正则表达式的符号,给grep用的;
grep -q: 静默执行;
A && B || C:如果A为真执行B,反之执行C,类似C语言中的条件运算符。其中用到了变量$?,这段shell代码很赞。
文章出处:http://www.xiaomastack.com/2015/07/03/zabbix_net-tcp-listen/

发表评论:

你的电子邮件地址将不会被公开.

÷ 1 = 2