Zabbix 环形拓扑触发依赖

Zabbix ring topology trigger dependencies

我有一个关于冗余网络拓扑的问题。 我想跟踪网络中每个交换机的 ICMP 可用性。对于每个 Switch,我都使用一个模板,该模板具有项目 icmpping 和跟踪该项目最后一个值的触发器(ICMP trigger,实际上这是 Template ICMP Ping)。使用的Zabbix版本是4.2.8.

假设我有线性拓扑,其中每个设备都直线连接到另一个设备:交换机 C <-> 交换机 B <-> 交换机 A <-> 聚合 。 在 such linear topology 中,触发器依赖关系非常明显:交换机 C 的可用性取决于交换机 B 的状态,交换机 B 的可用性取决于交换机 A 的状态,而交换机 A 取决于聚合设备的可用性。为这个做触发依赖是没有问题的

但现在我有一个 ring topology:交换机 C 连接到 交换机 A交换机 B交换机 A交换机 B 连接到 聚合 设备,从而使环 C <-> A <-> Aggr <-> B <-> C。 在这种情况下,我可以 add two dependencies for both Switch A and B availability triggers in Switch C ICMP trigger configuration. But if one of uplink switches (A or B) fail I still would not know if C is down or up: Switch C trigger would be suppressed since at least one parent trigger is fired:

Before changing the status of the 'Host is down' trigger, Zabbix will check for corresponding trigger dependencies. If found, and one of those triggers is in 'Problem' state, then the trigger status will not be changed and thus actions will not be executed and notifications will not be sent.

我可以想象有几种选择。

选项 1: 作为解决方法,我可以手动更改 ICMP trigger 以跟踪此设备(交换机 C)和两个上行链路的 icmpping 项目值在这样的单个触发器中:

{Switch_C:icmpping[{HOST.IP}].last()}=0 and ({Switch_A:icmpping[{HOST.IP}].last()}<>0 or {Switch_B:icmpping[{HOST.IP}].last()}<>0)

但是由于我对所有设备(线性拓扑的一部分和环形拓扑的一部分)使用相同的模板,这样做需要为每个 'ring' 设备这是相当多的工作。

选项 2: 我可以监视连接到 C 的 A 和 B 上的接口状态,但这实际上比以前的选项更有效,因为我需要添加 interface state 项目到每个开关。

有没有更好的方法来正确监控这种环形拓扑中的设备?

简短的回答是 "you can't",但我会尝试扩展它。

首先要考虑的是,您正在检查交换机 IP 地址的可达性(可能分配给特定的 VLAN 接口)从 zabbix 服务器的角度。它是否连接到开关 A、B 或 C?

然后,现代生成树算法将 VLAN 视为具有多个实例,因此专用于您的交换机 ip 的 vlan 可以在 B 和 C 之间有一个阻塞端口,而您的生产 vlan 可以从 A 到 B 阻塞。您有多个逻辑单个物理拓扑中的拓扑。

没有网络拓扑自动映射器,不时有人提出要求但没有人创建它:您必须自己实现它。

例如,您可以使用自定义脚本查询开关:

  • 从交换机获取 LLDP 或 CDP 邻居状态以构建当前拓扑
  • 通过 api 个调用动态创建屏幕和地图
  • 动态设置和删除依赖项api 调用
  • 对拓扑的变化做出反应

更简单的方法是:

  • 使用警报设置 icmp 检查您的交换机 ip 地址
  • 为带有警报的生成树重新计算设置 snmp 检查(参见 Template SNMP Switch:stpLastTimeChange
  • 安装Netdisco绘制拓扑