Zabbix を使ったサーバー監視 (3) - チャットワークへの通知

(前回の記事: Zabbix を使ったサーバー監視 (2) - Nginx の監視)

前回は Zabbix で監視対象のサーバーの Nginx が落ちたことを検知する方法について書きました。

今回は、Zabbix で障害を検知したときにチャットワークにアラートメッセージを送る方法を紹介します。

Zabbix には、外部のSMTPサーバーを使ってアラートメールを送信する機能が最初からありますが、そのほかに、サーバー内部のスクリプトを使ってアラートを送信することもできます。今回は、そのようなスクリプトを使って、障害発生時にチャットワークにアラートメッセージを投稿してみます。

スクリプトの配置

まず、zabbix-server内で、スクリプトを配置すべき場所を調べましょう。

zabbix_server.confAlertScriptsPath で grep すると、アラートのためのスクリプトを配置すべきディレクトリのパスが分かります。ここでは /usr/lib/zabbix/alertscripts となっています。

root# grep "AlertScriptsPath" /etc/zabbix/zabbix_server.conf
### Option: AlertScriptsPath
# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts

そのディレクトリにチャットワークに投稿するスクリプトを配置します。

root# vim /usr/lib/zabbix/alertscripts/chatwork

今回は、以下のようなスクリプトを作成しました(YOUR_TOKEN を自分のAPIトークンなどに置き換えてください)。

#!/bin/sh

TOKEN="YOUR_TOKEN"
ENDPOINT="https://api.chatwork.com/v1/rooms/${1}/messages"
SUBJECT=${2}
MESSAGE=${3}

/usr/bin/curl -X POST -H "X-ChatWorkToken: ${TOKEN}" -d "body=[info][title]${SUBJECT}[/title]${MESSAGE}[/info]" ${ENDPOINT}

作成したら、実行権限をつけます。

root# chmod 755 /usr/lib/zabbix/alertscripts/chatwork

これでスクリプトの設置は完了です。

管理画面での設定

次に Zabbix の Web管理画面での設定をしましょう。 まず、Administration -> Media Type に移動します。

スクリーンショット 2015-05-20 11.40.27.png

次に、Create media type ボタンを押して、新しいメディアタイプを作成します。以下のように入力してください。

スクリーンショット 2015-05-20 11.41.10.png

(※ 追記: 2017/4/27)Zabbix 3.0 では以下のように、{ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE} のように明示的にパラメーターを入力するようになりました。これらは次のステップで必要になります。

保存すると、一覧画面に戻ります。そこに chatwork という新しいメディアタイプが追加されています。

スクリーンショット 2015-05-20 11.41.16.png

Administration -> Users で任意の管理者ユーザー(ここでは Admin)を選択し、Media の設定画面に行きます。

スクリーンショット 2015-05-20 11.41.22.png

"Add" リンクをクリックして、新規作成画面に行きます。フォームには以下のように入力してください。send to には、チャットワークの通知に使いたい部屋のIDを指定してください。これがさきほど作成したのスクリプトの${1}に入る値となります。 (※ 追記: 2017/4/27)Zabbix 3.0 では、前のステップで Script parameters に指定した順に ${1}, ${2}, ${3}... とアサインされます)

スクリーンショット 2015-05-27 8.06.57.png

新しいメディアを作成したあとに、Updateボタンを押すのを忘れないようにしてください。

スクリーンショット 2015-05-20 11.43.09.png

次は、Cofiguration -> Actions の画面に行き、 Report problems to Zabbix administrators を選択してください。

スクリーンショット 2015-05-20 11.43.50.png

以下のように入力します。Conditions なども設定できますが、今回はしません。

スクリーンショット 2015-05-20 12.05.21.png

動作確認

それでは、web-server の Nginx を stop して、実際にチャットワークに通知されるかを確かめてみましょう。

root# service nginx stop

チャットワークに以下のようなメッセージが投稿されます。

スクリーンショット 2015-05-27 11.46.05.png

次は、Nginx を start してみましょう。

root# service nginx start

以下のようなメッセージが投稿されます。

スクリーンショット 2015-05-27 11.46.28.png

うまく投稿されない場合には、以下をチェックしてみてください。

  • Administration -> Audit の Action Log
  • Zabbixサーバー内で直接 /usr/lib/zabbix/alertscripts/chatwork a b c を実行したときの出力

アラートとして送るメッセージに To などの情報も書いておくことで、障害発生時に特定の人に通知することもできます。工夫次第でどんどん便利になるので、いろいろ試してみてください。