ZabbixのアラートをLINEに送る
はじめに
ZabbixのアラートをLINEに送信する方法について述べる。
前提条件
- Zabbixのバージョン: 4.4.6
- LINE Notify APiのバージョン: 2019-06-25版
LINE Notify設定
LINE NotifyというLINE公式サービスを使うと、自動的にLINEにメッセージを送信できる。
https://notify-bot.line.me/ja/
LINEのアカウントを持っていれば誰でもログインできる。
ログイン後のトップ画面で「トークンを発行する」ボタンをクリック。
アクセストークンの発行
通知の際に表示される「トークン名」と通知を送信する「トークルーム」を指定する。
このとき、あらかじめトークルームにLINE Notifyを招待しておくこと。招待されていないと通知の送信に失敗する。
トークン設定画面
表示されたトークンは二度と再表示できないので、コピペしておくこと。
設定が完了すると、トップ画面の「連携中サービス一覧」に表示される。
設定完了
Zabbix設定
次にZabbixを設定する。
Zabbixでは通知を送信する単位をメディアと呼び、そのメディアの種類をメディアタイプと呼ぶ。デフォルトのメディアタイプは、Email、Slack、SMSなどがある。今回はこのメディアタイプにLINEを追加する。
しかし、LINEをメディアタイプに追加しただけでは、通知は送信されない。メディアをユーザに追加する必要がある。これにより、そのユーザが管理するホストの通知がLINEに送信されるようになる。
メディアタイプを作る
まず、LINEのメディアタイプを作る。
「管理 > メディアタイプ」 を表示し、右上の「メディアタイプの作成ボタン」をクリック。
パラメータは以下のとおりとする。
名前 | 値 |
---|---|
名前 | Line |
パラメータ/message | {ALERT.SUBJECT} {ALERT.MESSAGE} |
スクリプト | 下記参照 |
try {
Zabbix.Log(4, 'line webhook script value='+value);
var result = {
'tags': {
'endpoint': 'line'
}
},
params = JSON.parse(value),
req = new CurlHttpRequest(),
resp;
// YOUR_TOKENをLINE Notifyで生成したトークンで置き換える。
req.AddHeader('Content-Type: application/x-www-form-urlencoded');
req.AddHeader('Authorization: Bearer YOUR_TOKEN');
resp = req.Post('https://notify-api.line.me/api/notify',
'message='+params.message
);
if (req.Status() != 200 && req.Status() != 400 && req.Status() != 401 && req.Status() != 500) {
throw 'Response code: '+req.Status();
}
resp = JSON.parse(resp);
result.tags.status = resp.status;
result.tags.message = resp.message;
} catch (error) {
Zabbix.Log(4, 'line issue creation failed json : '+JSON.stringify({"fields": fields}));
Zabbix.Log(4, 'line issue creation failed : '+error);
result = {};
}
return JSON.stringify(result);
ユーザにメディアを割り付ける
次に、ユーザにメディアを割り当てる。
「管理 > ユーザー > Admin > メディア」 を表示し、右上の「追加ボタン」をクリック。
以下のパラメータを設定して追加ボタンをクリック。
名前 | 値 |
---|---|
タイプ | Line |
送信先 | something(使わないので何でも良い) |
有効な時間帯 | 1-7,00:00-24:00 |
LINEに通知が来た
こんなかんじでLINEに通知が来た。
Discussion