みち草

Azure中心にまとめる技術情報ブログ

Logic Apps で Azure Monitor のアラート メールをカスタマイズする

はじめに

Azure Monitor でアラートを設定すると、予め決められたフォーマットでメールが送られてきます。

補足の文章やアラート内の別の情報を入れたいと思っても、Monitor の機能のみではメールの内容を変更できないため、 Logic Apps と組み合わせることでメールの内容をカスタマイズします。

Azure サポート チームのブログでも紹介されています。

jpazmon-integ.github.io

本記事ではメールのカスタマイズとしてまとめていますが、ほぼ同じやり方でアクションを変えれば、アラートが発砲された際に Teams などに通知することも可能です。

目次

Logic Apps 作成

仮作成

まずは Logic Apps のデプロイ。アラート メールを送るだけなのでコンサンプション プランでちゃちゃっと作成。

"ロジック アプリ デザイナー" から "HTTP 要求の受信時" を選択

"サンプルペイロードを使用してスキーマを生成する" から、カスタマイズしたいアラートの種類に合わせたペイロードのサンプルを貼り付けます。

アラートの種類に応じて連携されるデータ構造が異なるため、Activity Log アラートのカスタマイズだったら "管理" 、 Advisor アラートだったら "推奨"、サービス正常性なら "Service Health" のスキーマと、自分がカスタマイズしたいものに合わせて貼ります。

スキーマは以下の Docs からコピペでもいいのですが、ここでは別の方法を紹介します。

docs.microsoft.com

ということで、ここでは何も貼り付けずに"保存" を選択します。

アクショングループの作成、テスト

一旦 Logics Apps の作成をやめ、アラート発生時に Logic Apps を呼び出すアクション グループを作成します。

"モニター" - "アラート" の "アクション グループ" から、"作成" を選択します。

名前を付け、"アクション" タブに進みます。

"アクションの種類" でロジック アプリを選択します。

右側に別のブレードが出てくるので、先ほど作成した Logic Apps を選択し OK

"確認と作成" を選択すると、"テスト アクション グループ (プレビュー)" ボタンが表示されるため選択します。

これはプレビュー機能ですが、実際のアラートと同じペイロードを送信し、アクション グループのテストを実施できます。
カスタマイズしたいアラートの種類に応じてサンプルを選択し、テストを実行します。

この記事では、"アクティビティ ログ アラート" を選択します。

テストが成功したら "作成" を選択して、中断していたアクション グループの作成を完了させます。

本作成

Logic Apps 作成の続きを行います。

Logic Apps を見ると、先ほどのテスト実行の履歴があるため選択。

この履歴の、"HTTP 要求の受信時" を選択すると、"出力" 本文に値が入っています。
これをコピーして、一番最初の "サンプルペイロードを使用してスキーマを生成する" に貼り付けることでスキーマを指定します。

最初に挙げたように Docs でスキーマを探してコピペでもできるのですが、SubscriptionId がなかったりするので何が正解かイマイチわからず、 多少の手間はありますが "アクション グループのテスト" を用いたこの方法が確実かと思います。

コピーしたら "ロジック アプリ デザイナー" に戻り、サンプルとして貼り付けましょう。

続いてはメールのカスタマイズ部分
"新しいステップ" から、"メールの送信(v2)" を選択します。

注意点として、このアクションは Microsoft 365 と連系してメールを送信するため、M365 が使用できるアカウントでの認証が必要です。
ここで認証したアカウントを送信元としてアラート メールが送信されるため、自分からアラートメールが飛んだように見えるのが嫌な場合、アラート用のアカウント作成などが必要です。

メールの宛先、件名、本文を設定していきます。
本文中では、アラートとして送信された値を参照することができます。
ペイロードの値をそのまま参照したいのであれば "動的なコンテンツ" に対象の名前を入力してクリックするだけなので簡単です。

例として Subscription ID を参照するとこんな感じ
動的コンテンツで subscriptionid を検索して選択

本文に緑色の値が挿入されれば OK

完成版はこんな感じ

リソース名だけは動的なコンテンツとして参照できないので、"式" の方に関数を入れてアラート内の情報から取り出してくる必要があります。
ここではこんな式にしてます。

split(triggerBody()?['data']?['context']?['ActivityLog']?['resourceId'],'/')[8]

リソース ID は以下の形式なので、"/" で split してリソース名の部分を取り出してます。

/subscriptions/サブスクリプションID/resourceGroups/リソースグループ名/providers/Microsoft.Compute/virtualMachines/リソース名

関数の参考 Docs はこちら docs.microsoft.com

これで Logic Apps は完成なので保存。

アラート設定

最後は、Logic Apps を起動するアラートを設定すれば完成です。

モニターのアラート作成から、サブスクリプション対象のアラートを作成

Activity Log アラートのスキーマを使用しているので、条件は Create or Update Virtual Network (Microsoft.Network/virtualNetworks) にしてます。

アクション グループは、既に作成しテストに使用したものを選択

作成時にアラート有効化、以外は好きに設定してアラート完成

動作確認

実際に NW を作成して、アラートを発砲させてみます。

適当な VNet を作成します。

実際に届いたアラートメールがこちら

認証に使用した自分のメールアドレスから届いています。

本文中には Logic Apps で指定した内容や値が記載されており、caller には Azure AD のユーザープリンシパル名が表示されています。
split で作成したリソース名も OK です。

このようにして、カスタマイズしたアラート メールを送信することができます。

終わりに

今回はアラート メールのカスタマイズとしましたが、最初にも書いたとおりアクションを変えれば Teams に連携したり、他の処理を行ったりもできるので、Logic Apps を使えばいろいろと自動化ができます。

ここでは Microsoft 365 との連携でメール送信をしていますが、アカウント認証が必要なのが少し面倒かなぁと思います。
実際の運用では個人にするわけにはいかないので専用アカウントを作成することになると思いますが、社内的にその申請やアカウント管理が手間になることは多々あるのかなと。

その点では SendGrid などを使用して、API で連携させる方が楽でよさそう。