zabbix监控系列——端口自动发现监控

本文介绍如何使用Zabbix通过自定义脚本自动发现并监控目标主机上的TCP端口,具体步骤包括创建自动发现脚本、定义键值对、页面配置及测试添加httpd服务监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、定义自动发现脚本

二、定义键值对脚本

三、zabbix页面配置

四、测试添加httpd服务


一、定义自动发现脚本

[root@zabbixserver01 libexec]# cat /etc/zabbix/libexec/discovery_tcp_port.sh

#!/bin/bash

#收集数据

port_array=(` netstat -ntpl|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)

#统计数组中的元素数量

length=${#port_array[@]}

#统一数据格式

printf "{\n"

printf  '\t'"\"data\":["

for ((i=0;i<$length;i++))

  do

     printf '\n\t\t{'

     printf "\"{#TCP_PORT}\":\"${port_array[$i]}\"}"

     if [ $i -lt $[$length-1] ];then

                printf ','

     fi

  done

printf  "\n\t]\n"

printf "}\n"

二、定义键值对脚本

[root@zabbixserver01 zabbix]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

UserParameter=disc.tcp.port,/etc/zabbix/libexec/discovery_tcp_port.sh

#给相关文件权限

chmod u+s /bin/netstat

三、zabbix页面配置

 

四、测试添加httpd服务

被监控机器开启httpd后,zabbix页面自动发现80端口并监控。

如有问题请排查netstat权限、自定义文件权限、key键值对是否一致、server和agent服务重启。

 

### Zabbix 实现端口自动发现并配置监控与报警 #### 1. 端口自动发现原理 Zabbix自动发现功能可以通过定义低级发现规则 (Low-Level Discovery, LLD) 来动态检测目标主机上的开放端口。LLD 是一种机制,允许管理员创建可重复使用的模板来扫描特定服务或资源[^2]。 当启用端口自动发现时,Zabbix 使用内置脚本 `net.tcp.discovery` 或自定义脚本来探测指定范围内的 TCP 端口状态。一旦发现新的端口处于打开状态,它会将其注册到 Zabbix 数据库中,并应用预设的监控项和触发器。 #### 2. 配置端口自动发现的具体步骤 以下是基于官方文档的最佳实践指南: ##### 创建低级发现规则 进入 **Configuration → Templates**, 添加一个新的模板或者编辑现有的模板,在 “Discovery rules” 菜单下点击 “Create discovery rule”。 - 名称:输入描述性的名称,例如 `"TCP Port Discovery"`。 - 类型:选择 `Simple check`。 - 键名:设定为标准键值 `{#PORT}` 或者使用默认的 `net.tcp.discovery`。 - 更新间隔:建议设置合理的轮询周期(如每分钟一次),即 `60s`。 - 发现条件:如果仅需查找某些类型的端口,则可以在此处添加过滤表达式;否则留空即可全面扫描所有可能的服务端口。 ##### 定义原型项目 在同一页面下方找到 “Items to create”,这里需要至少包含两个基本元素——一个是用于测试连接可用性的布尔型指标,另一个则是记录响应时间的实际数值测量单位毫秒(ms): - 测试连通性 (`tcp_port_status`): ```bash net.tcp.service.perf[{#SERVICE},<host>] ``` - 响应延迟(`tcp_response_time`) : ```bash net.tcp.ping[<port>,<timeout>] ``` 注意替换 `<host>` 和 `<port>` 参数为你实际的目标地址以及对应的侦测端口号变量 {#PORT}. 对于每一个匹配成功的实例都会依据上述模版生成具体的监测条目。 ##### 设置告警阈值 继续向下滚动至 "Triggers to create", 这里应该建立若干逻辑判断语句用来评估当前状况是否正常: 比如我们可以这样写: ```plaintext {Template App Netstat:net.tcp.listen[{HOSTNAME},{#PORT}].last()}=0 and {Template App Netstat:net.tcp.connect[{HOSTNAME},{#PORT}].avg(5)}>50ms ``` 这条指令的意思就是说只要某个本地监听端口突然关闭而且平均访问耗时超过五十毫秒就发出警告信号. 最后保存更改并将此定制化后的模板关联至待管理节点上完成整个部署流程。 #### 3. 示例代码片段 下面给出一段简单的 Python 脚本作为替代方案之一执行相似的任务操作过程演示效果如下所示: ```python import socket from time import sleep def scan_ports(ip_address,start,end): open_ports = [] for port in range(start,end+1): try: s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) result=s.connect_ex((ip_address,port)) if not result: print(f'Port {port}: Open') open_ports.append(port) else: pass s.close() except Exception as e: continue return open_ports if __name__=='__main__': ip='your_target_ip' start_port=int(input('Enter starting port number:\n')) end_port=int(input('Enter ending port number:\n')) while True: discovered_ports=scan_ports(ip,start_port,end_port) # Send results back to Zabbix server via userparameter or similar method. sleep(60*interval_in_minutes) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

情绪零碎碎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值