【ZABBIX7.0LTS】トリガーの依存関係について（複数の依存関係）

## はじめに
以下のようにZABBIXから監視対象③に対して死活監視を行っている場合、監視対象①または②が死活監視でNGとなったときにトリガー依存関係がどのように機能するのか気になった。

【死活監視経路】
ZABBIX（死活監視）　→　監視対象①　→　監視対象②　→　監視対象③

そこで、以下のZabbix公式ドキュメント「複数の依存関係」に記載されている内容を基に、実際に検証を行った。

[[ZABBIX7.0] - 3 トリガーの依存関係](https://www.zabbix.com/documentation/current/en/manual/config/triggers/dependencies)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/9bf2a61c-9db9-9382-fbf4-052e84fdc1fd.png)

## 検証環境
ZABBIXサーバー１台（ver. 7.0）：
ホスト名：zabbix 

監視対象サーバー３台（エージェント導入済み）：
ホスト名：server1、server2、server3
  
※４台とも同セグメント

死活監視テンプレート（00_Ping_Check）：
[アイテム]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/7238bc11-9d52-18ff-b74f-38c987eb42e0.png)
[トリガー]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/6c2d06c2-3739-c0d1-04b8-dbd3f4270e68.png)

## 検証準備
まず、監視対象サーバー（server1、server2、server3）に対して作成したテンプレートを紐づける。紐づけた後は、以下の対応を行う。

・「server1」のトリガーに対して、依存関係は設定しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/4331b948-1fb2-ec26-a956-93d64dd89cfd.png)
・「server2」のトリガーに対して、依存関係として「server1」のトリガーを設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/7956432d-7a57-afc5-561e-2ff141aebaff.png)
・「server3」のトリガーに対して、依存関係として「server2」のトリガーを設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/0e320347-18d7-6b57-6dde-8c45d11fcd0b.png)

## 検証 ①：[server1：OK] [server2：OK] [server3：NG]
死活監視の状態が「server1：OK」、「server2：OK」、「server3：NG」の場合における
トリガーの発動状況を確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/7fcb2de4-1feb-fc7a-6a48-232bb15ca665.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/dcb1d32f-af7c-3b91-e42b-97c46c847d9d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/2a6352f3-4dd4-f801-bd6f-f67c4151e932.png)

想定通りに「server3」のトリガーが発動した。

## 検証 ②：[server1：OK] [server2：NG] [server3：NG]
死活監視の状態が「server1：OK」、「server2：NG」、「server3：NG」の場合における
トリガーの発動状況を確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/156bafff-73a3-ce90-228d-dd805d09027c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/26ee25fa-ab4f-eabf-6ca0-082b4a4c3025.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/b0faf1bb-889f-f4f0-2367-526d5be4df83.png)

「server2」のトリガーは発動した。しかし、「server3」の死活監視状態がNGであるにもかかわらず、トリガーは発動していない。これは、「server3」のトリガーに「server2」のトリガーを依存関係として設定しているためである。

## 検証 ③：[server1：NG] [server2：NG] [server3：NG]
死活監視の状態が「server1：NG」、「server2：NG」、「server3：NG」の場合における
トリガーの発動状況を確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/9426aad1-1169-543a-0992-a93ae367a4b2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/64847a93-e8e1-fd3e-dd24-635f73702810.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/be460627-2a17-1aeb-7e39-391b3027104e.png)

「server1」のトリガーは発動した。しかし、「server2」と「server3」の死活監視状態がNGであるにもかかわらず、トリガーは発動していない。これは、「server2」のトリガーに「server1」のトリガーを依存関係として設定し、さらに「server3」のトリガーに「server2」のトリガーを依存関係として設定しているためである。


## 検証 ④：[server1：NG] [server2：OK] [server3：NG]
死活監視の状態が「server1：NG」、「server2：OK」、「server3：NG」の場合における
トリガーの発動状況を確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/6102fd1f-6e79-4877-98e5-7ee5c155c5a4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/2ddeac8a-3c54-6a07-007b-e113199d63d8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/f85e9775-1c90-4208-d140-66d9c5ccd8c4.png)

「server1」のトリガーは発動した。しかし、「server3」の死活監視状態がNGであるにもかかわらず、トリガーは発動していない。これは、「server2」のトリガーに「server1」のトリガーを依存関係として設定し、さらに「server3」のトリガーに「server2」のトリガーを依存関係として設定しているためである。

Zabbixはトリガーを発動する際、依存関係を再帰的にチェックする仕組みになっている。そのため、この依存関係の設定により、「server3」のトリガーは結果として発動しなかった。

## 追加検証 
1つのトリガーに複数の依存関係が設定されている場合、どのように動作するのかが気になったため、追加で検証を行うことにした。（依存関係は、「OR」なのか「AND」なのか。）


トリガーの依存関係を下記の通りに設定する。

・「server1」のトリガーに対して、依存関係は設定しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/9bcb2226-5ea0-1175-b1e9-eaf754803bae.png)
・「server2」のトリガーに対して、依存関係は設定しない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/2cd962e4-851c-0702-7d30-d4b49a493553.png)
・「server3」のトリガーに対して、依存関係として「server1」と「server2」のトリガーを設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/c53d9de5-112a-3deb-503c-d5da1df84729.png)

死活監視の状態が「server1：OK」、「server2：NG」、「server3：NG」の場合における
トリガーの発動状況を確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/8b254e0c-88d7-0e89-d667-2cdd3c5e1935.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/18fd34be-3e3f-68be-72ce-90d4b2446e2b.png)

「server2」のみがトリガーを発動した。「server1」の死活監視状態がOKであるにもかかわらず、「server3」のトリガーは発動していない。このことから、複数の依存関係は「OR」条件で動作していることが分かる。

念のため：
[server1：NG] [server2：OK] [server3：NG]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/5e79e4d7-2b1a-7878-ff19-71d3781164c1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/25f6ff7d-b144-01d2-7878-842baed81e43.png)

[server1：NG] [server2：NG] [server3：NG]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/e37480f2-c339-f597-4600-7cb3c04a0598.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/72268b9f-e864-bb31-ecc2-52fe59e76335.png)

[server1：OK] [server2：OK] [server3：NG]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/bbbbcce1-bbd8-a8c6-e44c-dcca363c8f2d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727351/b16c3927-1623-8b8f-afdf-727a541e52de.png)

以上