【6.0対応済】ZabbixのアラートをMicrosoft Teamsに通知する方法
こんにちは!プラットフォーム技術部の小羽根陸です。
前回の記事ではZabbix 5.0から標準で搭載されているチャットツールのSlackと連携する方法を紹介しました。今回はWebhook連携の第二弾としてMicrosoft Teams(以下、Teams)と連携する方法を紹介します!
社内のコミュニケーションツールとしてTeamsを使っている方も多いのではないでしょうか。Teamsに監視通知することで便利になるという皆さん、ぜひお試しください。
ZabbixとTeamsの連携方法
ZabbixならびにTeamsの設定方法について説明します。
事前に準備するもの
- Zabbix 5.x環境
- 通知するTeamsチャネル
Zabbix 5.0以前の環境からアップグレードした環境である場合
準備をした環境がZabbix 5.0以前のバージョンからZabbix 5.xにアップグレードしている場合は、Teamsと連携するための必要な設定が入っていないおそれがあります。
事前に必要な設定がはいっているかを確認しましょう。
Zabbixフロントエンドのメインメニューから【管理】→【メディアタイプ】の順に押下します。「MS Teams」があればTeamsの設定に進んでOKです。
「MS Teams」が見つからない場合はZabbixサーバーに「MS Teams」の設定をインポートする必要があります。設定はxmlファイル、yamlファイルとして提供されているのでZabbixサーバーのバージョンに応じて以下のリンクからダウンロードしてください。
Zabbix 5.0はxmlファイル、Zabbix 5.2以降ではyamlファイルが提供されています。(Zabbix 5.2からyamlファイルのインポートがサポートされました。)
xmlファイルまたはyamlファイルのダウンロードを終えたらメディアタイプ画面の右上「インポート」を押下します。
「ファイルの選択」を押下して先ほどダウンロードをしたxmlファイルまたはyamlファイルを選択して「インポート」を押下します。
「インポートに成功しました」と表示されメディアタイプ一覧に「MS Teams」が追加されているのを確認します。
インポートが成功したら引き続きTeamsの設定をおこないます。
Teamsの設定
Teamsの設定をおこないます。今回の記事ではTeamsデスクトップ版を使用しましたが、ブラウザ版でも設定できます。
まずは通知するTeamsのチャネルを用意します。今回の記事では「Teams_ZabbixWebHook」チーム内に「一般」チャネルを新規に作成しました。
通知するTeamsチャネルにある「…」から「コネクタ」を押下します。
チャネルのコネクタが表示されるので、検索ボックスに「zabbix」と入力してZabbix Webhookの「追加」を選択します。
Zabbix webhookの追加画面に遷移するので「追加」を選択します。
再度チャネルのコネクタ画面に遷移するので、検索ボックスに「zabbix」と入力してZabbix Webhookの「構成」を選択してください。
Zabbix webhookの構成画面に遷移します。Webhookのエンドポイントが表示されていることを確認して「Copy」ボタンを押してメモしておきましょう。Zabbix側の設定で必要です。
これでTeamsの設定は完了です!
Zabbixの設定
続いてZabbixの設定をおこないます。Zabbixではメディアタイプの設定、ユーザーの設定、トリガーアクションを設定していきます。
今回の記事ではZabbix 5.4のキャプチャを使用しています。そのためZabbix 5.0、Zabbix 5.2をお使いの方は、お手元のZabbix画面と記事のキャプチャに一部差異があると思いますがご了承ください。
メディアタイプの設定
Zabbixフロントエンドにアクセスします。Zabbix特権管理者相当の権限を持つユーザーでログインしてください。
メインメニューから【管理】→【メディアタイプ】の順で押下してメディアタイプの一覧から「MS Teams」を押下します。
「teams_endpoint」に先ほどTeams画面でコピーしたWebhookのエンドポイントをペーストします。
「zabbix_url」にZabbixサーバーのIPアドレスを設定します。こちらはデフォルトで設定されている値の{$ZABBIX.URL}をZabbixサーバーのIPアドレスに書き換えても動作しますが、「zabbix_url」はTeams以外のメディアタイプでも使用するため、グローバルマクロでの設定をおすすめします。
Zabbixのグローバルマクロとは、Zabbixサーバー全体で有効な、指定した文字列(変数名)を指定した値に自動で置き換えてくれる機能です。このマクロ変数を使用する全ての設定を一括で変更管理できるメリットがあります。
グローバルマクロで{$ZABBIX.URL}をZabbixサーバーのIPアドレスに置き換えるように設定しておくことで、「zabbix_url」にZabbixサーバーのIPアドレスを記載する必要がなくなります。Slackの記事と同様に、今回の記事もグローバルマクロでの設定手順を説明します。
「teams_endpoint」の設定を反映させるために「更新」を押下します。
Zabbix 5.4以降を使用している方は、以下の流れでグローバルマクロを設定します。
- メインメニューから【管理】→【一般設定】→【マクロ】の順で押下します
- マクロに{$ZABBIX.URL}、値に「http://IPアドレス」または「https://IPアドレス」を記載します
- 「更新」ボタンを押下します
Zabbix 5.0、Zabbix 5.2を使用している方は、以下の流れでグローバルマクロを設定します。
- メインメニューから【管理】→【一般設定】の順で押下します
- 左上のプルダウンメニューから「マクロ」を選択します
- マクロに{$ZABBIX.URL}、値に「http://IPアドレス」または「https://IPアドレス」を記載します
- 「更新」ボタンを押下します
ここまでの設定が正しいか確認するためにメディアタイプの「テスト」を押下します。テストを押下することで、Teamsにテストメッセージを送信できます。
テストするために必要なパラメーターである「event_source」に値を入力します。「event_source」は0-3の間で値を設定できます。
それぞれの数値の意味は下記のとおりですが、今回は“1”を選択します。
- 0:トリガーによって作成されたイベント
- 1:ディスカバリルールによって作成されたイベント
- 2:エージェント自動登録によって作成されたイベント
- 3:内部イベント
今回は「event_source」に1を記載して進めます。
必要なパラメーターに値を入力したら「テスト」ボタンを押下します。
テストに成功した場合、「メディアタイプ"MS Teams"のテスト」ポップアップに「メディアタイプのテストに成功しました。」と表示されます。
Teams側にテストメッセージが投稿されました。テストなのでマクロには値が入っていませんが実際にアラートが発生した場合にマクロに値が入って表示されます。表示されるマクロの内容はこちらを確認ください。
テストメッセージが投稿されたことを確認できたらメディアタイプの設定は完了です。
ユーザーの設定
アラートを通知するユーザーを作成します。
メインメニューから【管理】→【ユーザー】の順で押下します。今回は「zabbix_alerts」ユーザーを使用します。Teams通知用のユーザーを作成していない場合は「ユーザーの作成」を押下して作成してください。
所属するユーザーグループは、監視対象ホストの表示権限が必要です。表示権限が付与されていない場合はアラートを通知できません。
「メディア」タブに移動して「追加」を選択します。
「メディア」のポップアップが表示されるので「タイプ」のプルダウンメニューから「MS Teams」を選択します。
「送信先」はSlackだとチャンネル名を指定する必要がありましたが、Teamsの場合は「送信先」を使用しませんが空に設定もできません。そのため、今回の記事ではTeamsのチーム名であるTeams_ZabbixWebHookと記載しました。
「有効な時間帯」「指定した深刻度のときに使用」は必要に応じて変更してください。
設定後に「追加」を押下します。
設定されたことを確認します。
ユーザーの設定は以上です。
トリガーアクションの設定
アラートを発報する条件や送信するメッセージを設定します。
Zabbix 5.4以降を使用している方は、メインメニューから【設定】→【アクション】→【トリガーアクション】の順で押下して「アクションの作成」を押下します。
Zabbix 5.0、Zabbix 5.2を使用している方は、メインメニューから【設定】→【アクション】の順で押下した後に右上の「アクションの作成」を押下します。
実行条件を設定して「実行内容」タブを選択します。今回は実行条件を「Zabbix serverホスト」でイベント発生時に設定していますが必要に応じて変更してください。
「実行内容」と「復旧時の実行内容」、「更新時の実行内容」を設定します。今回は「実行内容」と「復旧時の実行内容」にメディアタイプ「MS Teams」とユーザー「zabbix_alerts」を設定しました。
通知するメッセージを変更する場合は「メッセージのカスタマイズ」にチェックをいれます。「件名」「メッセージ」を記載することでTeamsに通知するメッセージを変更できます。
トリガーアクションでメッセージのカスタマイズを行わない場合はメディアタイプ「Teams」の「メッセージテンプレート」タブのメッセージが使用されます。
ここまでで設定は完了です。実際に障害を発生させてTeamsへの通知を確認します。
アラートの発報
ここではZabbixエージェントを停止させて障害を発生させました。「アクション」のステータスを確認すると送信済と記載されています。送信に失敗した場合は、この画面にその旨エラーが表示されます。
Teams画面を確認します。メディアタイプのテストではマクロになっていた部分も値が入っています。
Teamsにアラートが通知されました!
それでは、Zabbixエージェントを起動させて障害を復旧させます。
Teams画面を確認します。
復旧すると、Slackとは違いメッセージが更新されるわけではなく新規の復旧メッセージが投稿されます。
まとめ
今回の記事では、Webhook機能を使用してTeamsにアラートを通知しました。
Slack、Teams以外にもRedmine、JIRA、ServiceNow、ZendeskなどのITSMサービスなどさまざまな外部サービスと標準で連携できるようになっているので、ぜひお試しください。
その他、WebAPIを持つ外部サービスとの連携についても当社では独自に実績がありますので、標準外のサービスやツールとの連携が必要な場合はぜひご相談ください。
Zabbixに関するお問い合わせはこちらからお願いいたします。