本文へスキップ

LLM API分析(トランザクション連携)

AI Agent ObservabilityはWhaTap APMと統合されており、LLM API呼び出しをアプリケーショントランザクションの一部として追跡します。トランザクションプロファイルでLLM HTTPCステップをクリックするとLLM API詳細Drawerが開き、プロンプト入力/出力、トークン使用量、コスト、エラー情報はもちろん、GPUインフラストラクチャの相関関係まで1つの画面で確認できます。

ノート

プロンプト入力/出力の照会にはログ読み取り権限が必要です。

LLM API分析

アクセス方法​

  1. LLMダッシュボードのヒットマップまたはトランザクション検索などからトランザクションを選択します。
  2. トランザクションプロファイル画面でLLM HTTPCステップ(LLMプロバイダURLへのHTTP外部呼び出し)をクリックします。
  3. 右側にLLM API詳細Drawerが開きます。

サマリーおよびプロンプト​

LLM呼び出しの主要情報を一目で確認でき、プロンプト入力/出力の原本を確認できる領域です。

Identityタグ​

呼び出し対象のモデルとプロバイダ情報をタグ形式で表示します。

TagDescriptionExample
Model使用されたLLMモデル名gpt-4o, claude-sonnet-4-20250514
ProviderLLM APIプロバイダapi.openai.com, api.anthropic.com
Operation呼び出しのOperation Typechat, completion

呼び出しが失敗した場合(success=false)、赤色のErrorタグが追加で表示されます。

主要数値指標​

Identityタグの横にインラインで表示されます。

MetricDescription
Token全体トークン数(Input + Output)
Cost該当呼び出しのコスト($)
Latencyリクエスト開始~応答完了時間(ms)

HTTP情報​

PropertyDescription
URL呼び出しエンドポイント(host:port + path)
ElapsedHTTP呼び出し所要時間(ms)
Step IDこのLLM呼び出しの固有識別子。ログ検索への遷移基準キーです。

Step ID横のログ検索ボタンをクリックすると、該当Step IDでフィルタリングされたログエクスプローラーが新しいウィンドウで開きます。

エラー情報​

呼び出しにエラーが発生した場合のみ表示されます。

PropertyDescription
Error Classエラークラス名(例: RateLimitError、TimeoutError)
Error Messageエラー詳細メッセージ

プロンプト入力(Input)​

折りたたみ/展開が可能なセクションで、LLMに送信された入力メッセージを表示します。

ヘッダーバッジ

BadgeDescription
Input Tokens入力トークン数
Cached Tokensキャッシュから取得したトークン数(該当する場合のみ表示)
Input Cost ($)入力コスト

メッセージタイプ

LabelDescription
SYSTEMシステムメッセージ。モデルの役割と動作を定義する指示文です。
USERユーザー入力メッセージ。実際のプロンプト内容です。

メッセージがチャンク(chunk)に分割されて収集された場合、自動的に正しい順序で組み立てて完全なテキストとして表示します。

モデル応答(Output)​

折りたたみ/展開が可能なセクションで、モデルが生成した応答を表示します。

ヘッダーバッジ

BadgeDescription
Output Tokens出力トークン数
Reasoning Tokens推論(Reasoning)トークン数(該当する場合のみ表示)
Output Cost ($)出力コスト

メッセージタイプ

LabelDescription
ASSISTANTモデルのテキスト応答です。
TOOL CALLモデルがリクエストしたツール呼び出し(Function Calling)の内容です。
TOOL RESULTツール呼び出しの実行結果です。

プロンプトデルタ​

エージェントやワークフローのように会話のコンテキストを積み上げながらLLMを複数回呼び出す場合、ステップごとにプロンプトの前半がほとんど同じになります。リストで切れて表示される前半だけでは、どのステップが何を新しく尋ねたのかを区別できません。

プロンプトデルタはこの問題を軽減するため、直前のLLM呼び出しと重なる部分は折りたたみ、今回の呼び出しで新しく入った部分だけを本文に残します。トランザクションプロファイルのステップ表で、連続したLLM呼び出しに自動的に適用されます。

デルタ要約行​

プロンプト本文の上にデルタ要約行が1行付きます。左から比較タイプタグ → 減った文字数 → 増えた文字数 → 補助数値の順です。

タグ意味
比較対象なしトランザクション内の最初のLLM呼び出しであるため、比較する直前の呼び出しがありません。
直前と同一 · #{stepNumber}と同一直前の呼び出しのプロンプトと完全に同じです。
直前との比較 · #{stepNumber}との比較直前のプロンプトをそのまま引き継ぎ、後ろに内容が追加されました。最も多い形態です。
コンテキスト縮小前半の一部がなくなりました。積み上がったコンテキストを減らす処理が入った場合に表示されます。
分岐共通の前半を共有していますが、その後ろが分かれました。
新規コンテキスト直前のプロンプトと重なる前半がありません。会話を新しく開始したとみなせます。

補助数値は次のように表示されます。

表示意味
+{n}文字今回の呼び出しで新しく入った文字数
−{n}文字直前の呼び出しにのみあった文字数
±0直前と完全に同じで、増減した文字がない
重なり {n}%今回のプロンプトのうち直前と重なる文字の比率。切り捨てで計算します。
先頭 {n}ブロック共有プロンプトをメッセージブロック単位で見たとき、先頭から共有したブロック数
{a}文字 → {b}文字縮小前後の全体の長さ
ノート

デルタは直前の呼び出しと前半を比較して推定した値です。プロンプト本文がメッセージブロックの配列として解釈されない場合は、ブロック単位の判定を省略し、文字単位でのみ比較します。その場合は「前半をそのまま引き継いだかどうかは判定していない」という案内が併せて表示されます。

ブロック要約表示​

新しく入った部分は、原文をそのまま切り取るのではなくブロックの種類別に要約して表示します。先頭が固定されたスキーマでは、原文をそのまま切り取るとすべての行が同じように見えてしまうためです。

ブロックの種類表示内容
reasoning推論要約の本文のみを表示します。暗号化された本文(encrypted_content)は表示しません。
function_call名前(引数)の形式で表示します。
function_call_output呼び出しID → 結果の形式で表示します。
{role, content}contentの本文を表示します。

再送信された文字数は、要約された長さではなく原文の長さを基準に数えます。要約の長さで数えると、暗号化本文のような大きなフィールドが統計から漏れてしまうためです。

詳細で比較する​

デルタ要約行またはプロンプトをクリックすると、LLM呼び出しの詳細が開きます。詳細の入力(Input)エリアでは、直前の呼び出しと比較した結果を続けて確認できます。

  • 先頭 {n}文字を省略 — 直前と重なって折りたたんだ前半です。展開すると原文を確認できます。
  • 新規 {n}文字 — 今回の呼び出しで新しく入った部分です。
  • 直前の呼び出しにのみあった {n}文字 — 今回の呼び出しで抜けた部分です。
  • 新規部分へ移動ボタンをクリックすると、新しく入った部分にすぐスクロールします。
  • 前のLLM呼び出し · 次のLLM呼び出しボタンで、同じトランザクションの前後の呼び出しを行き来できます。見出しにはLLM呼び出し {現在} / {全体}のように位置が表示されます。

GPU相関関係​

マルチトランザクション(mtidが存在する場合)の場合、Drawer右側に表示されます。LLM呼び出しを処理したPodのGPUインフラストラクチャ状態をリアルタイムチャートで表示し、モデル応答遅延がGPUリソース不足によるものかを判断できます。

GPU情報ヘッダー​

PropertyDescription
PodLLM推論を実行したKubernetes Pod名
Pod詳細ボタンクリックするとKubernetesモニタリングのPod詳細ページが新しいウィンドウで開きます。

GPUチャート​

LLM呼び出し時点の前後5分範囲のGPUメトリクスをラインチャートで表示します。

ChartMetricUnitDescription
GPU UtilizationDCGM_FI_DEV_WEIGHTED_GPU_UTIL%GPU演算リソースの使用率。100%に近い場合、GPUが飽和状態であり、LLM応答遅延の原因となる可能性があります。
VRAM UsageDCGM_FI_DEV_FB_USEDMiBGPUメモリ(Video RAM)使用量。モデルのロードと推論に使用され、不足するとOOMやスワップが発生します。
GPU TemperatureDCGM_FI_DEV_GPU_TEMP°CGPU温度。過熱時に自動スロットリングが発生し、性能が低下します。
Power UsageDCGM_FI_DEV_POWER_USAGEWGPU電力消費。Utilizationと合わせて確認すると、実際の演算負荷を把握できます。
ノート

GPU相関関係は以下の条件がすべて満たされた場合に表示されます。

  • トランザクションがマルチトランザクション(mtid存在)の場合
  • LLM推論を実行したPod名が識別された場合
  • 連携されたKubernetesプロジェクトでDCGM GPUメトリクスが収集されている場合

分析シナリオ​

LLM応答遅延の原因特定​

  1. LLMダッシュボードのヒットマップで応答時間が長いトランザクションをクリックします。
  2. トランザクションプロファイルでLLM HTTPCステップのElapsed時間を確認します。
  3. LLM API詳細Drawerを開いてLatency値とGPU Utilizationチャートを比較します。
  4. GPU Utilizationが高い状態でLatencyが急増している場合、GPUリソース不足が原因です。
  5. GPU Utilizationが低いのにLatencyが高い場合、プロバイダ側の遅延(キュー待ち、Rate Limitなど)を疑います。

エラー発生LLM呼び出しの再現​

  1. トランザクションプロファイルでエラーが表示されたLLM HTTPCステップをクリックします。
  2. DrawerのError ClassとError Messageでエラータイプを確認します。
  3. **プロンプト入力(Input)**セクションでSYSTEMメッセージとUSERメッセージの原本を確認します。
  4. 収集されたプロンプト原本とモデル/パラメータ情報で同一の呼び出しを再現し、問題を分析します。

コストが高いLLM呼び出しの分析​

  1. コスト分析ページでコストが高い時間帯を特定します。
  2. 該当時間帯のトランザクションを検索してプロファイルを開き、LLM HTTPCステップをクリックします。
  3. DrawerでToken数とCostを確認します。
  4. プロンプト入力セクションでInput Tokensバッジを確認し、プロンプトが不必要に長くないか確認します。
  5. Cached Tokensバッジが0の場合、キャッシングが適用されていない呼び出しのため、キャッシング対象のプロンプトかどうかを検討します。

参考​

データ収集構造​

LLM API詳細Drawerは2つのデータソースを組み合わせています。

Data SourceDescriptionUsage
APMトレースHTTP呼び出し情報(URL、host、port、elapsed、エラークラス/メッセージ)、Step IDトランザクションプロファイルでの呼び出し識別およびHTTPレベル情報表示
#LlmCallLogログモデル、プロバイダ、トークン、コスト、成功可否、メッセージ内容プロンプト原本復元およびLLMレベルメタデータ表示

2つのデータはStep IDを基準に連結されます。

メッセージチャンク組み立て​

LLMプロンプトと応答は長くなる場合があるため、サーバーで複数のチャンク(chunk)に分割して収集されます。Drawerはchunk_indexフィールドを基準にチャンクを正しい順序で組み立て、完全なメッセージを復元します。タイプ当たり最大100個のチャンクまでサポートします。