本文へスキップ

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

AI Agent ObservabilityのLLMトレース詳細は、LLMトランザクションのステップ、プロンプト、トークン、コスト、実行フローを1つの画面で確認するウィンドウです。テーブルビューでLLM APIステップをクリックするとLLM API Callパネルが開き、プロンプト入力/出力、トークン使用量、コスト、エラー情報とGPUインフラストラクチャの相関関係まで確認できます。

ノート

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

LLM API分析

アクセス方法​

  1. ダッシュボードのヒットマップや分析 > ヒットマップでエリアをドラッグするか、プロンプトおよびレスポンス検索、リアルタイムプロンプト、ユーザーおよびセッション検索でプロンプトをクリックして、LLMトレース詳細を開きます。
  2. LLMトレース詳細のテーブルビューで**[LLM API]**ステップをクリックします。
  3. 右側にLLM API Callパネルが開きます。

LLMトレース詳細​

LLMトレース詳細は新しいウィンドウで開きます。ヒットマップをドラッグして開いた場合は、ウィンドウ上部にトレース分析のタイトルと照会件数が表示され、左側に区間のトランザクション一覧、右側に選択したトランザクションの詳細が表示されます。プロンプトをクリックして開いた場合は、ウィンドウ上部にトランザクション情報のタイトルが表示され、該当トランザクションの詳細のみが表示されます。

一覧の上部では、全体 / エラーで絞り込み、カラム設定、TXT、CSVダウンロード、検索、AI分析を使用できます。AI分析はWhaTap AIが有効な環境でのみ表示されます。タイトル行の右側にあるURLコピーをクリックすると、現在の照会画面のアドレスがコピーされます。一覧のカラムは、No、アプリケーション名(oname)、トランザクション、経過時間、開始時間、終了時間、LLM API呼び出し件数、LLM API呼び出し時間(ms)、エラーメッセージ、マルチトランザクションIDです。

トレース分析の区間一覧

タブ説明
レコード要約経過、LLM待機、トークン、キャッシュヒット率、コスト、TTFT分布とトランザクション情報、エンドポイント・終了理由の分布、モデル別集計
テーブルビューステップ表。LLM APIステップごとにInput/Output要約、評価スコア、プロンプトデルタ要約行を表示します。
トラジェクトリービューこのトランザクションが属するトラジェクトリーの実行フロー。単独実行ではなく、進行中のトランザクションが残っている場合は停止ボタンも表示されます。

トラジェクトリービュータブ

条件なしでこのウィンドウを開くと、「照会条件がありません。ヒットマップをドラッグするか、プロンプトログから再度開いてください。」と表示されます。

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

LLM API Callパネル

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

Identityタグ​

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

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

主要数値指標​

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

MetricDescription
トークン全体トークン数(Input + Output)
コスト該当呼び出しのコスト。$1未満は¢(セント)で表示します。
レイテンシリクエスト開始から応答完了までにかかった時間。1秒未満はms、1秒以上は秒単位で表示します。

HTTP情報​

PropertyDescription
URL呼び出しエンドポイント(host:port + path)
経過時間HTTP呼び出しにかかった時間。1秒未満はms、1秒以上は秒単位で表示します。
ステップIDこのLLM呼び出しの固有識別子。ログ検索ボタンで該当ステップIDのログを照会する基準キーです。

ステップID横のログ検索ボタンをクリックすると、該当ステップIDとトランザクションでフィルタリングされたログエクスプローラーが新しいタブで開きます。このボタンは、ログ照会権限があり、この呼び出しのログが照会された場合にのみ表示されます。

エラー情報​

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

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

Inputメッセージ​

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

ヘッダーバッジ

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

メッセージタイプ

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

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

Outputメッセージ​

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

ヘッダーバッジ

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

メッセージタイプ

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

プロンプトデルタ​

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

プロンプトデルタはこの問題を軽減するため、直前の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 API Callパネルが開きます。パネルの入力(Input)エリアでは、直前の呼び出しと比較した結果を続けて確認できます。

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

GPU相関関係​

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

GPU情報ヘッダー​

PropertyDescription
PodLLM推論を実行したKubernetes Pod名
Pod一覧ボタンクリックすると、KubernetesモニタリングのPod一覧がこのPod名でフィルタリングされた状態で新しいタブに開きます。

GPUチャート​

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

ChartMetricUnitDescription
GPU UtilizationDCGM_FI_DEV_GPU_UTIL(MIGインスタンスはDCGM_FI_PROF_GR_ENGINE_ACTIVE × 100)%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 APIステップの経過時間を確認します。
  3. LLM APIステップをクリックしてLLM API Callパネルを開き、レイテンシ値とGPU Utilizationチャートを比較します。
  4. GPU Utilizationが高い状態でレイテンシが急増している場合、GPUリソース不足が原因です。
  5. GPU Utilizationが低いのにレイテンシが高い場合、プロバイダ側の遅延(キュー待ち、Rate Limitなど)を疑います。

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

  1. LLMトレース詳細の一覧でエラーフィルターを選択し、テーブルビューでエラーが表示されたLLM APIステップをクリックします。
  2. LLM API Callパネルのエラークラスとエラーメッセージでエラータイプを確認します。
  3. InputメッセージセクションでSYSTEMメッセージとUSERメッセージの原本を確認します。
  4. 収集されたプロンプト原本とモデル/パラメータ情報で同一の呼び出しを再現し、問題を分析します。

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

  1. コスト分析ページでコストが高い時間帯を特定します。
  2. コスト推移チャートで該当時点をクリックしてプロンプトおよびレスポンス検索を開き、プロンプトをクリックしてLLMトレース詳細を開いた後、LLM APIステップをクリックします。
  3. LLM API Callパネルでトークン数とコストを確認します。
  4. InputメッセージセクションでInputトークンバッジを確認し、プロンプトが不必要に長くないか確認します。
  5. キャッシュトークンバッジがない場合、キャッシュが適用されていない呼び出しのため、キャッシング対象のプロンプトかどうかを検討します。

停止またはブロックされた呼び出しの確認​

  1. ダッシュボードのヒットマップや分析 > ヒットマップで該当時点をドラッグしてLLMトレース詳細を開き、一覧から該当トランザクションを選択します。
  2. テーブルビューでメッセージステップを確認します。トラジェクトリーを停止した場合はWhaTap: LLM trajectory stopped by control、ブロックされたユーザーの呼び出しの場合はWhaTap: LLM call blocked for user …が表示されます。
  3. WhaTap: LLM trajectory stopped by controlメッセージがある場合は、アプリケーションエラーではなく、トラジェクトリーの停止によって終了したトランザクションです。WhaTap: LLM call blocked for user …メッセージがある場合は、ユーザーブロック設定によってブロックされた呼び出しであり、アプリケーションには接続エラー(例: APIConnectionError)として返されます。

参考​

データ収集構造​

LLM API Callパネルは2つのデータソースを組み合わせています。

Data SourceDescriptionUsage
APMトレースHTTP呼び出し情報(URL、host、port、elapsed、エラークラス/メッセージ)、ステップIDテーブルビューのLLM APIステップ識別およびHTTPレベル情報表示
#LlmCallLogログモデル、プロバイダ、トークン、コスト、メッセージ内容プロンプト原本復元およびLLMレベルメタデータ表示

2つのデータはステップIDを基準に連結されます。

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

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