LLMアプリのトレース設計まとめ(LiteLLM、OpenLLMetry、Langfuse、Instana)

# はじめに
最近のAIエージェントツール（例：GitHub Copilot Agent、Claude Code、Clineなど）の登場により、エンジニアリングの開発体験は急速に進化しています。

本記事では、こうした AIエージェントを支えるアプリケーションやLLM呼び出しの内部で「何が起きているか」を可視化・トレースする方法 を整理します。

特に、LiteLLM を中心としたトレース構成に注目し、OpenTelemetry / OpenLLMetry / Langfuse / Instana といったツールの使い分けや連携パターンについて解説します。
# LLMアプリのトレース設計まとめ

LLMアプリケーション開発におけるLiteLLM、OpenLLMetry、Langfuse、Instanaの役割と使い分けを整理しました。

## 目的

- **LLM呼び出しのトレース**
- **アプリ全体の可観測性の向上**

---

## ツール比較

---

| ツール           | カテゴリ                  | 主な役割                                                         | トレース範囲      |
| ------------- | --------------------- | ------------------------------------------------------------ | ----------- |
| LiteLLM       | SDK・Proxy             | LLM呼び出し、Span自動生成                                             | LLM呼び出しのみ   |
| OpenLLMetry   | Tracer（SDK）           | LLM＋アプリ用のSpan生成                                              | LLM＋アプリ全体   |
| OpenTelemetry | Tracer（SDK）           | 一般的なアプリのSpan生成                                               | アプリ全体       |
| Langfuse      | Tracer（SDK）・Backend   | プロンプト分析、応答の分析、Span生成・可視化                                     | LLM内部＋アプリ全体 |
| Instana       | Backend・Tracer（Agent） | トレース分析・可視化、Instana Agentで通常アプリ用Tracer提供（LLM用にはOpenLLMetry利用） | アプリ全体       |

---

## トレース送信の仕組み

```mermaid
flowchart TD
  subgraph LLMアプリ
    ServiceA[ServiceA（通常アプリ）]  -->|トレース - 計装 | OpenTelemetry["OpenTelemetry SDK (OTLP_Exporter) "]
    ServiceB[ServiceB（通常アプリ）]  -->|トレース - 計装 | InstanaAgent["Instana Agent (tracer)"]
    ServiceC[ServiceC（通常アプリ）]  -->|トレース - 計装 | InstanaAgent["Instana Agent (tracer)"]
    ServiceD -->|トレース - 計装 | OpenLLMetry["OpenLLMetry SDK (OTLP_Exporter)"]
    ServiceD -->|トレース - 計装 | LangfuseSDK["Langfuse SDK"]
    ServiceD -->|LLM呼び出し| LiteLLM[LiteLLM]
    LiteLLM -->|呼び出し元| ServiceD
  end

  %% OpenTelemetry系トレーシング
  OpenTelemetry --> Instana["Instana Backend"]
  InstanaAgent --> Instana["Instana Backend"]
  OpenLLMetry --> Instana["Instana Backend"]

  %% LangfuseはOpenTelemetry非依存で独自送信
  LangfuseSDK --> LangfuseBackend[Langfuse Backend]

  %% LiteLLM 経由の各種LLM呼び出し
  LiteLLM --> OpenAI[OpenAI]
  LiteLLM --> WatsonX[watsonx.ai]
  LiteLLM --> Bedrock[Am Bedrock]
```

---

## 各ツールの詳細

### LiteLLM

- OpenAI/Azure OpenAI/Claude/Bedrockへの呼び出し
- ProxyとSDKモードあり
- Spanを自動生成、OpenLLMetryと連携

### OpenLLMetry

- OpenTelemetryのLLM特化型SDK
- Span自動生成・送信
- LiteLLMとの親和性が高い

### Langfuse

- プロンプトや応答の詳細分析
- 品質改善、A/Bテスト用途
- Span生成・可視化

### Instana

- トレース分析・可視化プラットフォーム
- 通常アプリはInstana AgentをTracerとして提供
- LLM特化用途ではOpenLLMetryを利用

### OpenTelemetry

- オープンソースのトレースフレームワーク
- アプリ全体のトレース生成と送信

---

## 構成パターン例

### (1) LiteLLM ＋ OpenLLMetry

- LiteLLMでSpan生成
- OpenLLMetryでInstanaに送信

### (2) OpenTelemetry単体

- アプリ内で直接設定
- InstanaやLangfuseへ送信

### (3) Langfuse SDK

- LLM特化の分析用途
- プロンプト、応答の詳細分析に適する

---

## よくある誤解

- LiteLLM単体でInstana送信可能

  - 実際はExporter設定が別途必要

- Gatewayが必須

  - アプリ内Exporterでも十分可能

---

## 用途別の推奨構成

| 用途                  | 推奨構成                                            |
| ------------------- | ----------------------------------------------- |
| LLMとアプリ全体のトレース      | LiteLLM＋OpenLLMetry＋Instana                     |
| 一般的なアプリのトレースのみ      | OpenTelemetry＋Instana または Instana Agent＋Instana |
| LLM特化のプロンプトや応答の詳細分析 | LiteLLM＋Langfuse                                |

---

LLMアプリ開発の参考としてご活用ください。