目的:监控游戏项目中的重要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=$'
'
socket_discovery () {
SOCKET_SITE=($(cat $UrlFile|grep -v "^#"))
printf '{
'
printf ' "data":[
'
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 " {"{#SOCKETGAME}":"${game}","{#SOCKETIP}":"${ip}","{#SOCKETPORT}":""${port}""},
"
else
printf " {"{#SOCKETGAME}":"${game}","{#SOCKETIP}":"${ip}","{#SOCKETPORT}":""${port}""}
"
printf ' ]
'
printf '}
'
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