このエントリは2025/09/25現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。
問い合わせ
以下のような問い合わせが届いた。
現在ClaudeやGemini、Azure OpenAI (AOAI) をAzure API Management (APIM) の背後に配置して、プロンプトログを取得を取得しようとしている。以下のエントリを読みつつ構成していて、確かに診断設定だけで
ApiManagementGatewayLogsにRequest/Responseのログを取得できた。そして、AOAIについてはAPIの診断ログ (Diagnostics logs) でApiManagementGatewayLlmLogに出力するように構成し、その通りに出力できた。ところが、GeminiやClaudeで同じ設定をしたところ、Metadata、Requestは取得できたりできなかったりする。そしてResponseは全くログ採取できない。これを解決するにはどうしたらよいか?
上記コメント内の「以下のエントリ」とは次の3個のエントリを指している。
勘のいい人はすぐに気付いたかもしれない。
原因
現時点で、ApiManagementGatewayLlmLogへの出力がうまくいくのは、OpenAI互換APIを使っている場合のみのよう(断定していないのは、仕様で明記されていないため)。
つまり、Gemini、Claudeとも、OpenAI互換のAPIであれば問題なく ApiManagementGatewayLlmLog でログを取得できるが、純正のAPIを使いたい場合(生成AIによっては、OpenAI互換APIだと機能を提供していなかったり、テスト用途に限定していて、運用環境での利用を推奨していない場合がある)、ApiManagementGatewayLlmLog ではなく ApiManagementGatewayLogs を使う必要がある。
実際に動作確認した結果を記載しておく。
環境
以下の条件で構成した。もちろん、APIMのSKUやLLMは何を使ってもよいが、今回はClaudeとGeminiを対象にする。
| リソース | 利用したもの | 備考 |
|---|---|---|
| APIM | Standard V2 | 他のSKUでも実現可能 診断設定は構成済み |
| LLM | Claude Opus 4.1 (20250805) (Anthropic) | 通常のREST APIを利用 https://docs.anthropic.com/en/api/overview OpenAI互換APIは、OpenAI互換SDKから抽出。 https://docs.claude.com/en/api/openai-sdk |
| Gemini | Gemini (Google Cloud) 通常のREST APIを利用 https://ai.google.dev/api?_gl=1 OpenAI互換も使う https://ai.google.dev/gemini-api/docs/openai?_gl=1 |
この環境において、Gemini、Claudeの純正APIと、OpenAI互換APIをそれぞれ作成しておく(Claudeは公式OpenAPI Specの提供はないので、シンプルにChat completionのモデルをAPIMに登録し、当該APIのOpenAI互換APIも登録した)。具体的には以下のような命名規則で作成した。互換APIで ApiManagementGatewayLogs への出力を対象外にしているのは、これは明らかに動作することがわかっているため。
| Claude / Gemini | ApiManagementGatewayLlmLogへの出力 | ApiManagementGatewayLogsへの出力 |
|---|---|---|
| 純正API | xxx-llmlog | xxx-gwlog |
| OpenAI互換API | xxx-openai | N/A |
設定
まず、APIMの診断設定でログ取得するように構成しておく。
- APIMの診断設定 (Diagnostics setting) を有効化
- 採取したいログにチェックを入れる
- 基本的にすべてのログ (allLogs) でよいが、個別に指定したい場合には、以下を選択
- Logs related to ApiManagement Gateway
- Logs related to generative AI gateway
- 基本的にすべてのログ (allLogs) でよいが、個別に指定したい場合には、以下を選択
- ログの送信先を指定する

続いて、xxx-llmlog APIとxxx-openai APIで診断ログを構成する。
- APIの設定 (settings) > 診断ログ (Diagnostic Logs) > Azure Monitorへ移動
- “Log LLM messages” を Enabledに (ログ採取サイズはお好みで)
- 設定を保存

これでおしまい。
動作確認
プロンプトはすべての呼び出しで前回のエントリと同じものを使う。具体的には以下。
# System prompt
"You are a helpful assistant."
# User Prompt
"Google CloudにおけるPQC (Post Quantum Cryptography) の対応状況を教えて。"
# Temperature
0.0
a) OpenAI互換API
いずれの場合もRequest/Responseとも取得できている。
i) Claude

ii) Gemini

b) 純正API (ApiManagementGatewayLlmLogへの出力)
いずれの場合も期待したRequest/Responseを取得できていない。
i) Claude
Requestは取得できているものの、Responseが取得できていないため、消費トークン数も取得できていない。

ii) Gemini
Request/Responseとも取得できていない。

c) 純正API (ApiManagementGatewayLogsへの出力)
これは以前のエントリで紹介した通りなので、Claude、Geminiとも問題なくログを確保できる。
i) Claude

ii) Gemini

ということで
この問い合わせ主に対しては、以下のようにコメントした。
- 現時点では
ApiManagementGatewayLlmLogへの出力に制限がある。- OpenAI互換APIが利用できるのであれば、それを使えば
ApiManagementGatewayLlmLogにログを出力できる。- 純正のAPIを使いたい(使わざるを得ない)場合には、
ApiManagementGatewayLogsに出力する必要がある。
するとやっぱり
更問が届いた。
LLMのログを
ApiManagementGatewayLlmLogとApiManagementGatewayLogsの両方に書き出すことはできるか?それともどちらか一方か?
OpenAI互換やAOAIのAPIを使っている場合に、わざわざログテーブル参照先を変えたくない、ということ背景からの質問。
これはどちらか一方にしか書き出せない(注:2025/10/09現在、両方に書き出せる挙動に変わっている)。
確認するには、AOAIのAPIの診断ログ設定で へ吐き出すように構成し、その際にApiManagementGatewayLlmLogApiManagementGatewayLogsにも出力されているか、を確認すれば、同時に2個のログテーブルに書き出されるのかどうかがわかる。
a) LLMログ出力を有効化している場合
(1) 2025/09/25現在
を見ると、RequestMessages、ResponseMessagesに値が入っている。ApiManagementGatewayLlmLog

対して同じ呼び出しに対するApiManagementGatewayLogsでの出力。値がない(2025/09/25時点)。

(2) 2025/10/09現在
LLMログ出力を有効化していても、ログは両方に書き出されている。
まず、ApiManagementGatewayLogs。

対して、ApiManagementGatewayLogs。CorrelationIdが同じなので、同じログを見ていることがわかる。

b) LLMログ出力を無効化している場合
逆に、に吐き出さないよう、診断ログ設定でLLMログ出力を無効にした場合。ApiManagementGatewayLlmLog
当然ながら、にはログが出ない。ApiManagementGatewayLlmLog

対してApiManagementGatewayLogsを確認すると、RequestBody/ResponseBodyとも出力されていることがわかる。

というわけで、OpenAI互換APIを利用しない(利用できない)場合、すべてのプロンプトログを1個のログテーブルに集めたいのであれば、
- AOAIも含めて、LLMログを取得しないようにAPIの診断ログを構成
- すべてのプロンプトログを
ApiManagementGatewayLogsに書き出す(集約する)
という構成がシンプルと考えられる。