Zabbix 4.4 ではメディアタイプ(障害などを通知する方法)に Webhook が追加されました。これまでは、Slack などのチャットサービスに障害通知を送信する場合は、外部スクリプトを作成する必要がありましたが、この Webhook を使えば、Zabbix の管理画面だけで外部サービスに通知するための JavaScriptコードの入力や編集がすることができます。そこで今回は、Zabbix 4.4 で追加された Webhook で Slack に通知を送信する設定手順をまとめてみました。
Slack の Incoming Webhooks を有効化
Zabbix からの通知を Slack に投稿できるように Incoming Webhooks を有効化します。Incoming Webhooks は、外部から Slack にメッセージを投稿するための一番簡単な仕組みです。
テスト用に適当なチャネルを作成しておきます。(既存のチャネルを使っても構いません)
Slackアプリの作成
まだ Slackアプリを作成していない場合は https://api.slack.com/apps のページで Slackアプリを作成します。
アプリ名を入力して Zabbix からの通知を投稿するワークスペースを選択します。ここで設定したアプリ名が Slack の投稿者名として表示されます。
Incoming Webhooks の有効化
Incoming Webhooks 選択して「Activate Incoming Webhooks」を「ON」にします。
ページの下にスクロールして「Add New Webhook to Workspace」をクリックします。
投稿先のチャネルを選択して「許可する」をクリックします。
Webhook URL が作成されますのでコピーしておきます。※ Incoming Webhooks には認証の仕組みはありませんので Webhook URL は秘密にして扱いましょう。
最後に、サンプルの curlコマンドを実行して指定したチャネルに「Hello, World!」が投稿されることを確認しておきます。
--data '{"text":"Hello, World!"}' \
https://hooks.slack.com/services/****
Zabbix メディアタイプ Webhook の設定
Zabbix のメディアタイプ Webhook を使って、Slack に通知を送信できるように設定します。
「管理」→「メディアタイプ」→「メディアタイプの作成」をクリックします。
適当な名前を入力し、タイプ「Webhook」を選択します。デフォルトで設定されているパラメータはすべて削除して、名前「text」、値「{ALERT.MESSAGE}」のパラメータを追加します。
(補足)以前の Slack の Incoming Webhooks は、パラメータでチャネルやユーザー名、アイコンが指定できましたが、Slack API に変更がありそれらができなくなりました。チャネルやユーザー名、アイコンなどは Slackアプリで設定してください。
参考資料:Reference- Message payloads | Slack
スクリプトの鉛筆マークをクリックして、以下の JavaScriptコードを入力します。req.Post のところの Webhook URL は、ご自分で作成した Webhook URL に書き換えてください。
var req = new CurlHttpRequest(); req.AddHeader('Content-Type: application/x-www-form-urlencoded'); Zabbix.Log(4, 'webhook request value='+value); req.Post( 'https://hooks.slack.com/services/****', 'payload='+value ); Zabbix.Log(4, 'response code: '+req.Status()); return JSON.stringify({ 'tags': { 'endpoint': 'slack' } });
JavaScriptコードを入力して、ページ下部にある「追加」をクリックすれば、メディアタイプの設定完了です。
最後に作成したメディアタイプの「テスト」をクリックして、Slack に投稿されることを確認します。
テストではマクロ( {ALERT.MESSAGE} のことです)は展開されませんので、そのまま Slack に投稿されていればOKです。
通知設定
作成した Webhookメディアタイプで障害(トリガー)を通知できるように設定します。
「設定」→「アクション」→ イベントソース「トリガー」を選択して、ステータスを有効にします。
「管理」→「ユーザー」で、適当なユーザーをクリックします。(通知先のワークスペースやチャネルは、Slackアプリで設定してください)
「メディアタイプ」タブを選択し、メディアの「追加」をクリックします。
タイプは、先ほど作成した「Slack」を選択し、適当な送信先を入力して「追加」をクリックします。(この送信先は実際に送信には使われませんのでなんでも構いません)
最後に「更新」をクリックすれば、Webhook での通知設定完了です。
実際に障害が発生すると {ALERT.MESSAGE} マクロが展開されて、Slack に通知されます。
おわりに
Slack への投稿パラメータの blocks を使えば、Zabbix からの通知内容を見やすくレイアウトできそうです。ぜひ活用したいですね。
コメント
連携できました!
ありがとうございます!!
>sampeiさん
こちらこそコメントありがとうございます!
この記事がお役にたてて良かったです。