vim  /apps/zabbix/sh/check_port.py
#!/usr/bin/env python
#coding:utf-8
import os, json
port_list=[]
port_dict={"data":None}
cmd='''ss -tnlp|grep java|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|egrep '^8|^9'|sort |uniq 2>/dev/null'''
local_ports=os.popen(cmd).readlines()
for port in local_ports:
pdict={}
pdict["{#TCP_PORT}"]=port.replace("\n", "")
port_list.append(pdict)
port_dict["data"]=port_list
jsonStr = json.dumps(port_dict, sort_keys=True, indent=4)
print jsonStr

2、被监控主机上修改zabbix agent的配置文件,增加最后的两条配置项,并且重启
# cat zabbix_agentd.conf
Server=$serverIP
ServerActive=$serverIP
Hostname=$hostname
AllowRoot=1
Include=/apps/zabbix/etc/zabbix_agent.d/*.conf
UnsafeUserParameters=1
UserParameter=tcpPortListen,/apps/zabbix/sh/check_port.py

3、zabbix系统上新建模板
a、新建模板‘Template Ports Discovery For JAVA app’;
b、在自动发现规则中创建发现规则,名称为‘Template JAVA Ports Discovery’,类型为‘zabbix客户端’,键值为‘tcpPortListen’;
c、在自动发现清单中创建监控项原型,名称‘tcp port $1 for JAVA’,类型为‘zabbix客户端’,键值为net.tcp.listen[{#TCP_PORT}];
d、继续创建触发器类型,名称为‘JAVA APP tcp port {#TCP_PORT} down’,表达式‘{Template Ports Discovery For JAVA app:net.tcp.listen[{#TCP_PORT}].last()}<>1’,严重性选择‘严重’。

4、将模板应用于被监控主机,并且清理其他的重复的端口监控,完成。