2022 Zabbix中国峰会
2022 Zabbix中国峰会

3 触发器依赖关系

概览

在某些情况下,一个主机的可用性可能依赖于另一个主机。例如,位于路由器后面的服务器,如果路由器宕机,该服务器也会变得不可达。如果为这两个设备都配置了触发器,你可能会收到两个主机都宕机的通知,而实际上问题仅出在路由器上。

在这种情况下,主机之间的某种依赖关系可能会很有用。通过设置依赖关系,可以抑制依赖主机的通知,只发送根问题的通知

然而,Zabbix 并不直接支持主机之间的依赖关系,但它们可以通过一个更灵活的方法-触发器依赖关系来定义。一个触发器可以有一个或多个它所依赖的触发器。

在我们的简单例子中,我们打开服务器的触发器配置表单,并设置它依赖于路由器的相应触发器。通过这种依赖关系,只要所依赖的触发器处于“问题”状态,服务器的触发器就不会改变其状态-因此不会执行任何依赖操作,也不会发送任何通知。

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

当父触发器处于问题状态时,其依赖的触发器可能报告无法信任的值。因此,依赖的触发器不会在以下情况之前重新评估(以上述路由器为例): - 从“PROBLEM”状态返回到“OK”状态; - 从“PROBLEM”状态更改为“UNKNOWN”状态; - 被手动关闭,通过关联或借助基于时间的函数; - 通过与依赖触发器无关的项目值解决; - 被禁用,或者包含的项目被禁用,或者项目的主机被禁用。

在以上提到的所有情况下,依赖的触发器(服务器)只有在接收到新的度量指标时才会被重新评估。这意味着依赖的触发器可能不会立即更新。

此外:

  • 触发器依赖可以从任何主机触发器添加到任何其他主机触发器,只要它不导致循环依赖。
  • 触发器依赖可以从一个模板添加到另一个模板。如果模板A的某个触发器依赖于模板B的某个触发器,那么模板A只能与模板B一起链接到主机(或另一个模板),但模板B可以单独链接到主机(或另一个模板)。
  • 触发器依赖可以从模板触发器添加到主机触发器。在这种情况下,将这样的模板链接到主机将创建一个主机触发器,该触发器依赖于与原始触发器相同的模板触发器。这允许例如有一个模板,其中某些触发器依赖于路由器(主机)触发器。链接到此模板的所有主机都将依赖于该特定的路由器。
  • 不能从主机触发器添加依赖到模板触发器。
  • 触发器依赖可以从一个触发器原型添加到另一个触发器原型(在同一个低级别自动发现规则中)或实际触发器。触发器原型不能依赖于来自不同低级别自动发现规则的触发器原型或基于触发器原型创建的触发器。主机触发器原型不能依赖于模板中的触发器。

配置

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

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

几个依赖关系的示例

例如,主机位于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 触发器的状态将不会被更新。