ZabbixのアラートをSlackへ通知させる方法

はじめに

こんにちはnaya(@NayaTaiyo)です。前回はAnsibleでユーザー作成とSSH認証の記事を投稿しましたが、今回はZabbixを利用した、Slackへのアラートの通知設定を記載してみました。OSS監視ツールとしてZabbixを使用している方は多いのではないかと思いますので、こちらの記事が参考になれば幸いです。

構築環境

  • Zabbix  5.0
  • SlackAPI 2.8.0

Slackアラート通知のイメージ図

 

通常、ZabbixAgentが導入されている監視対象ホストで障害などが発生した際、Zabbixのコンソール画面にアラートが届くように設定がされていると思うのですが、Slackと連携させることにより、Zabbixへのアラートのみではなく、Slackにも通知を送信することが可能になります。その他にも、通知先のチャンネルの設定や通知するメッセージ内容などの設定できることが可能で、アラートの見落としを事前に防ぐといったことにもつながるので、Slackなどの他サービスへの通知設定はするべきと言えるでしょう。

Slack API とは

イメージ図にあるSlack APIとは、Slackプラットフォームと外部のアプリケーションやサービスを統合するためのインターフェースです。こちらを使用することにより、外部のアプリケーションであるZabbixとのサービス間の通信を可能にして、Slackへのアラート通知を行うことが可能になります。

Slack APIの設定

https://api.slack.com/apps

まず、Slack APIの設定から行っていきます。Slack APIの公式ホームページから「Your Apps」⇒「Create app」を押下。

以下の画面が出ます。「From Scratch」を選択しましょう。

画面が遷移するのでアプリケーション(bot)の名前の指定とインストールするSlackの ワークスペースを選択します。選択後「Create App」で作成

続いて以下の画面より、OAuth & Permissionsを選択してください。アプリケーション(bot)の権限の設定とOauth認証設定を行います。

移動後、少し下にスクロールすると、Scopesがあるので、こちらでアプリケーション(bot)の権限の設定を行います。Add an OAuth Scopesを押下後、「chat:write」を選択、「chat:write」: アプリケーション(bot)へチャットへの書き込み権限を付与することができます。

OAuth TokensからInstall to {ワークスペース名}を選択して、実際にアプリケーション(bot)をインストールします。

Allowを押下後、アプリケーション(bot)をインストールした、Slackのワークスペースを確認してみます。

登録完了!確認後、先ほどのOAuth Tokensの画面に戻り、BotUser OAuth TokenをCopyしておきましょう。後ほど使用します。Copyをクリックするとコピーできます。

Slack APIをSlackへ導入できたので、次にZabbixコンソールからアラート通知の設定を行います。※本手順はzabbix5.0を使用した手順となります。サイドバーの「管理」⇒「メディアタイプ」からSlackを押下します。

タイプがWebhookになっているの確認します。

以下のパラメータの値を編集します。
bot_tokenchannel、event_idevent_sourcezabbix_url
bot_tokenには先ほどcopyしたBotUser OAuth Tokenの値を貼りつけます。

Webhook とは

Webhook(ウェブフック)は、特定のイベントが発生した際に、サーバーが別のURLにHTTPリクエストを送信する仕組みです。リアルタイムに情報を他のシステムやアプリケーションと連携するのに利用されます。今回の例でいうと、Slack APIとWebhookは以下の役割になるかと思います。

  • Slack API:ZabbixとSlackとのサービス間の通信を担っており、Webhookから送られてきたデータを作成したアプリケーション(bot)がチャットに投稿
  • Webhook:トリガーを実行することで、Slackへのメッセージの通知を行う。その他にもトリガーの設定を行うことができる。

それでは、次にSlackに戻ってアプリケーション(bot)の設定を行います。ユーザーの欄からアプリケーション(bot)の名前を選択して、以下を押下します。

「Add this app to channel」からアプリケーション(bot)を追加するチャンネル名を選択

選択後「Add」を押下。これで通知の設定は完了したので、Zabbixのコンソールからテストしてみましょう。先ほどの、メディアタイプの画面から「テスト」を押下。

設定は修正済みなのでそのままテストを押下。修正されていない場合は修正しましょう。

それでは通知先のSlackのチャンネルを確認してみましょう。

ちゃんと通知が届いていますね。今回は通知内容の設定までは行いませんが、こちらもお好みのメッセージで通知させることが可能となっております。

トリガー設定

それでは、Slackチャンネルへメッセージを通知する設定は完了したので、トリガー発生時にSlackへ通知を行えるように設定をしましょう。サイドバーの「設定」⇒「アクション」からアクションの作成を押下します。

トリガーアクションの名前を決めます。

次に追加を押下し、選択ボタンからアクションを発生させるトリガーを選択します。以下の例だと、監視対象のディスク使用率が80%を超えた場合にトリガーアクション実行といった設定となります。

アクションタブの設定が完了したら、次は実行内容タブに移動し「実行内容」の追加を押下します。

「ユーザーに送信」から追加を押下し、今回はAdminを選択します。新規ユーザーを作成して、作成したユーザーに設定することも可能です。後は、使用するメディアを「次のメディアのみ使用」から「Slack」を選択して「Add」を押下しましょう。

同様の手順を「復旧時の実行内容」と「更新時の実行内容」にも設定しましょう。

これで設定は完了です!!

アラートの動作確認

アラートの発生条件が今回の例だと「ディスク使用率80%以上」なので、以下のコマンドを監視対象のホストで入力してディスク使用率を80%超過させます。

※ファイルサイズを指定することで、指定したファイルサイズでファイルを作成します。

では、Zabbixのコンソールを確認してみましょう!

アクション列の1という数字にカーソルを合わせると、Slackへメッセージが送信されたことを確認できると思います。ステータスが送信済みであれば、メッセージを正常に送信できているかと思います。それでは、Slackの通知先のチャンネルを確認してみましょう。

指定したチャンネルにメッセージが届いていますね。記事を書いている途中で気付いたのですが、監視対象のほうでタイムゾーンの設定がされていませんでしたね….

まとめ

Zabbixと外部サービスを連携することで、アラートの見落としを防ぐだけでなく、組織全体でアラート通知内容の共有も簡単に行える点が非常に便利だと感じました。今回の記事の作成を通じて、Slack APIやWebhookについて改めて学び直す良い機会となりました。

また、自分が作成した内容の抜け漏れも確認できたので、とても良い復習になりました。次回は、Grafanaとの連携に関する記事を書いてみようと思います!

ありがとうございました!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール