Zabbix を使ったサーバー監視 (3) - チャットワークへの通知
(前回の記事: Zabbix を使ったサーバー監視 (2) - Nginx の監視) 前回は Zabbix で監視対象のサーバーの Nginx が落ちたことを検知する方法について書きました。 今回は、Zabbix で障害を検知したときにチャットワークにアラートメッセージを送る方法を紹介します。 Zabbix には、外部のSMTPサーバーを使ってアラートメールを送信する機能が最初からありますが、そのほかに、サーバー内部のスクリプトを使ってアラートを送信することもできます。今回は、そのようなスクリプトを使って、障害発生時にチャットワークにアラートメッセージを投稿してみます。 ...
(前回の記事: Zabbix を使ったサーバー監視 (2) - Nginx の監視)
前回は Zabbix で監視対象のサーバーの Nginx が落ちたことを検知する方法について書きました。
今回は、Zabbix で障害を検知したときにチャットワークにアラートメッセージを送る方法を紹介します。
Zabbix には、外部のSMTPサーバーを使ってアラートメールを送信する機能が最初からありますが、そのほかに、サーバー内部のスクリプトを使ってアラートを送信することもできます。今回は、そのようなスクリプトを使って、障害発生時にチャットワークにアラートメッセージを投稿してみます。
スクリプトの配置
まず、zabbix-server内で、スクリプトを配置すべき場所を調べましょう。
zabbix_server.conf を AlertScriptsPath で 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 に移動します。
次に、Create media type ボタンを押して、新しいメディアタイプを作成します。以下のように入力してください。
(※ 追記: 2017/4/27)Zabbix 3.0 では以下のように、{ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE} のように明示的にパラメーターを入力するようになりました。これらは次のステップで必要になります。
保存すると、一覧画面に戻ります。そこに chatwork という新しいメディアタイプが追加されています。
Administration -> Users で任意の管理者ユーザー(ここでは Admin)を選択し、Media の設定画面に行きます。
"Add" リンクをクリックして、新規作成画面に行きます。フォームには以下のように入力してください。send to には、チャットワークの通知に使いたい部屋のIDを指定してください。これがさきほど作成したのスクリプトの${1}に入る値となります。 (※ 追記: 2017/4/27)Zabbix 3.0 では、前のステップで Script parameters に指定した順に ${1}, ${2}, ${3}... とアサインされます)
新しいメディアを作成したあとに、Updateボタンを押すのを忘れないようにしてください。
次は、Cofiguration -> Actions の画面に行き、 Report problems to Zabbix administrators を選択してください。
以下のように入力します。Conditions なども設定できますが、今回はしません。
動作確認
それでは、web-server の Nginx を stop して、実際にチャットワークに通知されるかを確かめてみましょう。
root# service nginx stop
チャットワークに以下のようなメッセージが投稿されます。
次は、Nginx を start してみましょう。
root# service nginx start
以下のようなメッセージが投稿されます。
うまく投稿されない場合には、以下をチェックしてみてください。
- Administration -> Audit の Action Log
- Zabbixサーバー内で直接 /usr/lib/zabbix/alertscripts/chatwork a b c を実行したときの出力
アラートとして送るメッセージに To などの情報も書いておくことで、障害発生時に特定の人に通知することもできます。工夫次第でどんどん便利になるので、いろいろ試してみてください。