在客户端新建discovertcpport.bat文件,放在c:\zabbix\目录中,内容如下:
@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:\zabbix\discovertcpport.bat
重新启动zabbix agentd服务
cd到c:\zabbix目录,输入脚本文件名,回车:
服务器测试
/usr/local/zabbix/bin/zabbix_get -s 10.188.1.44 -k tcpportlisten
可以单独创建一个模板,也可以直接在windows模板中创建:
设置端口自动发现规则
使用的KEY就是在客户端配置文件中自定义的tcpportlisten
item name : tcpportlisten
key: tcpportlisten
给自动发现模块创建item原型
name tcp port $1
net.tcp.listen[{#tcp_port}]
data type boolean
给自动发现模块创建触发器
tcp port $1 status
{Template Os Windows:net.tcp.listen[{#tcp_port}].last()}#1
触发器内容
item : template os windows: tcp port{#tcp_port}
last is not n
n: 1