触发器依赖关系
触发器依赖关系可用于避免与根本原因无关的告警。
请参见所有最佳实践。
概述
有时,一个主机的可用性取决于另一个主机。
位于路由器后面的服务器,如果路由器宕机,就会变得不可达。
如果为两者都配置了触发器,你可能会收到两个主机都宕机的通知,而实际上只有路由器才是罪魁祸首。
这时,主机之间的某种依赖关系就可能很有用。
设置依赖后,可以暂缓发送从属对象的通知,只发送根本问题的通知。
虽然 Zabbix 不直接支持主机之间的依赖关系,但可以通过另一种更灵活的方法来定义它们 - 触发器依赖。
一个触发器可以依赖一个或多个触发器。
因此,在我们的简单示例中,我们打开服务器触发器配置表单,并设置它依赖于路由器对应的触发器。
有了这样的依赖关系,只要它所依赖的触发器处于 'PROBLEM' 状态,服务器触发器就不会改变其状态 - 因而不会执行任何从属动作,也不会发送任何通知。
如果服务器和路由器都宕机,并且设置了 "server down" 触发器与 "router down" 触发器之间的依赖关系,Zabbix 将不会为从属触发器执行动作。
当父触发器处于 PROBLEM 状态时,其从属触发器报告的值可能不可信。
因此,在父触发器(上例中的路由器)满足以下任一条件之前,从属触发器不会重新评估:
- 从 'PROBLEM' 状态恢复为 'OK' 状态;
- 状态从 'PROBLEM' 变为 'UNKNOWN';
- 通过手动方式、关联规则,或借助 date and time 和/或 nodata() 函数被关闭;
- 通过不参与从属触发器的监控项值得到解决;
- 被禁用,或其监控项被禁用,或其监控项所属主机被禁用
在上述所有情况下,从属触发器(服务器)只有在收到新的指标后才会重新评估。
这意味着从属触发器可能不会立即更新。
另外:
- 触发器依赖可以从任意主机触发器添加到任意其他主机触发器,只要不会导致循环依赖。
- 触发器依赖可以从一个模板添加到另一个模板。
如果模板 A 中的某个触发器依赖于模板 B 中的某个触发器,那么模板 A 只能与模板 B 一起链接到主机(或另一个模板),但模板 B 可以单独链接到主机(或另一个模板)。 - 触发器依赖可以从模板触发器添加到主机触发器。
在这种情况下,将该模板链接到主机时,会创建一个主机触发器,该主机触发器依赖于与原触发器所依赖的相同模板触发器。
例如,这允许你创建一个模板,其中某些触发器依赖于路由器(主机)触发器。
所有链接到该模板的主机都将依赖于那个特定的路由器。 - 触发器依赖不能从主机触发器添加到模板触发器。
- 触发器依赖可以从触发器原型添加到另一个触发器原型(在同一个低级别发现规则内)或真实触发器。
触发器原型不能依赖于来自不同 LLD 规则的触发器原型,也不能依赖于由触发器原型创建的触发器。
主机触发器原型不能依赖于模板中的触发器。
配置
要定义依赖关系:
-
打开触发器配置表单中的 Dependencies 选项卡。
-
在 Dependencies 部分点击 Add,并选择一个或多个该触发器将依赖的触发器。

-
点击 Update。
现在,触发器在列表中会显示其依赖关系的标识。

多个依赖关系示例
例如,主机位于 Router2 后面,而 Router2 位于 Router1 后面。
Zabbix - Router1 - Router2 - Host
如果 Router1 宕机,那么显然主机和 Router2 也都不可达,但同时收到关于主机、Router1 和 Router2 全部宕机的三条通知就显得过多了。
因此,在这种情况下,我们定义两个依赖关系:
the 'Host is down' trigger depends on the 'Router2 is down' trigger
the 'Router2 is down' trigger depends on the 'Router1 is down' trigger
在更改 'Host is down' 触发器的状态之前,Zabbix 会检查相应的触发器依赖关系。
如果找到了此类依赖关系,并且其中某个触发器处于 Problem 状态,那么触发器状态将不会更改,也不会执行操作,并且不会发送任何通知。
Zabbix 会递归执行此检查。 如果 Router1 或 Router2 不可达,Host 触发器将不会更新。