ZabbixからSlackへ通知を流す
ZabbixのアラートをSlackへ通知する仕組みが欲しくていろいろ調べてたところ
こういう記事を見つけました。
特にZabbixからSlackへちょっとリッチな通知をするに関しては、
リカバリ時にもアラートを飛ばしてくれるようにしてるし、通知もかなりリッチな感じになってるのを見て
こういうのが欲しいなと思い、上記Webページを参考にしながらshellscriptを書いてました。
SlackのIncoming WebHooksを作成する
- URLが貰えるのでそれを控えておく
メディアの設定
- ZabbixのWebコンソールから[管理] → [メディアタイプ]を選択し、[メディアタイプの作成]をクリック
- 名前に[Slack],タイプを[スクリプト],スクリプト名を[slack_notify.sh],[有効]にチェックを入れ追加
- ここで設定したslack_notify.shは作ったスクリプトの名前を記述して下さい
Slackユーザーを作成
- ZabbixのWebコンソールから[管理] → [ユーザ] → [ユーザの作成]
- エイリアスを[Slack],グループを[Zabbix Administrators]に追加
- メディアを[Slack],送信先を[#alert],後は全てにチェックを入れて追加
- 更新
アクションの設定
- ZabbixのWebコンソールから[設定] → [アクション] → [Report problems to Zabbix administrators]を選択
- アクションを以下のように設定
- デフォルトのメッセージとリカバリメッセージは改行してません
- ホントはもうちょい綺麗に書きたいんだけどもshellscript内でメッセージのパースを楽にしたかったのでマクロの間に'\'を入れてます
- デフォルトの件名
** PROBLEM alert - {HOST.NAME} / {TRIGGER.NAME} is CRITICAL **
- デフォルトのメッセージ
HOST: {HOST.NAME} \ TRIGGER_NAME: {TRIGGER.NAME} \ TRIGGER_STATUS: {TRIGGER.STATUS} \ TRIGGER_SEVERITY: {TRIGGER.SEVERITY} \ DATETIME: {DATE} / {TIME} \ ITEM_NAME: {ITEM.NAME1} \ ITEM_KEY: {ITEM.KEY1} \ ITEM_VALUE: {ITEM.VALUE1} \ EVENT_ID: {EVENT.ID} \ TRIGGER_URL: {TRIGGER.URL}
リカバリメッセージにチェックを入れる
復旧通知の件名
** RECOVERY alert - {HOST.NAME} / {TRIGGER.NAME} is OK **
- リカバリメッセージ
HOST: {HOST.NAME} \ TRIGGER_NAME: {TRIGGER.NAME} \ TRIGGER_STATUS: {TRIGGER.STATUS} \ TRIGGER_SEVERITY: {TRIGGER.SEVERITY} \ DATETIME: {DATE} / {TIME} \ ITEM_NAME: {ITEM.NAME1} \ ITEM_KEY: {ITEM.KEY1} \ ITEM_VALUE: {ITEM.VALUE1} \ EVENT_ID: {EVENT.ID} \ TRIGGER_URL: {TRIGGER.URL}
- [更新]
通知スクリプトを配置
- /usr/lib/zabbix/alertscripts/にslack_notify.shをpermission 755で配置 (permissionを間違えるとスクリプトが実行されません)
- プログラムはこちら
という感じでしょうか。
通知スクリプトはZabbixからSlackへちょっとリッチな通知をするのものを参考にカスタマイズさせていただきました。 ステータスバーのカラーバリエーション増やしたり、後はメッセージのパースが上手くいかなかったのでその辺りとか
後は、パースしてる部分なんかあんまり見栄え良くないから その辺もちょい改善できたらやりたいかな。
おわり。