読者です 読者をやめる 読者になる 読者になる

長生村本郷Engineers'Blog

千葉県長生村本郷育ちのエンジニアが書いているブログ

Zabbix + Reactio 連携

Zabbix Reactio

概要

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

Reactioが無料になります

環境

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

Zabbix 管理画面で Host 設定

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

Configuration > Hosts > create

  • Host name: Project1

Reactio プロジェクト作成

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

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

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

Imgur

Reactio API 発行

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

Imgur

Imgur

zabbix-reactio インストール

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

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

$ cd /usr/lib/zabbix/alertscripts/zabbix-reactio
$ vi config.inc
  • db_info に DB 情報設定
  • <Organization ID> 設定
  • Project = API KEY 設定
[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 カラムを追加します。
$ 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 連携設定完了しました。

実行結果

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

Imgur

今後

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

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

zabbix3-slack

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