背景
ちょっと前にLINE NotifyというLINEのサービスが話題になりました。 developers.linecorp.com
これを使うと非常に簡単にシステムからLINEにメッセージを送れるのですが、Zabbixのような監視サーバのアラートをLINEに送るっていう使い方は結構需要があるのではないかと思い、LINE Notifyを使ってZabbixのアラートを送るalertscriptを実装してみました。
前準備
最初にLINE Notifyの設定をする必要があります。
下記のページにアクセスし、LINEのIDでログインすると「トークンを発行する」ボタンがあります。
https://notify-bot.line.me/my/
トークンを取得し、どこかにメモしておいてください。
Zabbixの設定
詳しく知りたい方は公式ドキュメントを参照してください。 5 Custom alertscripts [Zabbix Documentation 3.0]
alertscriptの配置
トークンとメッセージのタイトル、メッセージの内容を引数に取るスクリプトを作成し、/usr/lib/zabbix/alertscripts
に配置します。
LINE Notifyとの通信にはcurlを使います。詳しくは以下のサイトを参照してください。
- コマンドラインから LINE にメッセージを送れる LINE Notify « LINE Engineers' Blog
- https://notify-bot.line.me/static/pdf/line-notify-api_ja.pdf
以下はスクリプトのサンプルです。
curlからのレスポンスをjqで読み取って終了ステータスをきちんと返すようにしましたが、Zabbixは終了ステータスを見てくれないみたいです。。
#!/bin/bash token="$1" subject="$2" body="$3" LINE_API_URI='https://notify-api.line.me/api/notify' LOG_FILE=${0%.*}.log function write-log() { echo "$(date '+%Y/%m/%d %H:%M:%S') $1" | tee -a ${LOG_FILE} } write-log "token=${token}" write-log "subject=${subject}" write-log "body=${body}" if [ -n "${subject}" ] && [ -n "${body}" ]; then message=\ "${subject} ${body}" elif [ -n "${subject}" ] || [ -n "${body}" ]; then message="${subject}${body}" else exit 1 fi cmd="curl -X POST -H 'Authorization: Bearer ${token}' -F 'message=${message}' ${LINE_API_URI}" write-log "executing: ${cmd}" response=$(eval "${cmd}" | jq -Mc ". + {"exit_code": $?}") write-log "response: ${response}" exit_code=$(echo "${response}" | jq -Mc '.exit_code') response_status=$(echo "${response}" | jq -Mc '.status') response_message=$(echo "${response}" | jq -Mc '.message') if [ ${exit_code} -gt 0 ]; then exit ${exit_code} fi if [ ${response_status} -ne 200 ]; then echo "status : ${response_status}" echo "message: ${response_message}" exit 1 fi exit 0
メディアタイプにカスタムスクリプトを登録
- Zabbixにブラウザでアクセスし、[管理] - [メディアタイプ] を開き、[メディアタイプの作成]をクリックします。
- 以下のように項目を入力し、[追加]ボタンを押します。
項目 | 入力値 | 説明 |
---|---|---|
名前 | LINE Notify | メディアタイプの名前 |
タイプ | スクリプト | |
スクリプト名 | line_notify.sh | alertscriptフォルダ配下のスクリプトのファイル名 |
スクリプトパラメータ | {ALERT.SENDTO} | 第一引数。ユーザ設定で送信先に指定した値が入る。 |
{ALERT.SUBJECT} | 第二引数。メッセージのタイトル。 | |
{ALERT.MESSAGE} | 第三引数。メッセージの内容。 |
ユーザーの設定
- Zabbixで[管理] - [ユーザー]を開き、LINE Notifyで通知を送りたいユーザーの設定画面を開きます。
- [メディア]タブを開き、[追加]をクリックします。
- [タイプ]に新しく追加したメディアタイプの名前を指定します。
[送信先]にLINE Notifyのトークンを指定します。 その他の項目は適宜設定してください。 - 更新ボタンをクリックします。
後はアクション等の設定が入っていれば、これでLINEに通知が行くようになっているはずです。
まとめ
ZabbixのアラートをLINEに飛ばす方法でした。
私が以前勤めていた会社では携帯にメールで飛ばす感じだったんですが、今の世の中だとLINEに送ったほうがやりやすい職場も多いのではないかと思います。そのうちLINE Business Centerを使ったやり方も試してみたいです。