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

3 触发器依赖

概述

有时候,一台主机的可用性取决于另一台主机。例如,如果一台路由设备宕机,则路由设备后端的服务器全部会变得无法访问。如果这两者都设置了触发器,你可能会收到关于这两者宕机的报警,而事实上只有路由设备是真正存在故障的。

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

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

所以在上面提到的例子中,我们打开服务器的触发器配置的窗口,并设置依赖于路由设备的相应触发器。有了这样的依赖关系,只要它所依赖的触发器处于“PROBLEM”状态,服务器触发器就不会改变状态,因此不会执行依赖的动作,同时也不会发送通知。

如果路由设备和服务器同时宕机,如果有依赖关系,那么Zabbix将不会执行服务器的触发动作。

如果当前触发器所依赖的触发器的状态从“PROBLEM”变更为“UNKNOWN”,那么则不会执行这个依赖触发器的动作。

值得注意的是,如果触发器所依赖的触发器被禁用、监控项,甚至主机被禁用,则依赖触发器的事件/动作将不会被抑制。

同样的

  • 触发器依赖可以从任何主机触发器添加到另一个主机触发器,只要它不会导致循环的依赖即可。
  • 触发器依赖可以从模板添加到另一个模板,如果模板A的触发器依赖于模板B的触发器,一个主机要链接到模板A的话,那么它同时要链接到模板B(因为模板A的触发器依赖于模板B的触发器),但是主机却可以单独链接到模板B,因为模板B是被依赖的。
  • 触发器依赖可以从模板的触发器添加到主机触发器。在这种情况下,如果主机链接这样的模板,那么主机也会创建链接到的模板所依赖的主机触发器。例如,如果模板的某些触发器依赖路由器(或主机)的触发器,那么但凡链接了这个模板的,都会依赖于路由器(或主机)的触发器。
  • 可能不会添加从主机触发器到模板触发器的触发器依赖。
  • 触发器依赖可以从一个触发器原型添加到另一个触发器原型(在同一个Low-level discovery规则中)或一个真实的触发器。触发器原型可能不依赖于从不同LLD规则的触发器原型或从触发器原型中创建的一个触发器。主机触发器原型不会依赖于来自模板的触发器。

配置

要定义触发器依赖,打开触发器configuration form的Dependencies选项卡,在“Dependencies”选项卡点击Add进行添加,并选择所依赖的一个或多个触发器。

点击Update更新,就可以看到所依赖的触发器列表。

几个依赖关系的示例

例如, 主机的前面有Router1,Router2的前面有Router1。

Zabbix - Router1 - Router2 - Host

如果Router1宕掉,那么很明细那Host和Router2就不可达了,但我们并不想收到关于Host、Router1和Router2宕掉的这三个通知。

于是我们定义了如下两个依赖关系:

'Host is down' trigger depends on 'Router2 is down' trigger
       'Router2 is down' trigger depends on 'Router1 is down' trigger

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

Zabbix递归执行此检查,如果Router1或Router2是不可达的状态,那么Host触发器则不会更新。