観測(Logging / Tracing / Metrics)の実装

AI Navigate Original / 2026/5/16

共有:

要点

  • 本番で観測なしは目隠し運転
  • ログ・トレース・メトリクス(遅延/コスト/失敗/拒否)を取る
  • 相関 ID で追跡、版を記録、コスト集計、PII はマスキング
  • 観測を削らない、改善すべての前提が観測

LLM 機能を本番で動かすなら、観測(Observability)は「あれば便利」ではなく最初に仕込む配線です。LLM は同じ入力でも出力が揺れ、料金は呼ぶたびに発生し、失敗は静かに混ざります。何が起き・いくらかかり・どこで失敗したかを後から追えるよう、ログ・トレース・メトリクスの3点をはじめから埋め込みます。本稿は2026年時点の標準である OpenTelemetry の GenAI 規約に沿って、初学者でも組めるよう具体的に整理します。

ユーザー操作 1リクエスト LLM 処理 ログ = 何が起きたか トレース = どこを通ったか メトリクス = どれだけ要したか

FIG.1 1つのリクエストを、ログ・トレース・メトリクスの3つの視点で同時に記録する

01なぜ LLM は特に観測が要るのか

普通の Web API なら「200 が返ったか」「何ミリ秒か」を見れば概ね足ります。LLM 機能はそれだけでは不十分です。理由は次の3つで、いずれも従来の監視では拾えません。

  • 出力が毎回ゆらぐ:同じ質問でも答えが変わる。再現には「そのとき渡したプロンプト・モデル・パラメータ」の記録が要る。
  • 呼ぶたびに課金される:料金は入力・出力のトークン数に比例する。どの機能・どのユーザーが費用を生んでいるかは、トークンを記録しないと分からない。
  • 失敗が静かに混ざる:HTTP は 200 でも、中身が幻覚(事実でない断定)だったり、根拠を引けていなかったりする。「成功扱いの失敗」を見つけるには中身の観測が要る。

02取るべき3種:ログ・トレース・メトリクス

観測の基本は「3本柱(three pillars)」と呼ばれる、ログ・トレース・メトリクスです。役割が違うので、どれか1つでは足りません。

ログ(Logs)

個々の出来事の記録。入力(要約/匿名化)・出力・エラー・どの分岐を通ったか。「あの1件で何が起きたか」を後から読む。

トレース(Traces)

1リクエストの処理経路。プロンプト構築 → 検索 → 生成 → 後処理を1本の流れとして可視化し、遅い/落ちた箇所を特定する。

メトリクス(Metrics)

数値の集計。レイテンシ・トークン数/コスト・失敗率・拒否率を時系列で見て、傾向や異常を検知する。

典型的な分担はこうです。メトリクスでダッシュボードを眺めて「失敗率が上がった」と気づき、トレースで「検索段で落ちている」と当たりを付け、ログでその1件の入力・出力を読んで原因を確かめる。粗→細へ降りていく流れです。

03トレースの構造:スパンが入れ子になる

トレースはスパン(span)という区間の入れ子で表します。1リクエスト全体が親スパン、その中の各処理が子スパンです。エージェント型(道具を呼ぶ AI)では、2026年時点の OpenTelemetry GenAI 規約で次のような木構造が標準になっています。

invoke_agent (リクエスト全体) chat (LLM 呼び出し1回ぶん) execute_tool (検索など) execute_tool (計算など)

FIG.2 親 invoke_agent の下に chat スパン、その下に execute_tool スパンがぶら下がる

すべての子スパンが同じトレース IDを共有するため、バラバラに見えるログを1リクエストとして束ねて追えます。これが「相関 ID」の正体です。LLM の呼び出しスパンには、規約で名前が決まった属性を載せます。代表的なものは次の通りです。

属性(OpenTelemetry GenAI 規約)中身
gen_ai.request.model呼んだモデル名(例:使用中の生成モデルの識別子)
gen_ai.usage.input_tokens入力トークン数(プロンプト側)
gen_ai.usage.output_tokens出力トークン数(生成側)
gen_ai.response.finish_reasons生成が止まった理由(完了・長さ上限・安全停止など)

属性名を自前で決めず規約に合わせておくと、後でダッシュボードや解析ツールがそのまま読めます。なお GenAI 規約は2026年初頭時点で多くが実験的(experimental)扱いのため、属性名は将来変わりうる前提で、計装ライブラリ任せにして自前で埋め込みすぎないのが無難です。

04メトリクスは「金額・速度・品質」で見る

メトリクスは数えるほど増えますが、最初に固定で見る指標を絞ると運用が回ります。LLM では次の組み合わせが定番です。

  • レイテンシ:応答までの時間。平均だけでなく p95(遅い側95パーセンタイル)も見る。「最初の1トークンまで」と「全部出るまで」を分けて測ると体感に近い。
  • トークン数とコスト:入力・出力トークンを記録し、料金へ換算。機能別・ユーザー別に集計できるよう、トレースにタグを付ける。
  • 失敗率:API エラーだけでなく、空応答・タイムアウト・JSON 崩れなど「使えなかった」も数える。
  • 拒否率:安全フィルタ等で生成が止まった割合。急増は入力傾向の変化やプロンプト劣化のサイン。

測れないものは改善できない。観測はコスト・速度・品質すべての改善の前提です。

05実装の勘所:相関・再現・按分・保護

具体的に何を仕込むか。順番に組み込めば、最低限の観測がそろいます。

01

相関 ID を最初に発行する

リクエストの入口で1つの ID(トレース ID)を作り、検索・生成・後処理のすべてのログに付与する。「ユーザー操作 → 内部処理」を1本で追えるようになる。

02

再現に要るものを記録する

プロンプトのテンプレート版数・モデル名・主要パラメータ(温度など)を残す。出力がおかしいとき「そのときの構成」を復元できる。

03

コストを按分できるタグを付ける

トークン記録に機能名・ユーザー/テナント ID を添える。後で「どこに費用が偏っているか」を集計できる。

04

個人情報はログに残さない

入力・出力をそのまま保存しない。要約・匿名化・マスキングを通す。後述の通り、規約も既定では本文を残さない設計。

06ツール選び:まず「入る速さ」を優先

自前で全部書くこともできますが、2026年時点では専用ツールが充実しています。要件に合わせて取捨選択すれば十分で、最初は「導入が速いもの」から始めるのが定石です。料金・無料枠は頻繁に変わるため、採用前に必ず各社の公式ページで最新条件を確認してください。

  • Langfuse:オープンソース(MIT ライセンス)で自前ホスト可。トレース・プロンプト管理・評価を備え、無料枠も用意されたクラウド版もある。データを自分で持ちたいときの定番。
  • Arize Phoenix:オープンソース。OpenTelemetry 上の OpenInference 標準でトレースを取る。LlamaIndex 等との相性がよい。
  • Helicone:API の前段に挟むプロキシ型で導入が最速。複数プロバイダのコストを横断で可視化できる。
  • LangSmith:LangChain / LangGraph との統合が最も深い。同系フレームワークを使うなら有力。
  • Datadog LLM Observability:既に Datadog を使う組織向け。前述の GenAI 規約に対応済み。

共通言語は OpenTelemetry です。アプリ側を OTel で計装しておけば、上記の OTLP 対応バックエンドに送り先を差し替えられます。特定ツールへ深く依存しすぎないための保険になります。

Privacy & Data Protection

「全部ログに残す」が一番危ない

観測のために本文を丸ごと保存すると、プロンプトや出力に含まれる個人情報・機密が観測基盤側に漏れ出します。OpenTelemetry の GenAI 規約も、既定では本文(プロンプト内容・道具の引数)を記録せず、モデル名・トークン数・所要時間といったメタデータだけを残す設計です。本文の取得は明示的に有効化したときだけ。下図の関所で、残すものと落とすものを必ず分けます。

入力 / 出力 PII を含む マスキング / 匿名化 メタデータは残す 生の本文は残さない 観測基盤

FIG.3 関所でマスキングし、メタデータだけを観測基盤へ。本文の保存は要件と規約に整合させてから

保存方針はプライバシー規約・社内規程に必ず整合させること。そして観測は守りの仕組みなので、観測を削る変更は本番リスクです。コスト削減やリファクタの際にログ・トレースを安易に減らさない(減らすなら影響と代替を明示してから)。

07よくあるつまずきと処方箋

  • ログがバラバラで追えない:相関 ID 未付与 → 入口で1つ発行し全処理に伝播させる。
  • 出力の不具合を再現できない:プロンプト版数・モデル・パラメータを残していない → 生成時の構成をスパン属性に記録する。
  • コストの原因が分からない:トークンを総量でしか取っていない → 機能別・ユーザー別タグで按分集計する。
  • 個人情報が観測基盤に流れていた:本文を素通しで保存 → 既定で本文を残さず、必要時だけマスキング越しに有効化。
  • HTTP は成功なのに苦情が来る:中身(幻覚・根拠欠落)を観測していない → 出力の検証結果や根拠の有無も指標化する。

08まとめ:最初の本番化で必ず仕込む

観測は後付けが効きづらい配線です。リリースしてから「あのとき何が起きたか」を知りたくなっても、記録していなければ追えません。だからこそ最初の本番化の段階で、ログ・トレース・メトリクスの3点をまとめて埋め込みます。共通言語は OpenTelemetry、守るべきは個人情報、見る指標は金額・速度・品質。小さく始めても、相関 ID と再現情報と按分タグの3つさえ最初に入れておけば、改善の土台になります。