1 网络发现
概述
Zabbix 提供自动网络发现功能,既高效又非常灵活。
正确设置网络发现后,您可以:
- 加快 Zabbix 部署
- 简化管理
- 在快速变化的环境中使用 Zabbix,而无需进行过多管理
Zabbix 网络发现基于以下信息:
- IP 范围
- 外部服务的可用性(FTP、SSH、WEB、POP3、IMAP、TCP 等)
- 从 Zabbix agent 接收的信息(仅支持未加密模式)
- 从 SNMP agent 接收的信息
它不提供:
- 网络拓扑发现
网络发现基本上由两个阶段组成:发现和动作。
发现
Zabbix 会定期扫描在网络发现规则中定义的 IP 范围。 检查频率可针对每条规则单独配置。
每条规则都定义了一组要对该 IP 范围执行的服务检查。
发现规则由发现管理器处理。 发现管理器会为每条规则创建一个作业,其中包含任务(网络检查)列表。 网络检查由可用的发现工作进程并行执行, 其数量可在前端中针对每条规则进行配置。 只有具有相同 IP 和端口的检查会按顺序调度,因为某些设备不接受在同一端口上的并行连接。
网络检查队列大小限制为 2000000,或大约 4 GB 内存。
如果队列已满,则会跳过该发现规则,并在日志中打印一条警告消息。
您可以使用内部监控项 zabbix[discovery_queue] 来监控队列中的发现检查数量。
发现检查与其他检查独立处理。 如果某些检查未发现服务(或失败),其他检查仍会继续处理。
如果发现规则在执行期间发生更改,则当前的发现执行将被中止。
网络发现模块对服务和主机(IP)执行的每一次检查都会生成一个发现事件。
| 事件 | 服务检查结果 |
|---|---|
| 服务已发现 | 服务在处于“down”后变为“up”,或首次被发现时。 |
| 服务正常 | 服务处于“up”状态,且此前已经是“up”状态。 |
| 服务丢失 | 服务在处于“up”后变为“down”。 |
| 服务不可用 | 服务处于“down”状态,且此前已经是“down”状态。 |
| 主机已发现 | 主机的至少一个服务在该主机所有服务均为“down”后变为“up”,或者发现了一个属于未注册主机的服务。 |
| 主机正常 | 主机的至少一个服务处于“up”状态,且此前至少已有一个服务处于“up”状态。 |
| 主机丢失 | 主机的所有服务在至少一个服务曾为“up”后均变为“down”。 |
| 主机不可用 | 主机的所有服务均处于“down”状态,且此前已经是“down”状态。 |
操作
发现事件可以作为相关操作的基础,例如:
- 发送通知
- 添加/移除主机
- 启用/禁用主机
- 将主机添加到组
- 将主机从组中移除
- 为主机添加标签
- 移除主机标签
- 将模板链接到主机/将模板与主机取消链接
- 执行远程脚本
这些操作可以根据设备类型、IP、状态、正常运行时间/停机时间等进行配置。
有关为基于网络发现的事件配置操作的完整详细信息,请参见操作执行内容和条件页面。
由于网络发现操作是基于事件的,因此无论发现的主机在线还是离线,都会触发这些操作。
强烈建议添加一个操作条件 发现状态:在线,以避免诸如 添加主机 之类的操作在 服务丢失/服务停止 事件发生时被触发。
否则,如果手动移除了某个已发现的主机,它仍然会生成 服务丢失/服务停止 事件,并会在下一次发现周期中被重新创建。
如果任一可链接模板中存在唯一实体(例如监控项键值),且该实体与主机上已存在的唯一实体(例如监控项键值)或另一个可链接模板中的唯一实体相同,则将模板链接到已发现主机的操作会整体失败。
创建主机
如果选择了 添加主机 操作,则会添加一个主机。 即使缺少 添加主机 操作,只要您选择了会导致对主机执行操作的操作,也同样会添加主机。 此类操作包括:
- 启用主机
- 禁用主机
- 将主机添加到主机组
- 将模板链接到主机
已创建的主机会被添加到 Discovered hosts 组(默认如此,可在 管理 > 常规 > 其他 中配置)。 如果您希望将主机添加到其他组,请添加一个 从主机组中移除 操作(指定“Discovered hosts”),并同时添加一个 添加到主机组 操作(指定另一个主机组),因为主机必须属于某个主机组。
已发现设备的 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 地址将作为附加接口添加。 操作的条件(例如主机 IP)不会影响接口的添加。 请注意,只有当所有接口都是由同一条发现规则发现时,此机制才会生效。 如果同一主机的另一个接口是由不同的发现规则发现的,则会额外添加一个主机。 - 如果某个主机仅响应 agent 检查,则只会为其创建一个 agent 接口。
如果之后它开始响应 SNMP,则会额外添加 SNMP 接口。 - 如果最初基于“IP”唯一性条件创建了 3 个独立主机,随后修改发现规则,使主机 A、B 和 C 的唯一性条件结果相同,则 B 和 C 会作为附加接口添加到第一个主机 A。
各个独立主机 B 和 C 仍会保留。
在 监控 > 发现 中,新增的接口会显示在“发现的设备”列中,使用黑色字体并带有缩进,但“受监控主机”列中只会显示第一个创建的主机 A。
对于被视为附加接口的 IP,不会统计其“正常运行时间/故障时间”。
更改 proxy 设置
由不同 proxy 发现的主机并不总是被视为不同的主机。
发现和唯一性检查取决于 proxy 组结构:当某个 proxy 运行发现规则并创建主机时,该主机会被添加到该 proxy 的父 proxy 组中,而不是分配给该 proxy 本身。
当 Zabbix 在发现期间评估 IP 唯一性时,它会检查由父 proxy 组监控的主机。
该组内各个独立 proxy 监控的主机(包括运行发现的 proxy)会被忽略,不参与唯一性检查,因此如果多个 proxy 监控重叠的子网,可能会导致重复主机。
虽然这种行为使发现功能能够跨不同子网中使用的重叠 IP 范围运行,但如果要更改已监控子网所分配的 proxy,情况会更复杂,因为必须将 proxy 变更一致地应用到已发现的主机以及父 proxy 组的成员关系中,以避免重复。
例如,在发现规则中替换 proxy 的步骤如下:
- 禁用发现规则
- 同步 proxy 配置
- 在发现规则中替换 proxy
- 为此规则发现的所有主机替换 proxy(确保父 proxy 组中的主机以及该组内由各个独立 proxy 监控的所有主机都已更新,以避免重复)
- 启用发现规则