はじめに
こんにちは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の設定
まず、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_token
、channel、event_id
、event_source
、zabbix_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%超過させます。
1 |
$ fallocate -l {ファイルサイズ} test |
※ファイルサイズを指定することで、指定したファイルサイズでファイルを作成します。
例
1 2 |
$ fallocate -l 1G test $ fallocate -l 500M test |
では、Zabbixのコンソールを確認してみましょう!
アクション列の1という数字にカーソルを合わせると、Slackへメッセージが送信されたことを確認できると思います。ステータスが送信済みであれば、メッセージを正常に送信できているかと思います。それでは、Slackの通知先のチャンネルを確認してみましょう。
指定したチャンネルにメッセージが届いていますね。記事を書いている途中で気付いたのですが、監視対象のほうでタイムゾーンの設定がされていませんでしたね….
まとめ
Zabbixと外部サービスを連携することで、アラートの見落としを防ぐだけでなく、組織全体でアラート通知内容の共有も簡単に行える点が非常に便利だと感じました。今回の記事の作成を通じて、Slack APIやWebhookについて改めて学び直す良い機会となりました。
また、自分が作成した内容の抜け漏れも確認できたので、とても良い復習になりました。次回は、Grafanaとの連携に関する記事を書いてみようと思います!
ありがとうございました!
2000年生まれ。社会人2年目の駆け出しエンジニア。SESにてインフラエンジニアとして従事。この先、設計や構築の案件に関われるようなエンジニアになりたいという思いからTechBullに加入し、日々勉強中。主に駆け出しエンジニアに向けて、手助けになるような記事を執筆中。