1 网络发现

概述

Zabbix 提供自动网络发现功能,既高效又非常灵活。

正确配置网络发现后,您可以:

  • 加快 Zabbix 部署
  • 简化管理
  • 在快速变化的环境中使用 Zabbix,而无需过多管理工作

Zabbix 网络发现基于以下信息:

  • IP 范围
  • 外部服务的可用性(FTP、SSH、WEB、POP3、IMAP、TCP 等)
  • 从 Zabbix agent 接收到的信息(仅支持未加密模式)
  • 从 SNMP agent 接收到的信息

它不提供:

  • 网络拓扑发现

网络发现基本上由两个阶段组成:发现和动作。

发现

Zabbix 会定期扫描 网络发现规则 中定义的 IP 范围。
检查频率可针对每条规则单独配置。

每条规则都定义了一组要对该 IP 范围执行的服务检查。

发现规则由发现管理器处理。
发现管理器会为每条规则创建一个作业,并附带一个任务列表(网络检查)。
网络检查会由可用的发现 worker 并行执行(其数量可在前端中针对每条规则单独配置)。
只有相同 IP 和端口的检查才会按顺序调度,因为某些设备不接受在同一端口上的并行连接。

网络检查队列大小限制为 2000000,或大约 4 GB 内存。
如果队列已满,则会跳过该发现规则,并在日志中输出警告信息。
你可以使用内部监控项 zabbix[discovery_queue] 来监控队列中的发现检查数量。

发现检查与其他检查独立处理。
如果某些检查未发现服务(或失败),其他检查仍会继续处理。

如果在执行过程中更改了发现规则,则当前的发现执行将被中止。

网络发现模块执行的每次服务和主机(IP)检查都会生成一个发现事件。

事件 服务检查结果
Service Discovered 服务在之前为“down”后变为“up”,或首次被发现。
Service Up 服务在之前已经为“up”的情况下仍然为“up”。
Service Lost 服务在之前为“up”后变为“down”。
Service Down 服务在之前已经为“down”的情况下仍然为“down”。
Host Discovered 当某个主机的所有服务都为“down”后,至少有一个服务变为“up”;或者发现了一个属于未注册主机的服务。
Host Up 当至少有一个服务已经为“up”后,某个主机至少有一个服务变为“up”。
Host Lost 当至少有一个服务为“up”后,某个主机的所有服务都变为“down”。
Host Down 某个主机的所有服务在之前已经为“down”的情况下仍然都为“down”。

动作

发现事件可以作为相关动作的基础,例如:

  • 发送通知
  • 添加/移除主机
  • 启用/禁用主机
  • 将主机添加到组
  • 从组中移除主机
  • 为主机添加标签
  • 从主机移除标签
  • 将模板链接到主机/从主机取消链接模板
  • 执行远程脚本

这些动作可以根据设备类型、IP、状态、在线/离线时间等进行配置。 有关基于网络发现事件配置动作的完整详情,请参阅动作的操作条件页面。

由于网络发现动作是基于事件的,因此当发现的主机在线和离线时都会触发。 强烈建议添加动作条件 Discovery status: up,以避免在 Service Lost/Service Down 事件发生时触发诸如 Add host 之类的动作。 否则,如果发现的主机被手动移除,它仍然会生成 Service Lost/Service Down 事件,并会在下一次发现周期中被重新创建。

如果任何可链接的模板具有与主机上或其他可链接模板上已存在的唯一实体(例如监控项键)相同的唯一实体(例如监控项键),则将模板链接到已发现的主机时会整体失败。

主机创建

如果选择了 Add host 操作,则会添加一个主机。 即使缺少 Add host 操作,只要选择了会对主机执行操作的操作,也会添加一个主机。 此类操作包括:

  • enable host
  • disable host
  • add host to a host group
  • link template to a host

创建的主机会被添加到 Discovered hosts 组中(默认情况下,可在 Administration > General > Other 中进行配置)。 如果希望将主机添加到其他组,请添加一个 Remove from host groups 操作(指定 "Discovered hosts"),并同时添加一个 Add to host groups 操作(指定另一个主机组),因为主机必须属于某个主机组。

发现到的设备的 IP 地址,以及发现来源(Zabbix 服务器、Zabbix proxy 或 proxy 组)和接口类型,会作为在系统中查找主机的依据。 如果已存在具有相同 IP 地址、接口类型和发现来源的主机,则该主机将作为执行操作的目标。 如果发现来源不同,则该发现对象会被视为不同的主机,并且可能会创建一个新主机。

如果发现到的主机 IP 地址发生变化,或者接口被删除,则在下一次发现时将创建一个新主机。

主机命名

在添加主机时,主机名取决于反向 DNS 查询的结果;如果反向查询失败,则使用 IP 地址。 查询由 Zabbix 服务器或 Zabbix proxy 执行,具体取决于哪个组件正在进行发现。 如果在 proxy 上查询失败,则不会在服务器上重试。 如果具有此类名称的主机已存在,则下一个主机名称会在名称后追加 _2,然后是 _3,依此类推。

也可以覆盖 DNS/IP 查询,改为使用监控项值作为主机名,例如:

  • 您可以使用 Zabbix agent 监控项进行发现,发现多个运行 Zabbix agent 的服务器,并根据该监控项返回的字符串值自动为它们分配正确的名称
  • 您可以使用 SNMP agent 监控项进行发现,发现多个 SNMP 网络设备,并根据该监控项返回的字符串值自动为它们分配正确的名称

如果主机名已使用监控项值设置,则在后续发现检查中不会更新。 如果无法使用监控项值设置主机名,则使用默认值(DNS 名称)。

如果某个主机已存在且其发现到的 IP 地址相同,并且发现来源(Zabbix 服务器、proxy 或 proxy 组)未发生变化,则不会创建新主机。 如果发现来源不同,则会将发现到的实体视为不同对象,并可能创建新主机。 但是,如果发现动作包含操作(链接模板、添加到主机组等),则会对按 IP 地址、接口类型和发现来源匹配到的现有主机执行这些操作。

主机移除

如果通过网络发现规则发现的主机不再位于该规则的 IP 范围内,则这些主机会自动从 Monitoring > Discovery 中移除。 主机会立即移除。

添加主机时创建接口

当主机因网络发现而被添加时,会根据以下规则创建接口:

  • 检测到的服务 - 例如,如果 SNMP 检查成功,则会创建一个 SNMP 接口。
  • 如果主机同时对 Zabbix agent 和 SNMP 请求有响应,则会创建这两种类型的接口。
  • 如果唯一性条件是 Zabbix agent 或 SNMP 返回的数据,则会将为主机找到的第一个接口创建为默认接口。 其他 IP 地址将作为附加接口添加。 Action 的条件(例如 Host IP)不会影响接口的添加。 注意,只有当所有接口都由同一发现规则发现时,这才会生效。 如果不同的发现规则发现了同一主机的不同接口,则会添加一个额外的主机。
  • 如果主机仅对 agent 检查有响应,则只会创建一个 agent 接口。 如果之后它开始对 SNMP 有响应,则会添加额外的 SNMP 接口。
  • 如果最初创建了 3 个独立主机,并且它们是通过 "IP" 唯一性条件发现的,随后发现规则被修改,使主机 A、B 和 C 的唯一性条件结果相同,则 B 和 C 会作为 A(第一个主机)的附加接口创建。 单独的主机 B 和 C 仍然保留。 在 Monitoring > Discovery 中,添加的接口会显示在 "Discovered device" 列中,使用黑色字体并缩进显示,而 "Monitored host" 列只会显示 A,即第一个创建的主机。 对于被视为附加接口的 IP,不会测量 "Uptime/Downtime"。

更改 proxy 设置

由不同 proxy 发现的主机并不总是被视为不同的主机。
发现和唯一性检查取决于 proxy 组结构:当某个 proxy 运行发现规则并创建主机时,该主机会被添加到该 proxy 的父 proxy 组中,而不是分配给该 proxy 本身。
当 Zabbix 在发现过程中评估 IP 唯一性时,它会检查由父 proxy 组监控的主机。
由该组内各个 proxy 监控的主机(包括运行发现的 proxy)会在唯一性检查中被忽略,这可能会在多个 proxy 监控重叠子网时导致重复主机。

虽然这种行为允许发现跨越不同子网使用的重叠 IP 范围运行,但更改已监控子网所分配的 proxy 更为复杂,因为 proxy 更改必须同时一致地应用于已发现的主机以及父 proxy 组的成员关系,以避免重复。

例如,在发现规则中替换 proxy 的步骤如下:

  1. 禁用发现规则
  2. 同步 proxy 配置
  3. 在发现规则中替换 proxy
  4. 为此规则发现的所有主机替换 proxy(确保更新父 proxy 组中的主机以及该组中由各个 proxy 监控的任何主机,以避免重复)
  5. 启用发现规则