java端口很多,每台机器上端口不固定,考虑给机器配置组不同的组挂载模版,相对繁琐。直接使用同一个脚本自动获取机器上java相关的端口,推送到zabbix-server。有服务端口挂了自动推送告警
一、zabbix-agent配置过程
1、用户自定义参
[root@nexus zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.d/userparameter_checkport.conf # 添加以下内容到配置文件中 UserParameter=tcpport.listen[*], bash /etc/zabbix/zabbix_agentd.d/externalscripts/check_port.sh $1
[root@nexus zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.d/externalscripts/port_discovery.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp | egrep -i "$1" | awk {'print $4'} | awk -F':' '{if ($NF~/^[0-9]*$/ && $NF != 22 && $NF != 80 && $NF != 10050 && $NF != 3306 ) 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、zabbix_agent修改参数
1、调大延迟
Timeout=30
2、开启远程命令执
UnsafeUserParameters=1
3、给zabbix用户添加sudo权限
使用ansible批量授权zabbix用户执行netstat
3、zabbix-server测试
[root@ops-public ~]# zabbix_get -s 192.168.12.234 -k "tcpportlisten"

5、优化记录

解决方法
chmod u+s /usr/bin/netstat

二、zabbix web配置自动发现模版
1、创建模版

2、配置模版组

3、创建自动发现


4、填写自动发现规则
填写自动发现名称,键值填写与zabbix-agent端配置文件userparameter_checkport.conf 中的tcpportlisten保持一致



5、创建Item prototypes(创建监控项原型)


监控项原型名称:Port:{#TCP_PORT}
键值:net.tcp.listen[{#TCP_PORT}] TCP_PORT与脚本中port_discovery.sh 中的保持一致,键值选择net.tcp.listen[port],把port改成{#TCP_PORT}


6、创建触发器

触发器名称:Port:


默认正常值是1,不等于1时发送告警通知

恢复表达式

7、agent挂载模版查看最新数据


三、优化
计划自动发现端口并匹配到服务名称




















