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 type | Remote command |
Target list | Current host |
Type | Custom script |
Execute on | Zabbix 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 を利用することで、障害発生時の自動電話連絡を簡単に設定することができます。
現在はサービス運用でメール通知しかしていないけれど、電話通知がしたい。でも電話通知をするのは結構大変そう・・・と考えている方は、ぜひ導入をご検討ください。