Re Reference AI

インフラ

OpenTelemetryとは

OTel

アプリケーションのトレース・メトリクス・ログを収集するためのベンダー中立なオブザーバビリティ標準

プロトコル相互運用性

ひとことで言うと

アプリの動作状況(処理の流れ・数値・ログ)を、特定の監視サービスに縛られず共通の形式で収集できるようにする仕組み。

概要

OpenTelemetryとは、分散システムやアプリケーションからトレース・メトリクス・ログといった観測データ(テレメトリーデータ)を収集・処理・エクスポートするための、ベンダー中立なAPI・SDK・プロトコルの集合を指す。 各言語向けの計装ライブラリ(SDK)でアプリケーションコード内にトレースやメトリクスの計測点を仕込み、収集したデータをOTLP(OpenTelemetry Protocol)という共通プロトコルでバックエンドに送信する。 送信先はDatadog、Grafana、New Relic、Jaegerなど任意の監視・観測基盤を選べるため、特定ベンダーの計装SDKへの依存を避けられる点が特徴。 LLMアプリケーションの文脈では、LLM呼び出しやRAGパイプラインの各処理ステップをトレースとして記録し、レイテンシやトークン消費量を可観測にする用途でも利用が広がっている。

背景

マイクロサービス化が進み、1つのリクエストが複数サービスをまたぐ分散システムが一般化するにつれ、処理の流れやボトルネックを横断的に把握するオブザーバビリティの必要性が高まった。 しかし監視ベンダーごとに異なる計装SDKを使う必要があり、ベンダーロックインや二重計装の負担が課題となっていた。

歴史

2019年、分散トレーシング仕様のOpenTracingとGoogle発のOpenCensusが統合し、CNCF(Cloud Native Computing Foundation)のプロジェクトとしてOpenTelemetryが発足した。 以降、トレースAPIの安定版に続き、メトリクス・ログのAPIも順次安定版となり、対応言語・エコシステムの拡大が続いている。

アーキテクチャ

API(計装用のインターフェース)、SDK(APIの実装とデータ処理)、Collector(テレメトリーデータの受信・加工・転送を担う独立プロセス)、OTLP(データ送信用の共通プロトコル)から構成される。 アプリケーションはSDKで計装し、Collectorを経由(または直接)してバックエンドへデータを送る構成が一般的。

コード例

Python SDKでのトレース計装例

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter

trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(ConsoleSpanExporter())
)

with tracer.start_as_current_span("my-span"):
    print("Hello, OpenTelemetry!")

利点

  • 特定の監視ベンダーの独自SDKに依存せず、計装コードを変えずに送信先バックエンドを切り替えられる
  • トレース・メトリクス・ログを共通の枠組みで扱えるため、分散システム全体の挙動を横断的に把握しやすい
  • OTLPという共通プロトコルで送信するため、Collectorの設定次第で複数の監視バックエンドへ同時にデータを転送する構成も組みやすい

欠点

  • APIやSDKの仕様・対応状況は言語・機能ごとに成熟度が異なるため、キャッチアップに手間がかかる場合もある
  • Collectorの設計や計装範囲の設計に一定の学習コストがあり、導入初期の設定が煩雑になりやすい
  • 収集するテレメトリーデータの量が増えるほどストレージ・処理コストが増すため、サンプリング等でデータ量を制御する設計が必要になる

比較

  • LLMOpsLLMOpsがLLMアプリケーションの開発・評価・運用プロセス全体を指す広い概念であるのに対し、OpenTelemetryはその中でトレース・メトリクス・ログを収集するためのベンダー中立な技術標準を指す

関連用語

LLMOpsLLM GatewayMLflow

よくある質問

OpenTelemetryとDatadogやNew Relicの違いは?

OpenTelemetryはテレメトリーデータを収集・送信するためのオープンな標準・SDKであり、それ自体はデータの可視化やアラート機能を持たない。DatadogやNew Relicはそのデータを受け取って可視化・分析する監視サービス側にあたり、OpenTelemetryはこうしたサービスへの送信元として利用される。

LLMアプリケーションでOpenTelemetryは何に使われる?

LLM呼び出しやRAGパイプラインの各ステップをスパン(トレースの単位)として記録し、レイテンシやエラー率、トークン消費量などを既存のオブザーバビリティ基盤上で監視する用途に使われる。

参考文献

関連Zenn記事