nemunemu_zzzの日記

備忘録的な何かになればいいな

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/

 

通知の設定の仕方は参考サイトのとおりです。

 

ここから少し通知わかりやすくする手順です。

用意したパラメータとコードです。

f:id:nemunemu_zzz:20191127004928p:plain

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 だとアラートメッセージが表示されます。

f:id:nemunemu_zzz:20191127010254p:plain

 

基本的にはSlack の blocks 芸なので凝ろうと思うとどこまでもやってしまいそうです(笑)

このサイトを頼りに整合性を取りながら作ってました

block-kit-builder