zabbix批量监控端口

目的:监控游戏项目中的重要tcp端口。
实现:zabbix discovery模块+脚本
思路:要监控的目标端口,统计有100个左右,先将监控目标记录到一个文本文件中,然后通过脚本将这些目标端口转成特定的字典格式,这种格式是zabbix可以识别的一种数据字典格式。

因为监控的目标数量,决定了item 和trigger的数量,如果是手动去操作100个监控目标,在zabbix web 实现,效率很低。

更快、更高效的实现批量端口监控,就要用到discovery模块(细节可以google,本文只讲实现)。

 

重要部分展示:

文本文件格式:

[root@ip-172-30-0-57 script]# head socket.txt
手游英语xxx网关 aa.bb.cc 37100
手游英语xxxCDN源站 aa.bb.cc 80
手游日语xxx登录 aa.bb.com 80
手游日语xxxCDN源站 aa.bb.com 80

 

脚本:

[root@ip-172-30-0-57 script]# cat socket_status.sh
#!/bin/bash
#author:qinliang
#date:3/23/2020

UrlFile="/usr/local/zabbix_proxy/etc/script/socket.txt"
IFS=$'\n'

socket_discovery () {
SOCKET_SITE=($(cat $UrlFile|grep -v "^#"))
printf '{\n'
printf '\t"data":[\n'
num=${#SOCKET_SITE[@]}
for socket in ${SOCKET_SITE[@]}
do
num=$(( $num - 1 ))
game=$(echo $socket|awk '{print $1}')
ip=$(echo $socket|awk '{print $2}')
port=$(echo $socket|awk '{print $3}')
if [ $num -ne 0 ] ; then
printf "\t\t{\"{#SOCKETGAME}\":\"${game}\",\"{#SOCKETIP}\":\"${ip}\",\"{#SOCKETPORT}\":\""${port}"\"},\n"
else
printf "\t\t{\"{#SOCKETGAME}\":\"${game}\",\"{#SOCKETIP}\":\"${ip}\",\"{#SOCKETPORT}\":\""${port}"\"}\n"
printf '\t]\n'
printf '}\n'
fi
done
}

socket_discovery

[root@ip-172-30-0-57 script]#

 

脚本转换后的数据格式:

[root@ip-172-30-0-57 script]# sh socket_status.sh
{
"data":[
{"{#SOCKETGAME}":"手游xxx网关","{#SOCKETIP}":"aa.bb.cc","{#SOCKETPORT}":"37100"},
{"{#SOCKETGAME}":"手游xxxCDN源站","{#SOCKETIP}":"aa.bb.cc","{#SOCKETPORT}":"80"},

 

cat zabbix_agentd.d/socket_discovery.conf
UserParameter=socket.discovery,bash /etc/zabbix/script/socket_status.sh

 

zabbix web discovery模板配置:

 

 

 

 

 

 

报警展示:

 

 

End

 

posted @ 2020-03-27 16:42  qinliang  阅读(719)  评论(0编辑  收藏  举报