【Zabbix 3.2 新機能】イベントタグ・イベント相関関係を使ってサービス志向の監視！

2016年9月14日にリリースされたZabbix3.2の一つの目玉機能として、

* ***イベントへのタグ付け***
* ***イベント相関関係***

がリリースされました。
これらの機能により、これまでの単純な監視アイテムに対してトリガー条件式を設定して障害検知するだけでなく、Zabbixで発生するイベント情報に対して関連を持たせて検知ができるようになります。

# イベントへのタグ付け機能

3.2からはZabbixのトリガーで検知して発生したイベントに対してタグをつけるということができるようになっています。

タグはトリガーの設定にて定義することができます。
トリガーの設定にタグを定義することで、このトリガーを起因として発生したイベント(障害・復旧)に自動的にタグが付与され管理されることになります。
タグはKeyとValueのセットで扱うことができます。

例えば、以下のような感じで設定できます。

![zabbix-event-tag1.png](https://qiita-image-store.s3.amazonaws.com/0/45851/a7ca378c-88c3-d970-df51-c3d341fcc608.png)



このトリガーはどういったサービスに影響があるものなのか、どういったエリアに影響があるものなのか、どういった類いのものなのかなど障害イベントが発生した際にすぐにどういう影響があるのか判断できるような内容をタグに設定すると良いと思います。

## タグの活用

このようにトリガーに設定したタグ定義は、実際に障害イベントや復旧イベントが発生すると図のように障害イベント確認ページの各イベントにタグ付けされて表示されます。

![zabbix-event-tag2.png](https://qiita-image-store.s3.amazonaws.com/0/45851/ad594223-d856-891a-5e79-3a4c5c7aae54.png)


さらにこのページ上のフィルタリング項目にタグの情報をもとに絞りこめる機能もついているので特定のタグが付いたイベントの情報をすばやく調べることが可能です。

![zabbix-event-tag3.png](https://qiita-image-store.s3.amazonaws.com/0/45851/a7ce5ed5-d3c9-5161-5687-e42d4f61b51f.png)


さらに、アクションの設定にて、タグの情報をもとにしたアクション実行条件の指定ができるようになっています。

![zabbix-event-tag4.png](https://qiita-image-store.s3.amazonaws.com/0/45851/546fc271-9338-36ce-5317-8a594ad6fc08.png)


これにより、例えば、

* Serviceタグの値がService-Aのイベントが発生した場合にはこの担当者宛に連絡
* Areaタグの値が東京のイベントが発生した場合には東京地区のサービスの担当者宛に連絡

といったアクションの実行条件の振り分けが簡単にできるようになります。
これまでも、ホストグループ名やホスト名、トリガー名等を工夫することで似たようなことを実現することができましたが、イベントに直接タグ付けできるようになったことでさらに柔軟性が増したと言えます。

# イベント相関関係機能

タグ付けすることで上記のようなサービス志向に沿った管理ができるようになっています。
さらにイベント相関関係の機能を使うことで様々な状況に対応できるようになります。

イベント相関関係とは、先程のイベントに付与されたタグおよびタグの値をベースにして、イベントの障害・復旧を関連付けて扱えることができるようにする機能です。

例えば、以下のようなログ監視のシーンを想定します。

```sample.log
2016-11-28 20:52:11 [warn] eth0 down
2016-11-28 20:52:12 [warn] eth1 down
2016-11-28 21:12:10 [info] eth0 up
```

このようなログに対して、以下のようなアイテムを設定し、ログ監視していたとします。

* アイテムキー: log[/path/sample.log]

するとこのログ監視アイテムの監視結果としては上記のログの各行が登録されます。

![zabbix-event-1.png](https://qiita-image-store.s3.amazonaws.com/0/45851/883f301d-05a8-946b-ec1d-d91c40840a85.png)


これまでのトリガー設定方法だと、このログ監視結果の中にある特定の文字列が含まれていれば障害とみなすといったような設定しかできませんでした。
しかし、このイベント相関関係の機能を使うことで例えば上記の例であれば、eth0のdownを検知したあと、eth0がupしたことを検知して復旧とみなすといったことが設定できるようになります。

この機能を使う場合に重要なのがイベントへのタグ設定です。
例えば、上記のログ監視の結果に対して以下のようなトリガー設定を行います。

* トリガー条件式: {hostname:log[/path/sample.log].regexp()}=1
* タグ
    * Key:　NIC、Value：{{ITEM.VALUE1}.iregsub("^.*\s.*\s.*\s(.*)\s(.*)",\1)}
    * Key:State、Value：{{ITEM.VALUE1}.iregsub("^.*\s.*\s.*\s(.*)\s(.*)",\2)}

このような設定にすることで、ログが出力されると以下のようなイベントがタグ付された上で発生します。
上の設定を見てわかるとおり、タグのValueには監視結果の中身を正規表現で抽出した値を設定することができます。この設定方法により、タグのValueを監視結果に応じて動的に設定することが可能となります。

![zabbix-event-2.png](https://qiita-image-store.s3.amazonaws.com/0/45851/d846d7c5-b0c6-5fe5-76a1-f9c1694c0257.png)

## イベント相関関係設定

[設定]→[イベント相関関係]から、***相関関係の作成***より定義を作成します。
ルールを実行する条件とその条件に合致したときに実行する内容を定義します。

条件についてはタグのKeyやValueの値の内容に対して定義します。
例えば、上で例示したNICのdown/upの場合、条件としては以下のように設定します。
なお、ここで実施したい挙動としては、NICの種類が一致して、Stateがdown→upになった際に該当のイベントをクローズ(つまり復旧したとみなす)することです。

[実行条件の設定]
![zabbix-event-3.png](https://qiita-image-store.s3.amazonaws.com/0/45851/e69d889c-f290-5d7a-2f0f-e94c88b49dde.png)

[実行内容の設定]
![zabbix-event-4.png](https://qiita-image-store.s3.amazonaws.com/0/45851/0d3e7083-2d2a-3bc8-4a2e-206c2c054fc7.png)


[先程と同様のログが出力されたときのイベントの状態]
![zabbix-event-6.png](https://qiita-image-store.s3.amazonaws.com/0/45851/2d2e1fb9-5167-f102-38c5-05dddb3db034.png)

イベントの状態を見ると、eth0のdownの検知で発生したイベントのみが、eth0のupの検知で発生したイベントで復旧していることがわかります。

今回は、１つのログ監視のアイテムを例として紹介しましたが、このイベント相関関係は特定のトリガーに紐づくイベントのみの相関関係を示すのではなく、Zabbixで検知するイベント全体に渡って適用されるため、あるトリガーに紐付いて発生するイベントと、別のトリガーに紐付いて発生するイベントを相関関係を作って管理することが可能になります。
これにより、ホストに対するトリガーによる障害検知・復旧だけでなく、タグベースで障害発生・復旧の管理ができ、ホストベースよりももう少し上位のレイヤであるサービスベースでのイベント管理が可能となります。

# まとめ

イベントへのタグ付けやイベントの相関関係設定によりますますサービスの実体にあわせたイベント管理ができるようになると思います。ただし、これまでと少し考え方も異なり、かつ設定方法も複雑になっています。その点利用の際には十分に注意が必要です。
また、Zabbix3.2はLTS版(長期サポート版)ではないので、サポートが必要な場合には注意が必要です。


明日はqryuuさんによる統計学のお話！よろしくお願いします！！！