1、新建客戶端需要的腳本
# vim discovertcpport.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
2、客戶端增加discovery的key
UserParameter=tcpportlisten,/usr/local/zabbix_agent/sbin/discovertcpport.sh "$1"
3、重啟zabbix_agentd服務
# /etc/init.d/zabbix_agentd restart
4 、服務端測試
# /usr/local/zabbix/bin/zabbix_get -s 192.168.0.111 -k tcpportlisten { "data":[ {"{#TCP_PORT}":"10050"}, {"{#TCP_PORT}":"22"}, {"{#TCP_PORT}":"80"} ] }
返回類似以上內容即為正常
5、在Linux模板中創建端口自動發現規則
然后創建項目原型
此處要確實注意端口變量{#TCP_PORT}名稱要與上面腳本中的保持一致。
再創建觸發器原型
到此,監控端口已經完成。
-------------------------------------------------------
可能遇到的問題:
1 、 執行腳本的時候發現提示 Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) 應該是沒權限的意思,
2 、添加完自動發現規則之后,提示 Value should be a JSON object 這個錯誤
解決辦法是 vim /etc/sudoers
#Defaults requiretty 注釋掉這個
然后在上面的腳本里面加上sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq
--------------------------------------------
附:tomcat端口監控腳本
#!/bin/bash sudo netstat -tnlp|grep "java"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq >/tmp/tomcat portarray=(`sudo grep "^$1$" /tmp/tomcat`) length=${#portarray[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length;i++)) do printf '\n\t\t{' printf "\"{#TOMCAT_PORT80}\":\"${portarray[$i]}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n"
UserParameter=tomcat_port8080[*],/etc/zabbix/monitor_scripts/discover_tomcat8080.sh $1
# zabbix_get -s 172.17.213.62 -k tomcat_port8080[8080]
{
"data":[
{"{#TOMCAT_PORT8081}":"8081"}
]
}