Azure API Managementの背後に配置した生成AIのプロンプトログを取得できない場合がある

このエントリは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を対象にする。

リソース利用したもの備考
APIMStandard V2他のSKUでも実現可能
診断設定は構成済み
LLMClaude 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
GeminiGemini (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 / GeminiApiManagementGatewayLlmLogへの出力ApiManagementGatewayLogsへの出力
純正APIxxx-llmlogxxx-gwlog
OpenAI互換APIxxx-openaiN/A

設定

まず、APIMの診断設定でログ取得するように構成しておく。

  1. APIMの診断設定 (Diagnostics setting) を有効化
  2. 採取したいログにチェックを入れる
    • 基本的にすべてのログ (allLogs) でよいが、個別に指定したい場合には、以下を選択
      • Logs related to ApiManagement Gateway
      • Logs related to generative AI gateway
  3. ログの送信先を指定する

続いて、xxx-llmlog APIとxxx-openai APIで診断ログを構成する。

  1. APIの設定 (settings) > 診断ログ (Diagnostic Logs) > Azure Monitorへ移動
  2. “Log LLM messages” を Enabledに (ログ採取サイズはお好みで)
  3. 設定を保存

これでおしまい。

動作確認

プロンプトはすべての呼び出しで前回のエントリと同じものを使う。具体的には以下。

# 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のログをApiManagementGatewayLlmLogApiManagementGatewayLogsの両方に書き出すことはできるか?それともどちらか一方か?

OpenAI互換やAOAIのAPIを使っている場合に、わざわざログテーブル参照先を変えたくない、ということ背景からの質問。

これはどちらか一方にしか書き出せない(注:2025/10/09現在、両方に書き出せる挙動に変わっている)。

確認するには、AOAIのAPIの診断ログ設定で ApiManagementGatewayLlmLog へ吐き出すように構成し、その際にApiManagementGatewayLogsにも出力されているか、を確認すれば、同時に2個のログテーブルに書き出されるのかどうかがわかる。

a) LLMログ出力を有効化している場合

(1) 2025/09/25現在

ApiManagementGatewayLlmLogを見ると、RequestMessages、ResponseMessagesに値が入っている。

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

(2) 2025/10/09現在

LLMログ出力を有効化していても、ログは両方に書き出されている。

まず、ApiManagementGatewayLogs

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

b) LLMログ出力を無効化している場合

逆に、ApiManagementGatewayLlmLogに吐き出さないよう、診断ログ設定でLLMログ出力を無効にした場合。

当然ながら、ApiManagementGatewayLlmLogにはログが出ない。

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

というわけで、OpenAI互換APIを利用しない(利用できない)場合、すべてのプロンプトログを1個のログテーブルに集めたいのであれば、

  • AOAIも含めて、LLMログを取得しないようにAPIの診断ログを構成
  • すべてのプロンプトログをApiManagementGatewayLogsに書き出す(集約する)

という構成がシンプルと考えられる。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください