Zabbix使用手册:创建自动发现规则并监控应用端口

由于应用场景多样化,而zabbix自带的模板并不能满足各种应用的监控需求,本文则是实现自动发现并监控端口方法,其中脚本文件包括python和shell两个版本,建议采用已实现自定义端口范围python版本。

编写自动发现端口的脚本

将脚本保存至zabbix_agent.conf中配置的扩展脚本目录中,并赋予执行权限。

Python版本

#!/usr/bin/python3

import os
import json

data = {}
tcp_list = []
port_list = []
s = ['8080','8180','8280','8380','8480','8580','8680','8780','8880','8980']
ss = []
command = "netstat -tnlp | egrep -i tcp | awk {'print $4'} | awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}' | sort|uniq"
lines = os.popen(command).readlines()
for line in lines:
    port = line.split()
    port_list.append(port[0])
for i in port_list:
    if i in s:
      ss.append(i)
for port in list(set(ss)):
    port_dict = {}
    port_dict['{#TCP_PORT}'] = port
    tcp_list.append(port_dict)

data['data'] = tcp_list
jsonStr = json.dumps(data, sort_keys=True, indent=4)
print (jsonStr)

Shell版本

Shell版本没有限定端口范围,建议在模板中添加“过滤器”规则。

#!/bin/bash

portarray=(`netstat -tnlp | egrep -i "$1" | awk {'print $4'} | awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}' | sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
  printf '\n\t\t{'
  printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
  [ $i -lt $[$length-1] ] && printf ','
done
printf "\n\t]\n"
printf "}\n"

配置zabbix-agent

修改配置/etc/zabbix/zabbix_agentd.conf,并添加相关参数,保存后重启zabbix-agent。

UnsafeUserParameters=1
# Python版本
UserParameter=discover_tcp_port,/opt/zabbix/scripts/discover_tcp_ports.py "$1"
# Shell版本
# UserParameter=discover_tcp_port,/opt/zabbix/scripts/discover_tcp_ports.sh "$1"

测试

在zabbix-proxy或zabbix-server执行如下命令进行测试:

zabbix_get -s 10.10.100.101 -k discover_tcp_port

能获取端口数据则表示脚本执行成功,但提示:

Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.

原因是netstat执行权限的问题,在客户端执行如下命令即可:

chmod +s /bin/netstat

配置zabbix模板

配置自动发现模板的大至过程如下:

  1. 创建zabbix模板
  2. 创建自动发现规则
  3. 创建监控项原形,键值:discover_tcp_port
  4. 创建触发器类型

原创文章禁止转载:技术学堂 » Zabbix使用手册:创建自动发现规则并监控应用端口

精彩评论

3+8=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏