zabbix 自动发现端口并添加监控设置

自动发现端口并添加监控设置
UserParameter=net.listen.discovery,sudo /etc/zabbix/scripts/discovery_listport.sh

#!/bin/bash

Check=(`netstat -lntp|awk '/^tcp/{split($4,Port,":");split($7,Name,"[/:]");print Name[2]":"Port[length(Port)]}'|sort -u`)
if [ -z "$Check" ];then
        exit
else
        length=${#Check[@]}
fi

printf "{\n"
printf  "\t\"data\":["
for((i=0;i<$length;i++))
do
        Server=`echo ${Check[$i]}|cut -d: -f1`
        Port=`echo ${Check[$i]}|cut -d: -f2`
        printf "\n\t\t{"
        printf "\n\t\t\t\"{#SERVERNAME}\":\"$Server\","
        printf "\n\t\t\t\"{#PORT}\":\"$Port\"}"
        if [ $i -lt $(($length-1)) ];then
                printf ','
        fi
done
printf  "]}\n"
discovery_listport.sh

主机→自动发现规则→创建发现规则

过滤器可选配置:
先创建正则表达式:管理→一般→(右侧下拉列表)→正则表达式


创建监控项原型

创建触发器原型

自动发现效果图如下:

需要注意:创建监控项原型(键值[]中的数值必须大写,否则会报错如下)
Cannot create item: item with the same key "*********" already exists

转载于:https://www.cnblogs.com/Mrhuangrui/p/7205842.html

### 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值