監視・オブザーバビリティ

OpenTelemetry おーぷんてれめとりー

OpenTelemetryOTELオブザーバビリティ計装テレメトリCNCF
OpenTelemetryについて教えて

簡単に言うとこんな感じ!

「メトリクス・ログ・トレースをどんな監視ツールにも送れる共通の標準」だよ。特定の監視ベンダーに縛られずに計装(データ収集の仕込み)ができるから、Datadog → Prometheusに乗り換えたくなっても計装のコードを書き直さなくていいんだ。


OpenTelemetryとは

OpenTelemetry(OTel)とは、アプリケーションのテレメトリデータ(メトリクス・ログ・トレース)を収集・変換・エクスポートするためのオープンソース標準です。CNCF(Cloud Native Computing Foundation)のプロジェクトとして管理されており、2019年にOpenTracingとOpenCensusが統合されて誕生しました。

これまで監視ツールごとに異なる計装ライブラリが必要でしたが、OpenTelemetryでは一度計装すれば、バックエンドの監視ツールを問わずデータを送信できます。DatadogにもPrometheusにも、CloudWatchにもJaegerにも対応しています。これをベンダーニュートラル(Vendor-neutral)と呼びます。

OpenTelemetryは主に4つのコンポーネントで構成されます。①API(計装の抽象インターフェース)、②SDK(言語別の実装ライブラリ)、③Collector(エージェント/サービスとして動作する収集・変換・転送パイプライン)、④OTLP(OpenTelemetry Line Protocol:データ転送プロトコル)です。


OpenTelemetryの構成要素

コンポーネント役割
OTel API計装コードを書くためのインターフェース。ベンダー非依存
OTel SDKAPIの実装。JavaPythonGoNode.js等の各言語向けに提供
自動計装コードを書かずにフレームワーク・ライブラリを自動で計装
OTel Collector受信→処理→エクスポートのパイプライン。エージェントまたはサービスとして動作
OTLPOTel独自のデータ転送プロトコル(gRPC/HTTP)

Collectorのパイプライン

Receiver(受信)→ Processor(変換・フィルタ)→ Exporter(転送)
  • Receiver:Jaeger・Zipkin・Prometheus・OTLPなど多様な形式で受信
  • Processor:バッチ処理・サンプリング・データ加工
  • Exporter:CloudWatch・Datadog・Jaeger・Prometheusなどに送信

歴史と背景

  • 2016年OpenTracing(CNCF)が分散トレーシングAPIを標準化
  • 2018年OpenCensus(Google)が計装ライブラリを提供。両者が競合
  • 2019年5月:両プロジェクトが統合しOpenTelemetryとして誕生
  • 2021年:トレースのSDKがGA(安定版)。Kubernetesに次いでCNCFで2番目の活発さ
  • 2022年:メトリクスのSDKがGA
  • 2023年:ログのSDKがGA。三本柱すべてが安定版に

対応言語とバックエンド

OpenTelemetryのエコシステム 計装言語 Java / Kotlin Python Go Node.js .NET / C# Ruby / PHP 他 OTel Collector Receive → Process → Export バックエンド Prometheus Jaeger / Tempo Datadog / Dynatrace CloudWatch Azure Monitor Splunk 他

関連する規格・RFC

規格内容
W3C Trace ContextOpenTelemetryが採用するトレースコンテキスト伝播の標準
OpenMetricsPrometheusフォーマットの標準化。OTelのメトリクス形式と連携
OTLP仕様OpenTelemetryが独自定義したデータ転送プロトコル

関連用語