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

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

Zabbixのアラート通知はメールで行っていたが、
Slackに部屋を立てて、そこへ通知するように設定することにした。

![image](https://qiita-image-store.s3.amazonaws.com/0/69745/63e5c87a-1886-7fc9-fcd1-96f4cb83a6d0.png)


関連リソースに挙げているサイトに従っていろいろやってみたものの
思うように動かないので、結局自分でごにょごにょやった結果をメモしておくことにした。


# 前提
- 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](https://qiita-image-store.s3.amazonaws.com/0/69745/3cc05db2-fdda-f055-5e24-85542364417a.png)

Script Parametersについては[こちら](https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location)を参照。

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

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

### ユーザの作成
ユーザslackさんの権限で見える範囲のアラートは、Script：Slackを利用して通知されるように指定する。
![70d09945-0279-97ba-fd9b-9032fbac9bc6.png](https://qiita-image-store.s3.amazonaws.com/0/69745/62231b83-c822-ed5a-bd21-1177af0e778a.png)


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

### Actionの設定
各ホストでチェックしているTriggerがHitしたときにこのActionが動く。
つまり、何かアラートが発生したにどうするかを指定する。
今回は　ユーザ：slackにメッセージを送ると設定する。


![0d1a87f7-1590-3190-a27e-98ea6999a35a.png](https://qiita-image-store.s3.amazonaws.com/0/69745/d84552b7-9a88-9733-c3fb-9d07663852d9.png)

![4dab27e1-457b-ea9e-c3fd-b09efc766be6.png](https://qiita-image-store.s3.amazonaws.com/0/69745/54d7cc93-c528-5e35-5c54-a33e7a791276.png)

![cf123126-ac69-7136-4f08-2b0968c9a8c5.png](https://qiita-image-store.s3.amazonaws.com/0/69745/d7403654-5cea-21b9-4e2b-2a89a91a436f.png)


## Slack側の設定
### zabbix部屋を作る
CHANNELSの右にある + からあっさり作成できるので割愛する

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

![image](https://qiita-image-store.s3.amazonaws.com/0/69745/21557e60-01ef-ef07-ae4d-4f6077b9e41c.png)


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


## スクリプトの作成
細かい整形はめんどくさいので、通知されるときに色だけ変わるように指定する。
色はデフォルトで3つ用意されているらしい。
![ce980e10-b465-a2f4-18e0-ffd67b27ed9c.png](https://qiita-image-store.s3.amazonaws.com/0/69745/bf0dce27-a647-e398-bc72-e24f132b79a5.png)


*2016/03/30 追記 
SNMP-TrapのMessageの中に入っている"（ダブルクォート）がJSONと相性悪いらしいので消す行を追加した

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

scriptの中身はこちら
https://github.com/tdkaoru/zabbix


出来上がった通知が記事の一番上に表示している画像。
``channel``はWebhook URLで指定済みなので不要だった。
ちなみに、``attachments``を使わずにメッセージを素でだすと、次のようになる。
![image](https://qiita-image-store.s3.amazonaws.com/0/69745/15c9f9b4-d016-8e6f-c0e4-91046d5b51ad.png)



#その他
スクリプトの中では``{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](https://qiita-image-store.s3.amazonaws.com/0/69745/98d2670f-30fd-733c-0f78-0d0425b5c12d.png)

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

# 関連リソース
- [ZabbixからSlackに通知を送る](http://qiita.com/takashyx/items/3c9becf345cd58ca69bf)
- [ZabbixからSlackへちょっとリッチな通知をする](http://qiita.com/bageljp@github/items/20be937ca3bb92100e8f)
- https://github.com/ericoc/zabbix-slack-alertscript
- https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location
- https://api.slack.com/docs/attachments