3 触发器依赖关系
概述
有时,一个主机的可用性取决于另一个主机。 位于路由器后面的服务器会在路由器宕机时变得不可达。 如果为这两个主机都配置了触发器,您可能会收到两个主机宕机的通知,而实际上只有路由器是问题所在。
这时,在主机之间设置某种依赖关系可能会很有用。 设置依赖关系后,可以抑制依赖主机的通知,只发送根本问题的通知。
虽然 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 触发器将不会更新。