♥️

Azure API ManagementでBodyをログに出力する方法

2023/05/19に公開

この記事で説明すること

  • Azure API Managementでリクエスト・レスポンスのBodyをログに出力させる方法

この記事で説明しないこと

  • Azure API ManagementでAPIを設定する方法
  • APIサーバの作り方

など

前提

  • API ManagementでAPI定義と呼び出しができるようになっていること(この記事では例としてAzure Open AIのAPIを呼び出しています)
  • ストレージアカウントがAPI Managementと同じリージョンに作成されていること

設定

※ この時点で診断設定やAPI定義内のDiagnostic Logs設定が存在している場合、一度削除してください。
(詳細は不明ですが作成順序が異なると診断設定が働かないことがあるようです)

1. API Managemnetの診断設定の作成

・API Managementの左側メニュー> 監視 > 診断設定から診断設定を作成します

・ログのカテゴリグループでauditとallLogsを選択します
・宛先としてLog Analyticsワークスペースとストレージにチェックします(必要なほうだけで構いません)
 ・LAのワークスペースはデフォルトで可、ターゲットテーブルは「リソース固有」を選択
 ・ストレージアカウントは前段で作成したものを指定

・この診断設定をすると、ログがLAやストレージに保管されるようになりますが、
これだけではリクエストやレスポンスのBodyは保管されません

・もしストレージとLog Analyticsの片方だけにログ保存したい場合は該当しないほうのチェックを外してください

2. API設定でのDiagnostic Logs設定

API ManagementのAPIs > Bodyを出したいAPI > Settingsを選択します。
画面下部のDiagnostics Logsを以下のように設定します

以上で設定は完了です。

リクエストのテスト

以下のいずれの方法でリクエストを行ってもログに出力されます。

■ コンソールからのテストリクエスト
・対象のAPIのTestタブからdeployment-idとapi-versionを指定し任意のメッセージを送ります

■ 外部からのリクエスト
外部のWeb UIやクライアント、スクリプト等からリクエストを送信します。

ログの確認

上記の診断設定ではLog AnalyticsとStorage Account両方に出力されています。

■ Log Analyticsの確認
API Management画面の監視 > ログから以下のようなログを投げることで直近ログを取得できます
(実際にリクエストを行ってからクエリ結果に反映されるまで3分ほどかかります)

投げるkustoクエリの例:

ApiManagementGatewayLogs | where TimeGenerated > ago(1d)

横にスクロールしていくとRequest BodyやResponse Bodyも含まれているのを確認できます

■ Storage Accountの確認
insights-logs-gatewaylogsというBlobコンテナーが自動的に作成されており、その配下に年・月・日・時間・分ごとのディレクトリに分けてログが保存されています

Discussion