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の設計や計装範囲の設計に一定の学習コストがあり、導入初期の設定が煩雑になりやすい
- 収集するテレメトリーデータの量が増えるほどストレージ・処理コストが増すため、サンプリング等でデータ量を制御する設計が必要になる
比較
- LLMOps — LLMOpsがLLMアプリケーションの開発・評価・運用プロセス全体を指す広い概念であるのに対し、OpenTelemetryはその中でトレース・メトリクス・ログを収集するためのベンダー中立な技術標準を指す
関連用語
よくある質問
OpenTelemetryとDatadogやNew Relicの違いは?
OpenTelemetryはテレメトリーデータを収集・送信するためのオープンな標準・SDKであり、それ自体はデータの可視化やアラート機能を持たない。DatadogやNew Relicはそのデータを受け取って可視化・分析する監視サービス側にあたり、OpenTelemetryはこうしたサービスへの送信元として利用される。
LLMアプリケーションでOpenTelemetryは何に使われる?
LLM呼び出しやRAGパイプラインの各ステップをスパン(トレースの単位)として記録し、レイテンシやエラー率、トークン消費量などを既存のオブザーバビリティ基盤上で監視する用途に使われる。
参考文献
- Official WebsiteOpenTelemetry
- DocumentationOpenTelemetry Docs
- GitHubopen-telemetry/opentelemetry-specification