[comment]: # ({41c636fc-d5d0048d})
# トリガーの依存関係

トリガーの依存関係は、根本原因に関連しないアラートを回避するために使用できます。

すべての[ベストプラクティス](/manual/config/triggers/best_practices)を参照してください。

[comment]: # ({/41c636fc-d5d0048d})

[comment]: # ({520fe3ce-26bda053})
### 概要

ホストの可用性が別のホストに依存することがあります。
ルーターの背後にあるサーバーは、ルーターが停止すると到達不能になります。
両方にトリガーを設定していると、実際にはルーターだけが原因であるにもかかわらず、2つのホストがダウンしたという通知を受け取ることがあります。

このような場合に、ホスト間の依存関係が役立つことがあります。
依存関係を設定すると、依存先に関する通知を抑制し、根本原因に関する通知だけを送信できます。

Zabbix はホスト間の依存関係を直接サポートしていませんが、より柔軟な別の方法であるトリガー依存関係を使って定義できます。
1つのトリガーは、1つ以上の依存先トリガーを持つことができます。

簡単な例では、サーバーのトリガー設定フォームを開き、ルーターの該当するトリガーに依存するように設定します。
このような依存関係があると、サーバーのトリガーは、依存先トリガーが 'PROBLEM' 状態である限り状態を変更しません。そのため、依存するアクションは実行されず、通知も送信されません。

サーバーとルーターの両方が停止しており、「server down」トリガーと「router down」トリガーの間に依存関係が設定されている場合、Zabbix は依存先トリガーに対するアクションを実行しません。

親トリガーが PROBLEM 状態にある間、依存先トリガーが返す値は信頼できない可能性があります。
そのため、親トリガー（上記の例ではルーター）が次のいずれかになるまで、依存先トリガーは再評価されません。

-   'PROBLEM' から 'OK' 状態に戻る;
-   'PROBLEM' から 'UNKNOWN' に状態が変わる;
-   手動、相関、または [date and time](/manual/config/triggers/expression/time) および/または [nodata()](/manual/config/triggers/expression/history#nodata) 関数の助けによってクローズされる;
-   依存先トリガーに関与していないアイテムの値によって解決される;
-   無効化される、無効なアイテムを持つ、または無効なアイテムのホストを持つ

上記のいずれの場合でも、依存先トリガー（サーバー）は、新しいメトリックを受信したときにのみ再評価されます。
つまり、依存先トリガーはすぐには更新されない場合があります。

また、次の点もあります。

-   トリガー依存関係は、循環依存にならない限り、任意のホストのトリガーから別の任意のホストのトリガーへ追加できます。
-   トリガー依存関係は、あるテンプレートから別のテンプレートへ追加できます。
テンプレート A のあるトリガーがテンプレート B のあるトリガーに依存している場合、テンプレート A はテンプレート B と一緒にのみホスト（または別のテンプレート）にリンクできますが、テンプレート B は単独でホスト（または別のテンプレート）にリンクできます。
-   トリガー依存関係は、テンプレートのトリガーからホストのトリガーへ追加できます。
この場合、そのようなテンプレートをホストにリンクすると、トリガーが依存していたのと同じトリガーテンプレートに依存するホストトリガーが作成されます。
これにより、たとえば、いくつかのトリガーがルーター（ホスト）のトリガーに依存するテンプレートを作成できます。
このテンプレートにリンクされたすべてのホストは、その特定のルーターに依存します。
-   トリガー依存関係は、ホストのトリガーからテンプレートのトリガーへは追加できません。
-   トリガー依存関係は、トリガープロトタイプから別のトリガープロトタイプへ（同じ低レベルディスカバリルール内で）または実際のトリガーへ追加できます。
トリガープロトタイプは、別の LLD ルールのトリガープロトタイプや、トリガープロトタイプから作成されたトリガーに依存できません。
ホストトリガープロトタイプは、テンプレートのトリガーに依存できません。

[comment]: # ({/520fe3ce-26bda053})

[comment]: # ({3efffbf7-c4578b73})
### 設定

依存関係を定義するには、次の手順を実行します。

1. トリガーの[設定フォーム](/manual/config/triggers/trigger#configuration)で *Dependencies* タブを開きます。
2. *Dependencies* セクションで *Add* をクリックし、そのトリガーが依存する1つ以上のトリガーを選択します。

    ![](../../../../../assets/en/manual/config/triggers/dependency.png){width="600"}

3. *Update* をクリックします。

これで、トリガー一覧にその依存関係が表示されます。

![](../../../../../assets/en/manual/config/triggers/dependency_list.png)

[comment]: # ({/3efffbf7-c4578b73})

[comment]: # ({4cbfb1d1-4dc2ce6b})
##### 複数の依存関係の例

たとえば、ホストは Router2 の背後にあり、Router2 は Router1 の背後にあるとします。

```default
Zabbix - Router1 - Router2 - Host
```

Router1 がダウンしている場合、当然ながらホストと Router2 も到達不能ですが、ホスト、Router1、Router2 の 3 つすべてがダウンしているという通知を受け取るのは過剰です。

そのため、この場合は 2 つの依存関係を定義します。

```default
the 'Host is down' trigger depends on the 'Router2 is down' trigger
the 'Router2 is down' trigger depends on the 'Router1 is down' trigger
```

'Host is down' トリガーの状態を変更する前に、Zabbix は対応するトリガーの依存関係を確認します。
そのような依存関係が見つかり、そのうちのいずれかのトリガーが **`Problem`** 状態である場合、トリガーの状態は変更されず、アクションは実行されず、通知も送信されません。

Zabbix はこの確認を再帰的に行います。
Router1 または Router2 に到達できない場合、Host のトリガーは更新されません。

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