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++))doprintf '\n\t\t{'printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"if [ $i -lt $[$length-1] ];thenprintf ','fidone 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挂载模版查看最新数据
三、优化
计划自动发现端口并匹配到服务名称