Discovery

本文详细介绍了Zabbix网络发现的功能及其实现原理。通过网络发现,可以自动化地监控网络环境中的设备和服务状态,并据此采取相应的管理措施。

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

1.网络发现

综述
zabbix提供网络发现功能,其高效而灵活。
当你正确的设置了网络发现功能后,你将可以实现以下功能:
  • 加速zabbix的部署
  • 简化管理
  • 适应多变环境,减少管理强度
zabbix网络发现功能基于以下信息:
  • IP地址范围
  • 有效的扩展服务(FTP, SSH, WEB, POP3, IMAP, TCP等)
  • 从zabbix-agent收到的信息(仅在非加密模式下生效)
  • 从客户端发来的snmp消息
Network discovery不提供topo的发现功能。

Network discovery基本上由两部分组成:发现;执行

发现阶段(discovery):
zabbix周期性扫描在network discovery rules里设置的IP地址区间。每条规则(rule)可以设置其扫描的频率。
注意:每条规则总是被单独的被每次discovery过程调用,IP地址范围不会因为多个discovery过程而被分解。
每条规则由一组服务检查(service checks)组成,这些服务检查作用于IP地址范围。
【每个发现-检查(discovery checks)过程与其他发现-检查过程独立,当某一个检查过程没有发现对应服务(或者发现失败“fail”),其他检查进程依然会继续。】
由网络发现(network discovery)模块执行的服务/IP检查生成了发现事件(discovery event)
事件(event) 服务检查结果
Service Discovered 该服务由down状态变为up状态,或首次发现该服务
Service Up 该服务持续处于up状态
Servce Lost 该服务从up状态变为down状态
Service Down 该服务持续处于down状态
Host Discovered 当某主机的所有服务处于down状态之后,至少有一个服务变为up状态
Host Up 当某主机至少有一个服务持续处于up状态
Host Lost 当某主机所有服务变为down状态,且曾经有至少一个服务处于up状态
Host Down 当某主机的所有服务持续处于down状态

执行阶段(action)
发现-事件(discovery events)可以作为相关action的基础依据,例如:
  • 发送通告(Sending notifications)
  • 增加、移除主机(Adding/removing hosts)
  • 向组添加主机(Adding hosts to a group)
  • 从组移除主机(Removing hosts from a group)
  • 将主机链接到模板或从模板取消链接(Linking hosts to/unlinking from a template)
  • 执行远程脚本(Executing remote scripts)
这些执行动作可以根据设备类型、ip、状态、开机/停机时间等进行配置。有关基于网络发现事件的配置细节,见operation说明和conditions说明。

主机建立(Host creation)
Add host操作可以建立一个主机,但当对主机执行以下操作时,就算Add host 操作丢失,也可以建立主机:
  • 使主机enable
  • 使主机disable
  • 向组添加主机
  • 让模板链接到主机
当添加主机时,主机名字来自于zabbix-server或者zabbix-proxy对于DNS的解析(取决于哪个角色进行discovery过程),当zabbix-proxy域名解析失败时,server并不会进行尝试解析。当DNS解析失败时,采用IP地址登记。此外,如果某个host name已经存在,后续的主机将在此名字末尾加“_N”来表示,N≥2。
创建的主机将被添加到Discovery hosts group(此为默认情况。可以在Administration→General→Other中配置)。因为主机必须要属于某个组,如果你想让主机被添加在其他组内,执行Remove from host groups操作(指定“Discovery hosts”),同时执行Add to host groups操作(指定其他的组)。

主机排除(Host removal)
自从zabbix2.4.0以来,当某个发现实体(Discovery entity)不再属于规定的IP地址范围,由网络发现规则创建的主机将会自动被删除。

添加主机时的接口建立(Interface creation when adding hosts)
当主机由网络发现功能添加,其接口建立根据以下规则:
  • 服务被侦测:例如如果SNMP检查执行成功,SNMP接口将被建立。
  • 如果主机响应了zabbix-agent和SNMP的请求,则这两种接口都被建立。
  • 如果唯一标准是zabbix-agent或者SNMP回传报文,则为主机建立的接口为首先找到的那一个,其余IP地址将作为附加接口被建立。
  • 如果主机只响应代理检查(agent check),其只会建立代理接口;但之后如果要开始响应SNMP,此SNMP接口将作为附加接口被建立。
  • 开始有基于唯一性条件“IP发现规则”添加的3台独立的主机,之后因为发现规则的修改使得主机A,B,C具有相同的唯一性条件,B,C将作为“最先创建的主机”A的附加接口而建立。主机B,C将被保留下来,在Monitoring→Discovery下,建立的接口以黑体缩进形式显示在“Discovery device”列表里,“Monitored host”列表只会显示首先添加的主机。被视作附加接口的那些IP地址,不会监测其正常时间和停机时间(Uptime/Downtime)




### 关于Path MTU Discovery (PMTUD) Path MTU Discovery 是一种用于发现网络路径上最大传输单元(Maximum Transmission Unit, MTU)的技术。它通过在网络通信过程中动态检测并调整数据包大小来避免分片,从而提高性能和效率。 在 IP 协议栈中,PMTUD 主要依赖 ICMP (Internet Control Message Protocol)消息来进行操作。当路由器接收到一个超过其链路 MTU 的数据包时,如果该数据包设置了“Don't Fragment”标志位,则会丢弃此数据包并向源主机发送一条 ICMP “Destination Unreachable – Fragmentation Needed and DF Set”的错误消息[^1]。这使得源端能够知道需要减小后续数据包的尺寸以适应中间链路上较小的 MTU 值。 对于具体实现层面: - **缓存机制**:为了减少频繁探测带来的开销,通常会在适当位置维护一张表用来记录不同目标地址对应的已知最小 MTU 值作为 Path MTU 缓存条目。 - **过期处理**:随着时间推移或者网络拓扑变化等原因可能导致原先获取到的信息变得陈旧甚至完全失效;因此还需要设计策略定期清理这些可能已经不再准确的数据项。 以下是简单的 Python 实现片段展示如何模拟基本功能逻辑: ```python import socket def discover_pmtu(target_ip): s = socket.socket(socket.AF_INET, type=socket.SOCK_DGRAM) pmtu = 1500 # Initial guess at path MTU while True: try: packet_size = min(pmtu + 28, 65535) # Add UDP header size data = b'A' * (packet_size - 28) flags = struct.pack('!HH', 0x4000 | ((packet_size >> 8) & 0xFFFF), packet_size & 0xFF) pseudo_header = ip_src_addr + target_ip + '\x17\x00' + chr(len(data)) + '\x00' checksum = calculate_checksum(flags + pseudo_header + data) udp_packet = flags + pseudo_header + data + checksum s.sendto(udp_packet[:packet_size], ('.'.join(map(str,target_ip)), 0)) break except OSError as e: if 'Message too long' in str(e): pmtu -= 10 elif 'Network is unreachable' in str(e): raise Exception("Unable to reach destination.") return pmtu ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值