皆さん、こんにちは。クラウド技術部のWです。
新規構築案件の監視設計でクエリを使って、Azure Monitorでシステム側のエラーを監視をするために、5xx台のアラートルールを設定したので、備忘録として作成したカスタムクエリを残したいと思います。API Manegementは、エラーログではなく、3秒以上処理がかかった場合にアラートを発砲するクエリを作成しました。
対象サービス
以下のサービスを構築したときに、一緒にログを出力するように設定しました。
- Application gateway
- Front Door
- API Management
アラートルールを作るまでの流れ
- 対象サービスの構築
- Log analytics ワークスペースの作成
- 構築したリソースごとに診断設定を追加し、ログをLog analyticsワークスペースに格納
※診断設定でアクセスログを収集するようチェックを入れる - 5xx台を出力するクエリを作成後、Azure Monitorでアラートルールを作成する
カスタムクエリ
サービスごとにカスタムクエリが少しずつ異なるので、それぞれ記載します。
Front Door
Front DoorへのアクセスログはAzureDiagnosticsというログテーブルに格納されます。
AzureDiagnosticsからは、PCクライアントから対象の
URLにアクセスしたときに、5xxのみのログを取り出せるように行を指定します。
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorAccessLog"
| where toint(httpStatusCode_d) >= 500
| extend ParsedUrl = parseurl(requestUri_s)
| where ParsedUrl.Host == "<ドメイン名>"
| where ParsedUrl.Path hasprefix "<パス名>"
Application gateway
Application gatewayへのアクセスログはAGWAccessLogsというログテーブルを格納します。
Front Doorと同じ「AzureDiagnostics」にすることもできますが、あまりAzureに詳しくない方に引き継ぐときにリソース固有のほうがわかりやすかったので、AGWAccessLogsにしました。
AGWAccessLogsから5xxのみを取り出せるように行を指定します。
AGWAccessLogs
| where toint(HttpStatus) >= 500
| where OriginalHost == "<ドメイン名>"
API Management
API Managementについて、API Gatewayに関するログはApiManagementGatewayLogsというログテーブルを格納します。
以下のカスタムクエリでは、直近5分以内に出力されたログを対象に、かつ5分間の平均処理時間を出しています。
処理時間が3秒以上経過した場合はアラートを発砲するように、Azure Monitorからアラートルールを設定しました。
ApiManagementGatewayLogs
| where TimeGenerated > ago(5m)
| summarize Average=avg(TotalTime) by bin(TimeGenerated, 5m)
最後に
チームにクエリに詳しいメンバーがいなかったので、ChatGPTを活用して、なんとか実装までいきました。
この後にまたクエリを使って、エラーログ→グラフで可視化したのは、また別のお話...




