3 触发器依赖

概述

有时一个主机的可用性取决于另一个设备。位于路由器后端的服务器在路由器宕机时将变得不可达。 若为两者都配置了触发器,可能会get关于两个主机宕机的通知——而实际上只有路由器是故障源。

此时建立主机间的依赖关系就很有用。通过设置依赖项,可以抑制从属设备的通知,仅发送根本问题的告警。

虽然Zabbix不直接支持主机间的依赖关系,但可以通过更灵活的触发器依赖来实现。一个触发器可以依赖一个或多个其他触发器。

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

当服务器和路由器同时宕机且存在依赖关系时,Zabbix不会execute从属触发器的关联操作。

当父触发器处于PROBLEM状态时,其从属触发器报告的值可能不可信。因此从属触发器(上例中的服务器)只有在父触发器(路由器)满足以下条件时才会被重新评估:

  • 从'PROBLEM'状态恢复为'OK'状态
  • 状态从'PROBLEM'变为'未知'
  • 通过手动、事件关联或date and time及nodata()函数关闭
  • 由未参与从属触发器的监控项的值所解决
  • 被禁用,或其监控项被禁用,或监控项所属的主机被禁用

上述所有情况下,从属触发器(服务器)只有在收到新指标时才会被重新评估。这意味着从属触发器可能不会立即更新。

此外:

  • 触发器依赖可以从任何主机触发器添加到其他主机触发器,只要不形成循环依赖
  • 触发器依赖可以在模板间建立。如果模板A的某个触发器依赖模板B的触发器,模板A必须与模板B同时关联到一个主机(或其他模板),但模板B可以单独关联
  • 可以从模板触发器关联到一个主机触发器。此时,将该模板关联到一个主机时,将create依赖于相同模板触发器的一个主机触发器。例如可以创建这样的模板:其中某些触发器依赖于路由器(主机)的触发器。所有关联此模板的主机都将依赖该特定路由器
  • 不能从一个主机触发器反向依赖模板触发器
  • 触发器原型可以依赖同一低级发现规则下的其他触发器原型或真实触发器,但不能依赖不同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

在更改"主机已宕机"触发器状态前,Zabbix会 检查对应的触发器依赖关系。若发现此类依赖且其中一个触发器 处于"问题"状态,则该触发器状态将不会 被更改,关联操作不会执行,且不会发送 任何通知。

Zabbix会递归执行此检查。若Router1或Router2 不可达,主机触发器将不会被更新。