第一部分:服务器上的操作(脚本&配置)
创建脚本文件
在客户端新建discovertcpport.bat文件,放在C:\Program Files\Zabbix Agent目录中,内容如下:
@echo off
echo {
echo "data":[
for /F "tokens=2 delims= " %%i IN ('netstat -anp tcp^|find /i "LISTENING"') DO for /F "tokens=2 delims=:" %%j IN ("%%i") DO echo {"{#TCP_PORT}":"%%j"},
echo {"{#TCP_PORT}":"10050"}
echo ]
echo }
脚本说明:
命令netstat -anp tcp ^|find /i "LISTENING" 用来查看监听状态的TCP端口;
for /F "tokens=2 delims= "表示循环输出的截取值,即每行以空格(delims= )分隔的第2段(token=2)值,以变量%%i输出;之后以同样的循环截取出端口号并格式化输出结果;
这里的输出格式必须按JSON对象格式输出,否则报错“Value should be a JSON object”;
特别要注意最后一行没有逗号,因此单独添加一行echo {"{#TCP_PORT}":"10050"}来结束,以满足JSON对象格式。
修改客户端配置
在客户端的zabbix_agentd.conf中添加以下内容:
UnsafeUserParameters=1
UserParameter=tcpportlisten,C:\Program Files\Zabbix Agent\discovertcpport.bat
说明:
第一条表示允许使用用户自定义参数,
第二条设置用户参数,名称tcpportlisten是自定义的KEY名,后接KEY要执行的命令或脚本文件。
第三:重新启动zabbix agentd服务
第二部分:zabbix页面控制台的操作(其实就是创建配置Discovery )
1、这里我配置在了(Template OS Windows by Zabbix agent active)这里
Name:tcpportlisten
Type:Zabbix agent(active)
Key:tcpportlisten (这个需要和zabbix_agend.conf里配置的一致)
Keep lost resources period:按需设置我这里设置30d
2、配置 Item prototypes
Name:Windows Tcp Port $1
Type: Zabbix agent(active)(主动方式,可以根据实际情况调整)
Key:net.tcp.listen[{#TCP_PORT}]
Update interval:
3、配置: Trigger prototypes
Name:Windows Server Tcp Port $1 Status
Expression:{Template OS Windows by Zabbix agent active:net.tcp.listen[{#TCP_PORT}].count(10m,0,eq)}>=6
4、配置:Graph prototypes
Name:Windows Tcp Port {#TCP_PORT} (其他项目按需配置即可)
效果图如下