Zabbix 5.xのアラートをSlackに通知する方法

Zabbix

こんにちは!プラットフォーム技術部の小羽根陸です。

今回の記事ではZabbix 5.0から標準で搭載されているチャットツールのSlackと連携する方法を紹介します!

Zabbix 4.4からメディアタイプにWebhookが追加され、外部スクリプトを自作することによって外部ツールに対してアラートを通知することができるようになりましたが、Zabbix 5.0ではさらにSlackを始め外部サービスと連携する機能が標準搭載され、WebUIで設定を行うことで簡単に実装できるようになっています。監視通知はメールよりもチャットのほうが便利という皆さん、ぜひお試しください。

ユースケース

従来メールでアラートを受信していたときは監視メンバーがメールを定期的に確認しなければいけませんでしたが、ZabbixのアラートをSlackに通知することでPUSH通知として受け取ることができるため、アラートに気づきやすくなります。

また、チャットベースで障害発生中のイベントや復旧したイベントが一目で分かるため、Zabbixフロントエンドを確認しなくても障害発生中のイベントが分かります。

なお、メール通知とSlack通知を併用できますので、従来の運用を変更せずにSlackによる通知を試せます。

ZabbixとSlackの連携方法

ここから、ZabbixならびにSlackの設定方法について、説明します。

事前に準備するもの

  • Zabbix 5.x環境
  • 通知するSlackワークスペース
  • 通知するSlackチャンネル
  • Slackユーザーアカウント

Slack APIの設定

まず、Slackチャンネルで通知をおこなうSlackアプリを作成します。Slack APIページに移動して「Create an app」を押下します。

Slack APIのトップページ

「Create an app」ポップアップが表示されるので「From scratch」を選択し、手動で設定を入力してアプリを作成します。

From scratch

「Name app & choose workspace」ポップアップが表示されるので、以下の流れで設定を行います。

  1. 「Sign into a different workspace」を選択してSlackユーザーアカウントにログインします
  2. 「App Name」にSlackアプリ名を記載します
  3. 「Pick a workspace to develop your app in:」で対象のSlackワークスペースを選択します
  4. 「Create App」を押下します
Name app & choose workspace

App Nameに記載したSlackアプリ名でSlackチャンネルに通知を行います。アプリ名は後から変更ができます。今回はZabbix_Alerterと命名しました。

「Create App」ボタンを押下した後に、サイドバーから【OAuth & Permissions】を選択します。OAuth & Permissionsの設定で、追加するSlackアプリの権限設定を行います。

Basic Information

下にスクロールして「Add an OAuth Scope」ボタンを押下します。

Scopes

プルダウンメニューから「chat:write」を選択します。「chat:write」を選択することでSlackアプリにSlackチャンネルへの書き込み権限を付与しています。

Scopes chat:write

「Bot Token Scopes」に「chat:write」が追加されていることを確認します。

Scopes Bot Token Scopes chat:write

上にスクロールして「Install to Workspace」を押下し、SlackアプリをSlackワークスペースにインストールします。

OAuth Tokens for Your Workspace

画面が遷移した後に「許可する」を押下します。

Zabbix_Alertの許可

「Bot User OAuth Token」が表示されていることを確認します。「Bot User OAuth Token」は後でZabbix側の設定をする時に必要になります。忘れないように「Copy」ボタンを押してメモしておきましょう。

Bot User OAuth Token

これでSlack APIの設定は完了です!

Slackの設定

続いてSlackの設定を行います。先ほどSlack APIの設定でSlackワークスペースにインストールしたSlackアプリをチャンネルに追加します。

通知に用いるSlackチャンネル画面を開きます。今回はSlackチャンネルは「zabbix_alerts」を新規に作成して使用します。

Slack画面

Slack画面の右上にあるアイコンを選択します。

Slack 右上

「インテグレーション」タブを開いて「アプリを追加する」を押下します。

Slack アプリを追加する

Slack APIで作成したSlackアプリ「Zabbix_Alert」を追加します。

Slack Zabbix Alert追加

アプリが追加されたことを確認します。アプリの追加が成功した場合は画像の赤枠にあるように「Slackチャンネル名に追加されました。」と表示されます。

Slack 追加成功

これでSlackの設定は完了です。

Zabbixの設定

続いてZabbixの設定を行います。Zabbixではメディアタイプの設定、ユーザーの設定、トリガーアクションの設定を実施していきます。

メディアタイプの設定

Zabbixフロントエンドにアクセスします。Zabbix特権管理者相当の権限を持つユーザーでログインしてください。

Zabbix5.0のダッシュボード画面

メインメニューから【管理】→【メディアタイプ】を押下してメディアタイプの一覧から「Slack」を押下します。

メディアタイプSlack

「bot_token」にSlack API設定で取得した「Bot User OAuth Token」の値を記載します。

メディアタイプSlack bot_token

「zabbix_url」にZabbixサーバーのIPアドレスを設定します。こちらはデフォルトで設定されている {$ZABBIX_URL} をZabbixサーバーのIPアドレスに書き換えても動作しますが、「zabbix_url」パラメーターはSlack以外のメディアタイプでも使用するため、グローバルマクロでの設定をおすすめします。(グローバルマクロでの設定を行わないと別のメディアタイプ設定を行うたびに「zabbix_url」パラメーターにZabbixサーバーのIPアドレスを記載する必要があります。)今回はグローバルマクロでの設定手順を説明します。

「Bot User OAuth Token」の設定を反映させるために「更新」を押下します。

メディアタイプSlack zabbix_url

以下の流れでグローバルマクロに設定を行います。

  1. メインメニューから【管理】→【一般設定】の順で押下します
  2. 左上のプルダウンメニューから「マクロ」を選択します
  3. マクロに {$ZABBIX_URL}、値に「http://IPアドレス」または「https://IPアドレス」を記載します
  4. 「更新」ボタンを押下します
マクロ設定

ここまでの設定が正しいか確認するためにメディアタイプの「テスト」を押下します。テストを押下することで、Slackにテストメッセージを送信できます。

メディアタイプSlack テスト

テストを行うために必要なパラメーターに値を入力します。設定が必要なパラメーターは「channel」「event_id」「event_source」「zabbix_url」です。

  • channel: 通知するSlackのチャンネル名を記載します
  • event_id: 任意の数値を記載します
  • event_source: 0-3の数値を記載します
  • zabbix_url: 「http://IPアドレス」または「https://IPアドレス」を記載します

必要なパラメーターに値を入力したら「テスト」ボタンを押下します。

メディアタイプSlack テストパラメーター1
メディアタイプSlack テストパラメーター2

テストに成功した場合、「メディアタイプ"Slack"のテスト」ポップアップに「メディアタイプのテストに成功しました。」と表示されます。

メディアタイプのテスト成功

Slack側にテストメッセージが投稿されました。テストなのでマクロには値が入っていませんが実際にアラートが発生した場合にマクロに値が入って表示されます。表示されるマクロの内容はこちらを確認ください。

Slack テスト通知

テストメッセージが投稿されたことを確認できたらメディアタイプの設定は完了です。

テストに失敗した場合、「メディアタイプ"Slack"のテスト」ポップアップに「メディアタイプのテストに失敗しました。」と表示されます。

メディアタイプのテスト失敗

テストに失敗した場合は今まで設定した内容が間違っている可能性が高いので、Slack APIのError一覧ページでエラー内容を確認してください。

「Slack notification failed : Invalid_auth」と表示された場合は、一部Slack APIの仕様が変更となったためメディアタイプ「Slack」のスクリプトが正常に動作していないようです。正常に動作しない問題についてはZabbixサポートページにチケットが作成されていますので、興味のある方はご確認ください。

解決策としては修正版のxmlファイル、yamlファイルが提供されているのでこちらをZabbixサーバーにインポートする必要があります。xmlファイル、yamlファイルはZabbixのバージョンに応じて以下のリンクからダウンロードをしてください。

Zabbix 5.0はxmlファイル、Zabbix 5.2とZabbix 5.4はyamlファイルが提供されています。(Zabbix 5.2からyamlファイルのインポートがサポートされました。)

メディアタイプ画面の右上「インポート」を押下します。

メディアタイプインポート

「ファイルの選択」を押下して先ほどダウンロードしたxmlファイルまたはyamlファイルを選択し、メディアタイプの「既存の設定を上書」にチェックをつけて「インポート」を押下します。

「既存の設定を上書」を行うことによってもともと設定していたメディアタイプ「Slack」が上書きされてしまいます。上書きされて困る場合は事前にメディアタイプ「Slack」をリネームしておいてください。

メディアタイプインポートファイル選択

「インポートが作成しました」と表示されることを確認します。

メディアタイプインポート成功

インポートが成功したらメディアタイプ「Slack」に再度、Zabbixのメディアタイプ設定を行います。

ユーザーの設定

アラート通知を行うユーザーを作成します。

メインメニューから【管理】→【ユーザー】の順で押下します。今回は「zabbix_alerts」ユーザーを使用します。Slack通知用のユーザーを作成していない場合は「ユーザーの作成」を押下して作成してください。

ユーザー設定

所属するユーザーグループは、監視対象ホストの表示権限が必要です。表示権限が付与されていない場合はアラート通知を行えません。

「メディア」タブに移動して「追加」を選択します。

ユーザーメディア設定

「メディア」のポップアップが表示されるので「タイプ」のプルダウンメニューからSlackを選択した後に「送信先」にSlackのチャンネル名を記載します。設定後に「追加」を押下します。

ユーザーのメディア詳細設定

「送信先」で設定するチャンネル名の先頭#は記載しても記載しなくても動作しますが、今回は#を記載しています。「有効な時間帯」「指定した深刻度のときに使用」は必要に応じて変更してください。

設定が行われたことを確認します。

ユーザーメディア設定確認

ユーザーの設定は以上です。

トリガーアクションの設定

アラートを発報する条件や送信するメッセージを設定します。

メインメニューから【設定】→【アクション】の順で押下して「アクションの作成」を押下します。

トリガーアクション画面

実行条件を設定して「実行内容」タブを選択します。今回は実行条件を「Zabbix serverホスト」でイベント発生時に設定していますが必要に応じて変更してください。

トリガーアクション作成

「実行内容」と「復旧時の実行内容」、「更新時の実行内容」を設定します。今回は「実行内容」と「復旧時の実行内容」にメディアタイプ「Slack」とユーザー「zabbix_alerts」の設定を行いました。

トリガーアクション実行内容設定
トリガーアクション実行内容設定内容

通知するメッセージを変更する場合は「メッセージのカスタマイズ」にチェックをいれます。「件名」「メッセージ」を記載することでSlackに通知するメッセージを変更できます。

トリガーアクションのメッセージカスタマイズ

トリガーアクションでメッセージのカスタマイズを行わない場合はメディアタイプ「Slack」の「メッセージテンプレート」タブのメッセージが使用されます。

ここまでで設定は完了です。実際に障害を発生させてSlackへの通知を確認します。

アラートの発報

ここではZabbixエージェントを停止させて障害を発生させました。「アクション」のステータスを確認すると送信済と記載されています。送信に失敗した場合は、この画面にその旨エラーが表示されます。

障害発生

Slack画面を確認します。メディアタイプのテストではマクロになっていた部分も値が入っています。

Slackに障害通知

Slackにアラート通知が行われました!

Slack上では分かりやすく障害はサイドバーが赤色に表示されます。「Open in Zabbix」ボタンを押下するとZabbixフロントエンドにアクセスできます。

それでは、Zabbixエージェントを起動させて障害を復旧させます。

障害解決

Slack画面を確認します。

復旧すると障害メッセージが更新されます。復旧したイベントに関してはサイドバーが緑色に表示されます。

まとめ

Webhook機能を使用してSlackにアラート通知を行いました。

旧バージョンのZabbixをお使いの環境ではアラート通知はメールで、というのが大半だと思いますが、昨今コミュニケーションはメールからチャットに、と世の中も変化しています。

Slack以外にもMicrosoft Teamsなどのチャットツールや、Redmine、JIRA、ServiceNow、ZendeskなどのITSMサービスなどさまざまな外部サービスと連携できるようになっているので、ぜひZabbixもバージョンアップして運用業務を便利に変えてみませんか。

アークシステムは Zabbix Japan LLC の認定パートナー企業です。 当社はZabbixバージョン1.1の時代から監視ソリューションの活用を進め、Zabbixに関する製品・サービスの販売に加え、Zabbix関連サービスの提供を行っています。

Zabbixに関するお問い合わせはこちらからお願いいたします。

  • 株式会社アークシステムの予約・来訪管理システム BRoomHubs
  • 低コスト・短納期で提供するまるごとおまかせZabbix