[comment]: # translation:outdated

[comment]: # ({5941233e-d5d0048d})
# 3 触发器依赖关系

[comment]: # ({/5941233e-d5d0048d})

[comment]: # ({1d5f1259-bfd03311})
#### 概述

有时候一台主机的可用性依赖于另一台主机。如果一台路由器宕机，则路由器后端的服务器将变得不可用。如果这两者都设置了触发器，你可能会收到关于两个主机宕机的通知，然而只有路由器是真正故障的。

这就是主机之间某些依赖关系可能有用的地方，设置依赖关系的通知可能会被抑制，而只发送根本问题的通知。

虽然Zabbix不支持主机之间的直接依赖关系，但是它们可以定义另外一种更加灵活的方式
- 触发器依赖关系。一个触发器可以有一个或多个依赖的触发器。

因此在我们简单示例中，我们打开服务器触发器配置的窗口，并设置它依赖于路由器的相应触发器。有了这样的依赖性，只要它所依赖的触发器处于“异常”状态，服务器触发器就不会改变状态，因此不会执行依赖的动作，也不会发送通知。

如果服务器和路由器都宕机且有依赖关系，Zabbix将不执行依赖触发器的动作。

依赖触发器上的动作不会被执行，如果触发器依赖于:

-   状态从'PROBLEM' 修改为 'UNKNOWN'
-   通过关联或者基于时间功能的手工关闭
-   被非依赖触发器的监控项值恢复
-   已禁用，已禁用监控项或禁用项目主机

请注意，上述情况下的“次要”（依赖）触发器不会立即更新。

另外：

-   触发器依赖可以从任何主机触发器添加到任何其他主机触发器，只要它不会导致循环依赖。
-   触发器依赖可以从一个模板添加到另一个模板，如果模板A的触发器依赖于模板B的触发器，模板A只能与模板B一起链接到主机（或其他模板)，但是模板B可以单独链接到主机（或其他模板）。
-   触发器依赖可以从模板触发器添加到主机触发器。在这种情况下，例如,
    有一个触发器依赖于路由器（主机）触发器的模板。链接到这个模板的所有主机都将依赖于特定的路由器。
-   可以不添加从主机触发器到模板触发器的触发器依赖性。
-   触发器依赖可以从一个触发器原型添加到另一个触发器原型(在同一个Low-level
    discovery规则中)或真实触发器中。触发器原型可以不依赖来自不同LLD规则的触发器原型或者触发器原型中创建的一个触发器。主机触发器原型不能依赖于模板中的触发器。

[comment]: # ({/1d5f1259-bfd03311})

[comment]: # ({4636dad4-c4578b73})
#### 配置

若要定义依赖关系，在触发器[配置表格](trigger#configuration)打开依赖关系标签。单击“依赖关系”块中的
*添加* ，并选择触发器将依赖的一个或多个触发器。
![](../../../../assets/en/manual/config/triggers/dependency.png)

点击 *更新*，现在列表中触发器有了依赖性标示。
![](../../../../assets/en/manual/config/triggers/dependency_list.png)

[comment]: # ({/4636dad4-c4578b73})

[comment]: # ({6407b9c6-4dc2ce6b})
##### 几个依赖关系的示例

例如，主机位于路由器2后面，路由器2在路由器1后面。

    Zabbix - 路由器1 - 路由器2 - 主机

如果路由器1宕机，显然主机和路由器2也不可达，然而我们不想收到主机、路由器1和路由器2都宕机的3条通知。

因此，在这种情况下我们定义了两个依赖关系：

    '主机宕机' 触发器依赖于 '路由器2宕机' 触发器
    '路由器2宕机' 触发器依赖于 '路由器1宕机' 触发器

在改变“主机宕机”触发器的状态之前，Zabbix将会检查相应触发器的依赖关系，如果找到，并且一个触发器处于“异常”状态，则触发器状态不会发生改变，因此不会执行动作，也不会发送通知。

Zabbix递归执行此检查，如果路由器1或路由器2是不可达的状态，那么主机触发器则不会更新。

[comment]: # ({/6407b9c6-4dc2ce6b})
