はじめに
今回、New Relicが OpenTelemetry(OTel)標準の生成AIトレースを「AI Monitoring」に取り込む機能 にネイティブ対応しました!
DifyやLiteLLM環境では、LLM監視用にLangfuseやPhoenixなどを別途Dockerで立ち上げてセルフホストすることが多いですが、別途環境のセルフホストが不要で生成AIアプリで見るべき重要な指標を観測できるようになります。
本記事では、Dify / LiteLLM Proxy環境にこのアップデートを適用して、生成AIアプリからLLMへの呼び出しがどう可視化、分析できるのかを解説します。
試した環境について
Dify 上で記事執筆エージェントを構成しています。
マルチエージェント構成で組んでおり、各エージェントの役割は以下になります。
| エージェント | 役割 |
|---|---|
| 下調べエージェント | リサーチ担当のエージェント。与えられたテーマについて、記事を書くために必要な事実・論点・背景・具体例を箇条書きで整理する。 |
| 執筆エージェント | 執筆担当のエージェント。リサーチメモをもとに、読みやすい記事を日本語で執筆する。 |
| 校正エージェント | 校正担当のエージェント。執筆された記事を推敲し、完成版を出力する。 |
3つのAIエージェント(下調べ→執筆→校正)を順番に通す Chatflow を動かし、その全LLM呼び出しを LiteLLM Proxy 経由にして、New Relic の AI Monitoring にOpenTelemetry で可視化する構成を今回試しています。
実行環境はDockerを利用しています。
ユーザー入力
│
▼
┌─────────────────────────── Dify (Chatflow) ───────────────────────────┐
│ Agent1: 下調べ → Agent2: 執筆 → Agent3: 校正 │
└───────────────────────────────┬───────────────────────────────────────┘
│ OpenAI 互換 API 呼び出し
▼
┌──────────────────┐
│ LiteLLM Proxy │ … 全LLM呼び出しの「関所」
│ (localhost:4000)│
└───────┬──────┬───┘
│ │ OpenTelemetry (gen_ai.* スパン / メトリクス)
LLM 呼び出し │ ▼
│ ┌──────────────────────────┐
▼ │ New Relic AI Monitoring │
┌──────────┐ (otlp.nr-data.net) │
│ LLM │ └──────────────────────────┘
└──────────┘
LiteLLM Proxyの設定
Dify の各LLMノード → LiteLLM Proxy → Gemini という経路になり、Proxy が全LLM呼び出しを OpenTelemetry スパンとして New Relic に送信する設定になっています。
# LiteLLM Proxy をローカルで起動する Docker Compose。
#
services:
litellm:
# OTel 依存を同梱したカスタムイメージをビルドして使う (Dockerfile 参照)
build:
context: .
dockerfile: Dockerfile
image: litellm-proxy-otel:local
container_name: litellm-proxy
restart: unless-stopped
ports:
- "4000:4000"
volumes:
- ./config.yaml:/app/config.yaml:ro
command: ["--config", "/app/config.yaml", "--port", "4000"]
environment:
# --- モデル呼び出し用 ---
GEMINI_API_KEY: ${GEMINI_API_KEY}
GROQ_API_KEY: ${GROQ_API_KEY}
LITELLM_MASTER_KEY: ${LITELLM_MASTER_KEY}
# --- OpenTelemetry エクスポート (New Relic 宛) ---
OTEL_EXPORTER: "otlp_http"
# New Relic OTLP エンドポイント (US)。EU の場合は https://otlp.eu01.nr-data.net:4318
OTEL_ENDPOINT: ${NEW_RELIC_OTLP_ENDPOINT:-https://otlp.nr-data.net:4318}
# New Relic ライセンスキーを api-key ヘッダで送る
OTEL_HEADERS: "api-key=${NEW_RELIC_LICENSE_KEY}"
# New Relic 上でのエンティティ名 (サービス名)
OTEL_SERVICE_NAME: ${OTEL_SERVICE_NAME:-litellm-proxy}
OTEL_ENVIRONMENT_NAME: ${OTEL_ENVIRONMENT_NAME:-development}
# 最新の GenAI セマンティック規約で出力 (New Relic AI Monitoring が解釈する gen_ai.* 準拠)
OTEL_SEMCONV_STABILITY_OPT_IN: "gen_ai_latest_experimental"
# LLM呼び出しごとに専用スパンを出す (トレースを見やすくする)
USE_OTEL_LITELLM_REQUEST_SPAN: "true"
# メトリクスも出力 (トークン使用量・コスト・レイテンシ)
LITELLM_OTEL_INTEGRATION_ENABLE_METRICS: "true"
# イベント(ログ)も出力。GenAI のプロンプト/補完を OTLP logs(events) として送る。
# semconv モードでは gen_ai.client.inference.operation.details イベントになる。
# ※ content capture が有効なときのみ中身が乗る (下の OTEL_CAPTURE_CONTENT 参照)。
LITELLM_OTEL_INTEGRATION_ENABLE_EVENTS: "true"
# OTLP logs のエクスポーター (events を New Relic に送るために必要)
OTEL_LOGS_EXPORTER: "otlp_http"
# OTel エクスポートの診断ログを出す (疎通確認用。安定したら外してよい)
DEBUG_OTEL: "True"
# --- プロンプト/応答の内容キャプチャ ---
# 既定は内容を送らない (NO_CONTENT)。
# プロンプトと応答を New Relic に送って中身まで見たい場合は SPAN_AND_EVENT に変更。
# ※ PII・機密情報が送られる可能性があるため、組織のデータ方針を確認のうえで有効化すること。
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: ${OTEL_CAPTURE_CONTENT:-NO_CONTENT}
# Proxy はホストの 4000 番ポートで公開される。
# Dify コンテナからは http://host.docker.internal:4000 でこの Proxy に到達できる
# (Docker Desktop では host.docker.internal がホストを指す)。
# こうすることで Dify の内部ネットワーク名に依存せず、構成が壊れにくい。
# LiteLLM Proxy に OpenTelemetry のエクスポート依存を同梱したカスタムイメージ。
#
# 公式の litellm イメージには OTel SDK / OTLP エクスポーターが含まれていないため、
# callbacks: ["otel"] を指定しても送信されない。ここで必要パッケージを追加する。
FROM ghcr.io/berriai/litellm:main-latest
# OpenTelemetry の API / SDK / OTLP(HTTP) エクスポーター + instrumentation。
# (New Relic へ otlp_http で送るために必要)
#
# ※ opentelemetry-instrumentation が無いと「トレース(Span)は出るがメトリクスとログが
# エクスポートされない」症状になる。公式 litellm イメージはこれを同梱していないため、
# ここで明示的に追加する (BerriAI/litellm#22762 参照)。
USER root
RUN /app/.venv/bin/python -m ensurepip --upgrade \
&& /app/.venv/bin/python -m pip install --no-cache-dir \
opentelemetry-api \
opentelemetry-sdk \
opentelemetry-exporter-otlp-proto-http \
opentelemetry-instrumentation
# LiteLLM Proxy の環境変数サンプル。
# === Gemini ===
# Google AI Studio で取得した API キー: https://aistudio.google.com/app/apikey
GEMINI_API_KEY=your-gemini-api-key-here
# === Groq ===
# https://console.groq.com で取得した API キー (無料枠が広い。config.yaml の実体で使用)
GROQ_API_KEY=your-groq-api-key-here
# === LiteLLM Proxy ===
# Proxy への接続キー。Dify 側の「API Key」にこの値を設定します。
# sk- で始まる任意の文字列にしてください。
LITELLM_MASTER_KEY=sk-litellm-local-master-key
# === New Relic (OpenTelemetry エクスポート先) ===
# New Relic のライセンスキー (ingest 用)。one.newrelic.com の API keys ページで取得。
NEW_RELIC_LICENSE_KEY=your-new-relic-license-key-here
# OTLP エンドポイント。アカウントのデータセンターに合わせて設定。
# US: https://otlp.nr-data.net:4318
# EU: https://otlp.eu01.nr-data.net:4318
# JP: https://otlp.jp.nr-data.net:443 (JP はポート 443)
NEW_RELIC_OTLP_ENDPOINT=https://otlp.nr-data.net:4318
# New Relic 上でのサービス(エンティティ)名と環境名
OTEL_SERVICE_NAME=litellm-proxy
OTEL_ENVIRONMENT_NAME=development
# === プロンプト/応答の内容キャプチャ ===
# NO_CONTENT : 内容を送らない (既定・安全)
# SPAN_AND_EVENT : プロンプトと応答の中身も New Relic に送る
# ※ 有効化すると PII や機密情報が送られる可能性があります。組織のデータ方針を確認してください。
OTEL_CAPTURE_CONTENT=NO_CONTENT
Difyの設定
# ===== OpenTelemetry (New Relic AI Monitoring) =====
# OpenTelemetryの設定箇所のみ記載
ENABLE_OTEL=true
OTLP_BASE_ENDPOINT=https://otlp.nr-data.net:4318
# New Relic ライセンスキー
OTLP_API_KEY=**
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_TYPE=otlp
OTEL_SAMPLING_RATE=1.0
データを確認
DifyのUIで作成したエージェントに対してテストのプロンプトを入力して、LLMからの出力結果を取得します。

AIトレース
Difyのアプリから呼び出されたLLMへの呼び出しがトレースとして確認できるようになります。LLMの呼び出し毎のトークンの消費傾向や、各AIエージェントのどこで時間がかかっているのか、エラーが発生しているかなどトレースから追うことが可能です。



Model Inventory
LiteLLM Proxyを通して呼び出している複数LLMのモデル毎のトークンの消費傾向やエラーなどの品質状況が専用のUIですぐに可視化されます。どのLLMのモデルが品質、コスト面で最適化なのかをサービスでの実際の利用状況をふまえて見極めることができます。



終わりに
Dify / LiteLLM Proxyのような生成AIアプリの実行環境において、「OTel標準で吐き出して、New Relic AI Monitoringで一元管理する」 パターンは、現在のLLMオブザーバビリティにおける最適解のひとつです。
ぜひお試しください!!
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

