2022 Zabbix中国峰会
2022 Zabbix中国峰会

3 触发器依赖关系

概述

有时候一台主机的可用性依赖于另一台主机。如果一台路由器宕机,则路由器后端的服务器将变得不可用。如果这两者都设置了触发器,你可能会收到关于两个主机宕机的通知,然而只有路由器是真正故障的。

这就是主机之间某些依赖关系可能有用的地方,设置依赖关系的通知可能会被抑制,而只发送根本问题的通知。

虽然Zabbix不支持主机之间的直接依赖关系,但是它们可以定义另外一种更加灵活的方式 - 触发器依赖关系。一个触发器可以有一个或多个依赖的触发器。

因此在我们简单示例中,我们打开服务器触发器配置的窗口,并设置它依赖于路由器的相应触发器。有了这样的依赖性,只要它所依赖的触发器处于“异常”状态,服务器触发器就不会改变状态,因此不会执行依赖的动作,也不会发送通知。

如果服务器和路由器都宕机且有依赖关系,Zabbix将不执行依赖触发器的动作。

依赖触发器上的动作不会被执行,如果触发器依赖于:

  • 状态从'PROBLEM' 修改为 'UNKNOWN'
  • 通过关联或者基于时间功能的手工关闭
  • 被非依赖触发器的监控项值恢复
  • 已禁用,已禁用监控项或禁用项目主机

请注意,上述情况下的“次要”(依赖)触发器不会立即更新。

另外:

  • 触发器依赖可以从任何主机触发器添加到任何其他主机触发器,只要它不会导致循环依赖。
  • 触发器依赖可以从一个模板添加到另一个模板,如果模板A的触发器依赖于模板B的触发器,模板A只能与模板B一起链接到主机(或其他模板),但是模板B可以单独链接到主机(或其他模板)。
  • 触发器依赖可以从模板触发器添加到主机触发器。在这种情况下,例如, 有一个触发器依赖于路由器(主机)触发器的模板。链接到这个模板的所有主机都将依赖于特定的路由器。
  • 可以不添加从主机触发器到模板触发器的触发器依赖性。
  • 触发器依赖可以从一个触发器原型添加到另一个触发器原型(在同一个Low-level discovery规则中)或真实触发器中。触发器原型可以不依赖来自不同LLD规则的触发器原型或者触发器原型中创建的一个触发器。主机触发器原型不能依赖于模板中的触发器。

配置

若要定义依赖关系,在触发器配置表格打开依赖关系标签。单击“依赖关系”块中的 添加 ,并选择触发器将依赖的一个或多个触发器。

点击 更新,现在列表中触发器有了依赖性标示。

几个依赖关系的示例

例如,主机位于路由器2后面,路由器2在路由器1后面。

Zabbix - 路由器1 - 路由器2 - 主机

如果路由器1宕机,显然主机和路由器2也不可达,然而我们不想收到主机、路由器1和路由器2都宕机的3条通知。

因此,在这种情况下我们定义了两个依赖关系:

'主机宕机' 触发器依赖于 '路由器2宕机' 触发器
       '路由器2宕机' 触发器依赖于 '路由器1宕机' 触发器

在改变“主机宕机”触发器的状态之前,Zabbix将会检查相应触发器的依赖关系,如果找到,并且一个触发器处于“异常”状态,则触发器状态不会发生改变,因此不会执行动作,也不会发送通知。

Zabbix递归执行此检查,如果路由器1或路由器2是不可达的状态,那么主机触发器则不会更新。