初投稿です。
業務でAzure Monitorのログ検索アラートを使用するにあたり、仕組みの理解に苦戦しましたので、備忘として残します。
実現したい事
・Azure Functionsがエラーログを出したらメール通知。
・メール本文にログ内容を表示。 ※ここでハマりました...
処理の流れ
1.Functionsの関数A実行(Communication Serviceによるメール送信)
↓
2.ログ出力(Functions → Application Insights → Log Analyticsワークスペース)
↓
3.Azure Monitorによるアラートメール送信
アラートルール:
・10分間隔でクエリ発行
・クエリ内容:出力元がFunctions、かつ関数Aのエラーで絞り込み
・1件以上の場合に指定アドレスへメール送信
↓
4.メール確認(運用者)
・メール本文から、エラーログの詳細(申請ID等の値が含まれる)を確認したい。
課題
メール本文にログ検索結果が記載されない。
ログ検索アラート API バージョン 2021-08-01 以降では、アラート通知ペイロードから検索結果が削除されました。 検索結果は、以前の API バージョン (2018-04-16) で作成された警告ルールでのみ利用できます。
最新のAPIバージョンではメール内容にログが含まれない(以前はヒットしたログが10件まで記載されていた)。
一応、確認時点(2024/5/19)ではAPIバージョン2018-04-16を使ってデプロイも可能(コマンドライン)だが、廃止予定のため非推奨。
最新APIでもメール本文にAzure PortalへのURLが記載されていて、Azure Monitorの画面まで1クリックで移動してログを確認する事は可能。
ただメールのみで確認するよりも手間がかかる。エラー件数が多いとより不便か。
解決策
Logic Appsなどの別アプリケーションでメール送信処理を実装する
Azure Monitorはアラートルールで定義した内容に合致したら、指定したアクショングループを実行する。
アクショングループの内容には大きく「通知」「アクション」がある。
https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/action-groups
「通知」にはメール送信などが含まれる。
「アクション」にはLogic Appsの呼び出しなどが含まれる。
アラート発報時にアクションでLogic Appsを呼び出してペイロード(ログ検索結果などを含む)を渡し、Logic Apps側でメール内容を作り込む事が可能。
ただし、メール送信手段を別途用意する必要がある。
・Office365アカウント
・SMTPサーバ
・Communication Service
など。
ログを調査する必要があるときは、アラートにある、ログ内の検索結果へのリンクを使用します。
生の検索結果、または他の高度なカスタマイズが必要な場合は、Azure Logic Apps を使用してください。
参考資料
Bicep関連