使用zabbix自动发现功能实现服务端口自动发现及监控
环境:
系统: CentOS 7.6
zabbix server version: 4.0.10
1. 在/etc/zabbix/zabbix_agent.d/下创建userparameter_tcp_port.conf内容如下
UserParameter=port.alert,/etc/zabbix/alertscripts/lld_port.py
2. 在/etc/zabbix/alertscripts下创建lld_port.py端口发现脚本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import json
import socket
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('114.114.114.114', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
ip = get_host_ip()
os.environ['ip'] = str(ip)
cmd1 = os.popen("""netstat -nlpt | grep -v -w - | grep -v rpc | awk -F "[ :]+" '{if($4 ~ /0.0.0.0/ || $4 ~ /127.0.0.1/ || $4 ~ /'$ip'/) print $5}'""")
cmd2 = os.popen("""netstat -nlpt | grep -Po ':::\K\d+'""")
ports = []
tmp_ports = []
new_ports = []
for cmd in cmd1,cmd2:
for port in cmd.readlines():
tmp_ports.append(port.strip())
for port in tmp_ports:
if port not in new_ports:
new_ports.append(port)
for i in new_ports:
ports += [{'{#PORT}':i}]
print json.dumps({'data': ports}, sort_keys=True, indent=4, separators=(',', ':'))
3. 在zabbix管理页面导入自动发现模板(此模板为主动监控模板)
https://github.com/charnet1019/zabbix/blob/master/port/zbx_active_mode_templates_tcp_port.xml
4. 重启zabbix agent。
5. 主机关联监控模板。