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

-
点击更新。
现在,触发器列表中会显示其依赖关系指示。

多个依赖关系示例
例如,主机位于 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 触发器将不会更新。