今天有一个朋友问到我一个关于zabbix监控tcp端口的问题,明明端口在监听,可是经过net.tcp,listen取值取到的倒是0。
通过简单的goole发现这已是一个历史悠久的问题:
问题的根本缘由是zabbix的这个key(net.tcp,listen)是经过读取 /proc/net/tcp这个文件来进行数据采集的,而/proc/下的文件并非线程安全的,所以会出现取值不许确的问题。
另外这种机制还存在另一个隐患:当/proc/net/tcp文件的条目很是多的话,就会形成取值慢的状况,所以就有可能形成取值失败的问题。安全
那咱们该若是解决这个问题呢,网上也找到了解决办法,我在这里当一次大天然的搬运工~哈哈
解决方法就是新添加一个用户自定义key来代替zabbix本身提供的监控方式,具体操做步骤以下:tcp
#1,添加自定义key --> net.tcp.listen.grep[]
添加方式,在zabbix客户端的agentd的配置文件中,或者在zabbix agentd所声明的Include配置文件目录下添加以下配置:
1
UserParameter=net.tcp.listen.grep[],grep -q $$(printf '%04X.00000000:0000.0A' $1) /proc/net/tcp && echo 1 || echo 0
例如个人选在就是在/etc/zabbix/zabbix-agentd.conf.d目录下,建立了一个文件net_tcp_listen.conf,将上述key的声明写到文件里,由于个人zabbix_agentd.conf中已经作了配置文件目录包含的声明:ide
thatsit:~ # grep ^Include /etc/zabbix/zabbix-agentd.conf
Include=/etc/zabbix/zabbix-agentd.conf.d/
thatsit:~ #
thatsit:~ # cat /etc/zabbix/zabbix-agentd.conf.d/net_tcp_listen.conf
UserParameter=net.tcp.listen.grep[*],grep -q $$(printf '%04X.00000000:0000.0A' $1) /proc/net/tcp && echo 1 || echo 0
thatsit:~ #
#2,重启zabbix-agentd,使配置生效 线程
shipeng:~ # /etc/init.d/zabbix-agentd restart
Shutting down zabbix agentd done
Starting zabbix agentd done
shipeng:~ #rest