レック・テクノロジー・コンサルティング株式会社TECH BLOG

【Azure】カスタムクエリでステータスコード5xxが発生したときのアラートルールを作成した

皆さん、こんにちは。クラウド技術部のWです。

新規構築案件の監視設計でクエリを使って、Azure Monitorでシステム側のエラーを監視をするために、5xx台のアラートルールを設定したので、備忘録として作成したカスタムクエリを残したいと思います。API Manegementは、エラーログではなく、3秒以上処理がかかった場合にアラートを発砲するクエリを作成しました。

対象サービス

以下のサービスを構築したときに、一緒にログを出力するように設定しました。

  • Application gateway
  • Front Door
  • API Management

アラートルールを作るまでの流れ

  1. 対象サービスの構築
  2. Log analytics ワークスペースの作成
  3. 構築したリソースごとに診断設定を追加し、ログをLog analyticsワークスペースに格納
    ※診断設定でアクセスログを収集するようチェックを入れる
  4. 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を活用して、なんとか実装までいきました。
この後にまたクエリを使って、エラーログ→グラフで可視化したのは、また別のお話...

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る