Zabbix + Reactio 連携

Zabbix + Reactio 連携

概要

Reactio の無料化によりその機能が解放され、様々な監視・アラートツールとの連携が可能になりました。
これを機に Zabbix + Reactio 連携したのでまとめました。

Reactio が無料になります

環境

  • Zabbix 3.0
  • CentOS Linux release 7.2.1511 (Core)

Zabbix 3.0 がインストールされ起動されていることを前提とします。

Zabbix 管理画面で Host 設定

※既に設定されている場合はスキップしてください。

Configuration > Hosts > create

  • Host name: Project1

Reactio プロジェクト作成

プロジェクト毎にインシデントを管理します。

https://<Organization ID>.reactio.jp/settings/project

Zabbix 管理画面で設定している Host 名を Project 名とします。

Reactio API 発行

プロジェクト作成ページと同ページ内にある API 項目の 「+」ボタンクリックし API KEY 発行します。

zabbix-reactio インストール

1
2
$ cd /usr/lib/zabbix/alertscripts
$ git clone http://github.com/zabbix-reactio

Zabbix DB 情報 と Reactio で作成した Project と 発行した API KEY を設定ファイルに設定

1
2
$ cd /usr/lib/zabbix/alertscripts/zabbix-reactio
$ vi config.inc
  • db_info に DB 情報設定
  • <Organization ID> 設定
  • Project = API KEY 設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[db_info]
host = <DB Host>
user = <DB user>
pass = <DB pass>
db = <DB name>

[reactio_url]
default = https://<Organization ID>.reactio.jp/api/v1/incidents

[api_key]
Project1 = <Project1's API KEY>
Project2 = <Project2's API KEY>
Project3 = <Project3's API KEY>
...
...

DB カラム追加

  • Zabbix alerts テーブルに Reactio Incident ID カラムを追加します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ cd /usr/lib/zabbix/alertscripts/zabbix-reactio
$ mysql -h <DB Host> -u <DB user> -p<DB pass> <DB name> -e "`cat add_reactioincidentid.sql`"
$ mysql -h <DB Host> -u <DB user> -p<DB pass> <DB name> -e "SHOW COLUMNS FROM alerts"

+---------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------------+------+-----+---------+-------+
| alertid | bigint(20) unsigned | NO | PRI | NULL | |
| actionid | bigint(20) unsigned | NO | MUL | NULL | |
| eventid | bigint(20) unsigned | NO | MUL | NULL | |
| userid | bigint(20) unsigned | YES | MUL | NULL | |
| clock | int(11) | NO | MUL | 0 | |
| mediatypeid | bigint(20) unsigned | YES | MUL | NULL | |
| sendto | varchar(100) | NO | | | |
| subject | varchar(255) | NO | | | |
| message | text | NO | | NULL | |
| status | int(11) | NO | MUL | 0 | |
| retries | int(11) | NO | | 0 | |
| error | varchar(128) | NO | | | |
| esc_step | int(11) | NO | | 0 | |
| alerttype | int(11) | NO | | 0 | |
| reactio_incident_id | int(11) | NO | | 0 | | ← 追加されているのが確認できます
+---------------------+---------------------+------+-----+---------+-------+

Reacito では全てのインシデントは ID で管理されています。
Zabbix で障害アラート通知時に Reactio インシデント作成 API をコールし インシデント ID を保存します。

このインシデント ID は Zabbix で障害回復アラート通知時に Reatio インシデントステータス更新 API をコールする際に利用します。

Zabbix Media types: Reactio 作成

Administration > Media types Create media type ボタンクリック

以下値を入力し Add ボタンクリック

Item Value
Name Reactio
Type Script
Script name zabbix-reactio/reactio.php
Script Parameters 1 {ALERT.SUBJECT}
Script Parameters 2 {ALERT.MESSAGE}

Zabbix Users: Reactio 作成

Administration > Users Create media type ボタンクリック

  • Reactio ユーザ作成
  • Media タブをクリックし Media 情報入力
  • Permission タブをクリックし Zabbix Super Admin 選択
  • Add ボタン クリックし一覧に表示されることを確認

Zabbix Actions: Reactio Notification 作成

Configuration > Actions Create ボタンクリック

  • Action タブ選択し Action 情報入力
Item Value
Name Reactio Notification
Default subject PROBLEM alert - {TRIGGER.NAME} is {TRIGGER.STATUS}
Default message HOST: {HOST.NAME}
TRIGGER_NAME: {TRIGGER.NAME}
TRIGGER_STATUS: {TRIGGER.STATUS}
TRIGGER_SEVERITY: {TRIGGER.SEVERITY}
DATETIME: {DATE} / {TIME}
ITEM_ID: {ITEM.ID1}
ITEM_NAME: {ITEM.NAME1}
ITEM_KEY: {ITEM.KEY1}
ITEM_VALUE: {ITEM.VALUE1}
EVENT_ID: {EVENT.ID}
TRIGGER_URL: {TRIGGER.URL}
Recovery message チェック
Recovery subject RECOVERY alert - {TRIGGER.NAME} is {TRIGGER.STATUS}
Recovery message HOST: {HOST.NAME}
TRIGGER_NAME: {TRIGGER.NAME}
TRIGGER_STATUS: {TRIGGER.STATUS}
TRIGGER_SEVERITY: {TRIGGER.SEVERITY}
DATETIME: {DATE} / {TIME}
ITEM_ID: {ITEM.ID1}
ITEM_NAME: {ITEM.NAME1}
ITEM_KEY: {ITEM.KEY1}
ITEM_VALUE: {ITEM.VALUE1}
EVENT_ID: {EVENT.ID}
TRIGGER_URL: {TRIGGER.URL}
Enabled チェック

以下項目から判断して Reactio API を叩いてます。

  • subject の PROBLEM/RECOVERY
  • HOST: {HOST.NAME}
  • EVENT_ID: {EVENT.ID}

メッセージを整形する場合でも、 上記項目は残しておくようにしてください。

  • Operations タブ選択し Operations 情報入力

以上 Zabbix で Reactio 連携設定完了しました。

実行結果

  • インシデント作成できた!
  • 作成したインシデントのステータスが更新された!

今後

当方、運用し始めです。
障害レベルによってメッセージを変更したりと今後更新検討致します。

是非以下も合わせて Zabbix-Slack 連携もご利用ください。

zabbix3-slack

以上
ご清聴ありがとうございました。