Zabbix4.4 webhook 連携
久しぶりにZabbixを構築する機会があったので, Zabbix4.4を使ってみました。
なんと通知方法にwebhookが選択できるようになってたんです!
これでスクリプトをディレクトリに下に置いてみたいなことをしなくてもzabbix内で完結することができるようになりました。
https://www.zabbix.com/documentation/current/manual/config/notifications/media/webhook
公式サイトにあるものをコピペすれば, actionにある通りのものがslackへ通知されるんですが, メッセージが届くだけで通知としてわかりずらく記事もあまりなかったのでめもしとこって感じです。
参考サイト
https://blog.apar.jp/zabbix/13116/
通知の設定の仕方は参考サイトのとおりです。
ここから少し通知わかりやすくする手順です。
用意したパラメータとコードです。
params = JSON.parse(value) var req = new CurlHttpRequest(); req.AddHeader('Content-Type: application/x-www-form-urlencoded'); Zabbix.Log(4, 'webhook request value='+value); attachments = [] if (params.subject.indexOf("Resolved:") === 0) { attachments.push({ "color": "#00FF00", "blocks": [ {"type": "section","text": {"type": "mrkdwn","text": "*Resolved:*"}},{"type": "divider"},{"type": "section", "text": {"type": "mrkdwn", "text": params.text}} ]}); } else { attachments.push({ "color": "#FF0000", "blocks": [ {"type": "section","text": {"type": "mrkdwn","text": "*Problem:*"}},{"type": "divider"},{"type": "section", "text": {"type": "mrkdwn", "text": params.text}} ]}); } payload={} payload.text = "" payload.blocks = [] payload.attachments = attachments req.Post( 'https://hooks.slack.com/services/********************************', 'payload='+JSON.stringify(payload) ); Zabbix.Log(4, 'response code: '+req.Status()); return JSON.stringify({ 'tags': { 'endpoint': 'slack' } });
ちゃんと綺麗に書くべきなんですが, とりあえずで(笑)
ALERT.SUBJECTを条件に分岐させて, バーの色を変えて視覚的にアラートか復帰かを判断できるようにしました。
色でわかるようにしてもメッセージでアラートか復帰かがわかりずらかったので, SUBJECTを切り取って頭に持っていきました。
下の写真がテストをした時のものになります。(設定間違っててProblemが緑になってます...)
実際のalert だとアラートメッセージが表示されます。
基本的にはSlack の blocks 芸なので凝ろうと思うとどこまでもやってしまいそうです(笑)
このサイトを頼りに整合性を取りながら作ってました