Zabbix アラート通知をSlackで受け取る方法

Zabbixのアラート通知を監視メンバー以外にも受け取ってほしいためSlackと連携させることにしました。

Incoming WebHooksの有効化

slackアプリを起動し、「App」よりIncoming WebHooksを検索します。
すると下記のようにIncoming WebHooksが表示されるので「追加」をクリック
f:id:kyamisama:20200626152841p:plain
ブラウザへリダイレクトされるので「Slackに追加」をクリック
f:id:kyamisama:20200626153105p:plain
チャンネル選択でアラートを通知したいチャンネルを選択する。
チャンネルを作成していない場合は、すぐ下の「新しいチャンネルを作成する」から作成できる。
その後、「Incoming Webhooks インテグレーションの追加」をクリック。
f:id:kyamisama:20200626153147p:plain
WebHooksのURLをコピーしておく
f:id:kyamisama:20200626153528p:plain
色々とカスタマイズが可能だがひとまずページ最下部の「設定保存」をクリックする。

Zabbixでメディアタイプの追加

次にZabbix管理画面にてメディアタイプでSlackを追加する。
「管理」>「メディアタイプ」から「Slack」をクリック。
f:id:kyamisama:20200626153918p:plain
名前は任意でOK
パラーメータは全て削除し下記パラメータを追加する。
名前:text
値:{ALERT.MESSAGE}
スクリプトの右端の鉛筆マークをクリックし、直接スクリプトを編集する。
下記スクリプトのreq.PostのURLをコピーしておいたWebHooks URLに置き換える。
編集できれば「適用」をクリック。

var req = new CurlHttpRequest();
req.AddHeader('Content-Type: application/x-www-form-urlencoded');
 
Zabbix.Log(4, 'webhook request value='+value);
 
req.Post(
  'https://hooks.slack.com/services/******************',
  'payload='+value
);
 
Zabbix.Log(4, 'response code: '+req.Status());
 
return JSON.stringify({
  'tags': {
    'endpoint': 'slack'
  }
});

最後に「更新」をクリック。

Slack通知テスト

メディアタイプ画面でSlackのテストを行う。
「テスト」をクリックする。
f:id:kyamisama:20200626154729p:plain
下記のとおりSlackで通知されれば連携OKである。
f:id:kyamisama:20200626154923p:plain