自定義key解決zabbix端口監聽取值不準確的問題

今天有一個朋友問到我一個關於zabbix監控tcp端口的問題,明明端口在監聽,但是通過net.tcp,listen取值取到的卻是0。
  經過簡單的goole發現這已經是一個歷史悠久的問題:
  問題的根本原因是zabbix的這個key(net.tcp,listen)是通過讀取 /proc/net/tcp這個文件來進行數據採集的,而/proc/下的文件並不是線程安全的,因此會出現取值不準確的問題。
另外這種機制還存在另外一個隱患:當/proc/net/tcp文件的條目非常多的話,就會造成取值慢的情況,因此就有可能造成取值失敗的問題。

 那我們該如果解決這個問題呢,網上也找到了解決辦法,我在這裏當一次大自然的搬運工~哈哈

解決方法就是新添加一個用戶自定義key來代替zabbix自己提供的監控方式,具體操作步驟如下:

#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中已經做了配置文件目錄包含的聲明:

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:~ #

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章