3 触发器依赖关系

概览

有时,一个主机的可用性依赖于另一个主机。如果路由器出现故障,位于其后的服务器将变得无法访问。如果为两者都配置了触发器,你可能会收到关于两个主机都出现故障的通知,而实际上,路由器才是罪魁祸首。

在这种情况下,主机间的一些依赖关系可能会很有用。设置依赖关系后,可以抑制依赖主机的通知,仅发送关于根本问题的通知。

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

在我们这个简单的例子中,我们打开服务器触发器的配置表单,并设置它依赖于路由器的相应触发器。有了这样的依赖关系,只要它所依赖的触发器处于“PROBLEM”状态,服务器触发器就不会改变其状态,因此不会采取任何依赖动作,也不会发送任何通知。

如果服务器和路由器都出现故障,并且存在依赖关系,Zabbix将不会为依赖触发器执行任何动作。

当父触发器处于“PROBLEM”状态时,其依赖项可能报告不可信的值。因此,依赖触发器将不会重新评估,直到父触发器(在上面的例子中是路由器):

  • 从“PROBLEM”状态恢复到“OK”状态;
  • 从“PROBLEM”状态变为“UNKNOWN”状态;
  • 手动关闭,或通过相关性或使用日期和时间和/或nodata()函数关闭;
  • 由一个不涉及依赖触发器的监控项的值解决;
  • 被禁用,或有禁用的监控项或禁用的监控项主机

在上述所有情况下,只有在接收到新的监控数据时,依赖触发器(服务器)才会重新评估。这意味着依赖触发器可能不会立即更新。

此外:

  • 可以从任何主机触发器向任何其他主机触发器添加触发器依赖关系,只要不形成循环依赖关系。
  • 可以从一个模板向另一个模板添加触发器依赖关系。如果模板A中的某个触发器依赖于模板B中的某个触发器,模板A只能与模板B一起链接到主机(或其他模板),但模板B可以单独链接到主机(或其他模板)。
  • 可以从模板触发器向主机触发器添加触发器依赖关系。在这种情况下,将此类模板链接到主机将创建一个依赖于相同触发器模板的主机触发器,该触发器模板是触发器所依赖的。这允许,例如,有一个模板,其中一些触发器依赖于路由器(主机)触发器。所有链接到此模板的主机都将依赖于特定的路由器。
  • 不能从主机触发器向模板触发器添加触发器依赖关系。
  • 可以从触发器原型向另一个触发器原型(在相同的低级发现规则内)或实际触发器添加触发器依赖关系。触发器原型不能依赖于不同LLD规则的触发器原型或从触发器原型创建的触发器。主机触发器原型不能依赖于模板中的触发器。

配置

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

点击 更新.。现在,触发器在列表中显示了其依赖项的标识

几个依赖关系的示例

例如,主机位于Router2后,Router2在Router1后面

Zabbix - Router1 - Router2 - Host

当Router1中断,显然,主机和Router2会不可达,但收到关于Host、Router1和Router2全部宕机的三个通知是过多的。

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

'Host is down' 触发器依赖于 'Router2 is down' 触发器

'Router2 is down' 触发器依赖于 'Router1 is down'触发器

在更改 'Host is down' 触发器状态之前, Zabbix将检查相应的触发器依赖项。如果找到了这样的依赖项,并且其中一个依赖的触发器处于'问题'状态,那么触发器的状态将不会被更改,相关的操作将不会被执行,并且不会发送任何通知。

Zabbix 会递归地执行此检查。如果 Router1 或 Router2 无法访问,则 Host 触发器的状态将不会被更新。