这里介绍两种方式监听端口
1、第一种方式是通过脚本实现
2、第二种方式通过zabbix自带键值实现
两个脚本,port_alert.sh为端口自发现脚本,port.conf为指定的监控端口号
# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/port_alert.sh
#/bin/bash
CONFIG_FILE=/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/port.conf
Check(){
grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -vE '^ *[0-9]+' &> /dev/null
if [ $? -eq 0 ]
then
echo Error: ${CONFIG_FILE} Contains Invalid Port.
exit 1
else
portarray=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[0-9]+'))
fi
}
PortDiscovery(){
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"
}
port(){
Check
PortDiscovery
}
port
创建port.conf,写入要监控的端口号
# more port.conf
22
10050
配置文件port.conf每个端口号一行,每行的被监控端口可以有空格,空行和注释行#会被过滤。
zabbix_agent.conf配置文件,新增KEY值port.alert# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_port_alert.conf
UserParameter=port.alert,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/port_alert.sh
/etc/init.d/zabbix_agentd restart
# zabbix_get -s 192.168.2.39 -k 'port.alert'
{
"data":[
{"{#TCP_PORT}":"22"},
{"{#TCP_PORT}":"10050"}
]
}
测试成功,返回json格式的合法端口号
新建模板:名称Linux Template Port Alert
新建自动发现规则:

自动发现清单中新建监控项原型:

具体配置如下:
名称:{#TCP_PORT} 端口
键值:net.tcp.listen[{#TCP_PORT}]

自动发现清单中新建触发器:

具体配置如下

表达式配置
名称:port:{#TCP_PORT} is down,please check
问题表现形式:{Linux Template Port Alert:net.tcp.listen[{#TCP_PORT}].last()}<>1
恢复表达式:{Linux Template Port Alert:net.tcp.listen[{#TCP_PORT}].last()}=1
问题表现形式:

恢复表达式

模板关联主机:

到此,监测中、最新数据、仪表板可以看到最新数据与报警信息
配置-主机-监控项-创建监控项

名称自定义,键值选择:net.tcp.service[service,

创建新的触发器
与第一种方式创建一样,这里省略