Zabbix でアラートが発生したときに Pigeon で電話がかかるように設定する

Pigeon は複数人のチームに対して、誰かから応答があるまで電話連絡を順番に行うサービスです。
想定される主な使い方として、サービスを監視しているツールでアラートを検知した際に、このアラートをトリガーに Pigeon を呼び出して担当者に電話連絡をし、迅速に障害対応を行えるようにする、というものがあります。

ここでは、代表的な監視ツールの1つである Zabbix を例にとって、アラートを検知した際に Pigeon で電話がかかるように設定する方法をご紹介します。

環境

本ツールは、以下のツールおよびバージョンを使用しております。
ご使用のバージョンにより、設定方法が微妙に異なる箇所がありますので、ご注意ください。

  • Ubuntu 18.04
    • ZabbixがインストールされているOS
  • Zabbix 4.0

Pigeonの設定

まず、Pigeon でコールフローとガイダンスを作成します。
Pigeon の設定方法については、Pigeon チュートリアル 記事で詳しく記載していますので、そちらをご覧ください。

ガイダンスのメッセージには、以下のようなテキストを設定しておきます。

Zabbixでアラートが発生しました。
アラート発生ホスト、{{host}}。 アラート内容、{{message}}。
 対応される場合は1を、次の担当者に連絡する場合は2を、連絡から離脱する場合は3を、押してください。

設定ができたら、コールフロー ID とガイダンス ID を保存しておいてください。
コールフロー ID とガイダンス ID は、それぞれ Kompira cloud の以下の画面で確認することができます。
ID はそれぞれクリックするとコピーできます。

コールフローID 

ガイダンスID

スクリプトの配置

Pigeon で API から電話をかけるには、 [POST] /api/apps/pigeon/chain/invoke を使用します。
以下のスクリプト pigeon_call.sh は、必要なパラメータを設定した上でこの API を呼び出すものです。
これを /usr/lib/zabbix/alertscripts/pigeon_call.sh として、Zabbix ホスト上に保存しましょう。

#!/bin/bash
# Usage: pigeon_call.sh [call_parameters]

# Kompira cloud Space URL
SPACE_URL=https://yourspacename.cloud.kompira.jp

# Kompira cloud API Token
API_TOKEN=wJu1jij8GeccVVkTOzy8xWH5N2ugKWDWM+HcaV0J

# Pigeon / Callflow ID
CALLFLOW_ID=9b020603-a477-44fb-ac4b-67790b14bfec

# Pigeon / Guidance ID
GUIDANCE_ID=408e47e2-ceb2-4cc9-8a55-778782eebc7a

if [ -n "$1" ]; then
  CALL_PARAMETERS="$1"
else
  CALL_PARAMETERS={}
fi

INVOKE_URL=${SPACE_URL}/api/apps/pigeon/chain/invoke
PAYLOAD="{
  \"params\": {
    \"callflowId\": \"${CALLFLOW_ID}\",
    \"guidanceId\": \"${GUIDANCE_ID}\",
    \"parameters\": ${CALL_PARAMETERS}
  }
}"

curl -s -X POST -H "accept: application/json" -H "X-Api-Version: 1.0" -H "X-Authorization: Token ${API_TOKEN}" "${INVOKE_URL}" -d "${PAYLOAD}"

このスクリプトのうち、以下の値はご使用の環境にあわせて編集してください。

  • SPACE_URL
  • API_TOKEN
  • CALLFLOW_ID
  • GUIDANCE_ID

Zabbixの設定

Zabbix の Configurations -> Actions -> Create Action と選択することで、新しい Action を作成することができます。
この Action で、Zabbix がある条件を満たしたときに pigeon_call.sh が実行されるように設定します。

Action で Operation を設定します。 

 Opreation の内容を設定します。
Operationの設定では各項目を以下のようにします。

項目設定内容
Operation typeRemote command
Target listCurrent host
TypeCustom script
Execute onZabbix server
Commands/usr/lib/zabbix/alertscripts/pigeon_call.sh '{"host": "{HOST.NAME1}", "message": "{ITEM.NAME1}"}'

ここでは、実行するコマンドとしてホスト名 {HOST.NAME1} とトリガーのアイテム名 {ITEM.NAME1} を指定しています。
その他にもここでは様々なマクロを設定することができます。

今回は Zabbix 4.0 を検証に使用していますが、バージョンごとに指定できるマクロの種類・指定の名前が異なります。 詳しくは 公式ドキュメント を参照してください。

架電テスト

ここまでで、Zabbix で条件が満たされると Pigeon に通知が飛ぶように設定することができました。

この状態で Action の条件を満たすと、Zabbix 上では先ほど設定した pigeon_call.sh を実行され、Pigeon で登録した電話番号に電話がかかってきます。

上記の画面でもわかる通り、Status = Executed となっており、スクリプトが実行されていることがわかります。
また、Pigeon では架電履歴を以下のように確認することができます。

一番下の「パラメータ」では、API実行時に指定したパラメータを確認することができます。
今回の設定では、Action 実行時のコマンドに host と message を渡しているので上記のようになっていますが、設定すれば他にも任意の key, value を渡すことができます。

まとめ

ここまで見てきたように、Pigeon を利用することで、障害発生時の自動電話連絡を簡単に設定することができます。
現在はサービス運用でメール通知しかしていないけれど、電話通知がしたい。でも電話通知をするのは結構大変そう・・・と考えている方は、ぜひ導入をご検討ください。

TOP