Edited at

Zabbix3.0から追加されたパラメータを使ってSlackに通知を送る

More than 1 year has passed since last update.

*2017/09/16 表示されていない画像を修正

Zabbixのアラート通知はメールで行っていたが、

Slackに部屋を立てて、そこへ通知するように設定することにした。

image

関連リソースに挙げているサイトに従っていろいろやってみたものの

思うように動かないので、結局自分でごにょごにょやった結果をメモしておくことにした。


前提


  • CentOS Linux release 7.2.1511

  • Zabbix 3.01


手順


アラートスクリプトの置き場所を確認する

[root@jumps alertscripts]# grep AlertScripts /etc/zabbix/zabbix_server.conf

# AlertScriptsPath=${datadir}/zabbix/alertscripts
AlertScriptsPath=/usr/lib/zabbix/alertscripts


Zabbixがスクリプトを利用してアラートを通知するように設定する


Media Types

画像のように設定。

280a2f4f-6a0a-9c4a-e9c3-409d4e7825ea.png

Script Parametersについてはこちらを参照。

設定したパラメータがスクリプトの引数として渡される仕組みらしい。次のようになる。

/usr/lib/zabbix/alertscripts/slack.sh {ALERT.SUBJECT} {ALERT.MESSAGE}


ユーザの作成

ユーザslackさんの権限で見える範囲のアラートは、Script:Slackを利用して通知されるように指定する。

70d09945-0279-97ba-fd9b-9032fbac9bc6.png

Send toは今回は使用されないが、必須らしいので適当にChannel名を入れる。


Actionの設定

各ホストでチェックしているTriggerがHitしたときにこのActionが動く。

つまり、何かアラートが発生したにどうするかを指定する。

今回は ユーザ:slackにメッセージを送ると設定する。

0d1a87f7-1590-3190-a27e-98ea6999a35a.png

4dab27e1-457b-ea9e-c3fd-b09efc766be6.png

cf123126-ac69-7136-4f08-2b0968c9a8c5.png


Slack側の設定


zabbix部屋を作る

CHANNELSの右にある + からあっさり作成できるので割愛する


Webhookを設定する

Team Settingから適当に探してポチポチして次のような画面に進み、Webhook URLを取得。

image

/usr/share/zabbix/favicon.icoをpngにして利用。ちょっとボケる。


スクリプトの作成

細かい整形はめんどくさいので、通知されるときに色だけ変わるように指定する。

色はデフォルトで3つ用意されているらしい。

ce980e10-b465-a2f4-18e0-ffd67b27ed9c.png

*2016/03/30 追記

SNMP-TrapのMessageの中に入っている"(ダブルクォート)がJSONと相性悪いらしいので消す行を追加した

*2017/09/14 追記

slack側の変更があったようで使えなくなっていたため、attachmentsの書き方を修正した

scriptの中身はこちら

https://github.com/tdkaoru/zabbix

出来上がった通知が記事の一番上に表示している画像。

channelはWebhook URLで指定済みなので不要だった。

ちなみに、attachmentsを使わずにメッセージを素でだすと、次のようになる。

image


その他

スクリプトの中では{ALERT.MESSAGE}の整形をやっていないので、ActionのDefault Messageを編集して必要な情報だけとるようにする。

*2016/03/23追記

参考までに、編集したものも貼っておく。


DefaultMessage

Date: {EVENT.DATE}  {EVENT.TIME} 

Description: {TRIGGER.NAME}
Hostname: {HOST.NAME1}
IP address: {HOST.IP1}
Severity: {TRIGGER.SEVERITY}

Item values: {ITEM.NAME1}: {ITEM.VALUE1}

Original event ID: {EVENT.ID}



RecoveryMessage

Date: {EVENT.RECOVERY.DATE}  {EVENT.RECOVERY.TIME}

Description: {TRIGGER.NAME}
Hostname: {HOST.NAME1}
IP address: {HOST.IP1}

Item values: {ITEM.NAME1}: {ITEM.VALUE1}

Original event ID: {EVENT.ID}


image

Zabbix 3.0だとOriginal event IDが同じにならない(?)為にRecoveryMessageが使われないようだ。謎


関連リソース