触发器依赖关系

触发器依赖关系可用于避免与根本原因无关的告警。

请参见所有最佳实践

概述

有时,一台主机的可用性取决于另一台主机。位于路由器之后的服务器如果路由器宕机,就会变得无法访问。 如果两者都配置了触发器,你可能会收到两台主机都宕机的通知——而实际上真正的故障源只有路由器。

这时,主机之间的某种依赖关系就会很有用。设置依赖关系后,可以抑制依赖方的通知, 只发送根本问题的通知。

虽然 Zabbix 不直接支持主机之间的依赖关系,但可以通过另一种更灵活的方法来定义——触发器依赖关系。 一个触发器可以依赖一个或多个其他触发器。

因此,在这个简单示例中,我们打开服务器触发器配置表单, 并设置其依赖于路由器对应的触发器。设置了这种依赖关系后,只要它所依赖的 触发器处于“PROBLEM”状态,服务器触发器就不会改变其状态——因此不会执行依赖的操作, 也不会发送通知。

如果服务器和路由器都宕机,并且存在依赖关系, Zabbix 将不会为依赖触发器执行操作。

当父触发器处于 PROBLEM 状态时,其依赖触发器可能会上报无法信任的值。 因此,在父触发器(以上示例中的路由器)满足以下任一条件之前,不会重新评估依赖触发器:

  • 从“PROBLEM”恢复到“OK”状态;
  • 状态从“PROBLEM”变为“UNKNOWN”;
  • 被手动关闭、通过事件关联关闭,或借助 date and time 和/或 nodata() 函数关闭;
  • 通过一个未参与依赖触发器的监控项的值被恢复;
  • 被禁用,或其监控项被禁用,或其监控项所属主机被禁用

在上述所有情况下,只有在收到该依赖触发器(服务器)的新指标后,才会重新评估它。 这意味着依赖触发器可能不会立即更新。

另外:

  • 只要不会导致循环依赖,就可以从任意主机触发器向任意其他 主机触发器添加触发器依赖关系。
  • 可以从一个模板向另一个模板添加触发器依赖关系。如果 模板 A 中的某个触发器依赖于模板 B 中的某个触发器, 那么模板 A 只能与模板 B 一起链接到某台主机(或另一个模板), 但模板 B 可以单独链接到某台主机(或另一个模板)。
  • 可以从模板触发器向主机触发器添加触发器依赖关系。 在这种情况下,将这样的模板链接到某台主机时,会创建一个 主机触发器,该触发器依赖于原触发器所依赖的同一个触发器模板。 例如,这使你可以创建一个模板,其中某些触发器依赖于路由器(主机)的触发器。 所有链接到该模板的主机都将依赖于该特定路由器。
  • 不能从主机触发器向模板触发器添加触发器依赖关系。
  • 可以从一个触发器原型向另一个触发器原型(在同一个低级别发现规则内)或 一个实际触发器添加触发器依赖关系。触发器原型不能依赖于 来自不同 LLD 规则的触发器原型,也不能依赖于由触发器原型创建的 触发器。主机触发器原型不能依赖于来自模板的触发器。

配置

要定义依赖关系,请在触发器配置表单中打开“依赖关系”选项卡。单击“依赖关系”区域中的添加,然后选择该触发器将依赖的一个或多个触发器。

单击更新。现在,该触发器会在列表中显示其依赖关系标识。

多个依赖关系示例

例如,主机位于 Router2 后面,而 Router2 又位于 Router1 后面。

Zabbix - Router1 - Router2 - 主机

如果 Router1 宕机,那么显然主机和 Router2 也都无法访问, 此时再接收三条关于主机、Router1 和 Router2 全部宕机的通知就显得过多了。

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

“主机宕机”触发器依赖于“Router2 宕机”触发器
“Router2 宕机”触发器依赖于“Router1 宕机”触发器

在更改“主机宕机”触发器的状态之前,Zabbix 会 检查相应的触发器依赖关系。如果找到了此类依赖关系,并且其中某个 触发器处于 Problem 状态,则该触发器状态将不会 被更改,操作不会执行,也不会 发送通知。

Zabbix 会递归执行此检查。如果 Router1 或 Router2 无法访问,则主机触发器不会被更新。