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

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

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

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

1
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代码很赞。

----------------本文结束 感谢阅读----------------