OpenTelemetry (OTel・2019)(オープンテレメトリ)
CNCF 2019年公開のObservability 統一規格。OpenCensus + OpenTracing 統合、Traces / Metrics / Logs を統一APIで収集、ベンダロックイン回避の業界標準。
概要
OpenTelemetry (OTel) はCNCF (Cloud Native Computing Foundation) が2019年5月にOpenCensus (Google 2017) + OpenTracing (CNCF 2016) を統合して公開したObservability 統一規格。Traces (分散トレーシング) / Metrics (時系列) / Logs (ログ) の3 Pillars を統一APIで収集する規格 + SDK・Collector (OTLP プロトコル)・OTel-Collector (中継 / 加工)。Datadog / New Relic / Honeycomb / Grafana / AWS X-Ray / Azure Monitor 等の主要Observability 製品が対応、ベンダロックイン回避でObservability の業界標準に。
OpenTelemetry 主要マイルストーン
| 年月 | 出来事 |
|---|---|
| 2016 | OpenTracing (CNCF) 公開 |
| 2017 | OpenCensus (Google) 公開 |
| 2019-05 | 両者合併 → OpenTelemetry 発表 |
| 2021-02 | OpenTelemetry Tracing 1.0 |
| 2021-12 | OpenTelemetry Metrics 1.0 |
| 2023-05 | OpenTelemetry Logs 1.0 |
| 2023-11 | CNCF Incubating → Graduated (2024-09 議論中) |
| 2024 | OTel Profile Signal Working Group |
3 Pillars of Observability
| Signal | 内容 |
|---|---|
| Traces | 分散トレーシング (Request flow 跨ぎ Service) |
| Metrics | 時系列メトリクス (CPU / Memory / Latency) |
| Logs | ログイベント (構造化 / 非構造化) |
| Profiles (将来) | CPU/Memory プロファイル |
OTel は全Signal を統一API で扱える唯一の規格。
OpenTelemetry コンポーネント
| コンポーネント | 役割 |
|---|---|
| API | 言語別Standard API |
| SDK | API 実装 (Auto-instrumentation 含) |
| Auto-instrumentation | ライブラリ自動計測 (Java Agent / Python等) |
| Collector | OTel-Collector (中継 / 加工 / Export) |
| OTLP | OTLP Protocol (Wire Format・gRPC/HTTP) |
| Semantic Conventions | Standard Attribute 名 (http.url 等) |
| Exporters | Backend 別出力 (Jaeger / Zipkin / Prometheus / Datadog等) |
OTLP (OpenTelemetry Protocol)
OTel データの転送プロトコル:
- gRPC / HTTP/Protobuf / HTTP/JSON
- Trace / Metric / Log 全Signal 対応
- Protobuf スキーマ統一
- Streaming 対応
- 2021年安定化
サポート言語 (Auto-instrumentation)
| 言語 | サポート |
|---|---|
| Java | ◎ Auto-Agent (-javaagent) |
| Python | ◎ opentelemetry-bootstrap |
| Node.js | ◎ Auto-instrumentation Library |
| Go | ◎ (Manual + 限定Auto) |
| Rust | ◎ |
| C++ | ◎ |
| C# / .NET | ◎ Auto-instrumentation |
| Ruby | ◎ |
| PHP | ◎ |
| Swift | ◎ |
| JavaScript (Browser) | Beta |
主要 Backend 対応
| Backend | OTel サポート |
|---|---|
| Jaeger | ◎ |
| Zipkin | ◎ |
| Prometheus (Metrics) | ◎ |
| Grafana Tempo | ◎ |
| Grafana Mimir | ◎ |
| Grafana Loki | ◎ |
| Datadog | ◎ |
| New Relic | ◎ |
| Honeycomb | ◎ |
| Lightstep / ServiceNow | ◎ |
| AWS X-Ray | ◎ |
| Azure Monitor | ◎ |
| Google Cloud Trace | ◎ |
| Elastic APM | ◎ |
| Dynatrace | ◎ |
| Splunk | ◎ |
ほぼ全Observability 製品がOTLP 受信対応・既存資産活用可能。
Auto-Instrumentation 例 (Java)
# Java Agent ダウンロード
wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
# JVM オプションで起動
java -javaagent:opentelemetry-javaagent.jar \
-Dotel.service.name=my-service \
-Dotel.exporter.otlp.endpoint=http://collector:4317 \
-jar my-app.jar
コード変更不要・Spring / HTTP Client / DB Client 等の主要ライブラリを自動計測。
OTel Collector アーキテクチャ
[Application]
↓ OTLP
[OTel Collector]
├── Receivers: OTLP / Jaeger / Zipkin / Prometheus
├── Processors: Batch / Attribute / Filter / Sampling
└── Exporters: Datadog / NewRelic / Grafana / etc
中央Collector で:
- 認証 / 暗号化
- データ加工 (PII Masking)
- Sampling (大量Trace から1%抜粋)
- Multi-Backend 並列送信
- バッファリング (Backend 障害時)
Semantic Conventions
OTel の Attribute Naming 規約 (Standard 化):
http.url, http.method, http.status_code
db.system, db.statement
messaging.system, messaging.destination
service.name, service.version
host.name, host.arch, os.type
ベンダ間で Attribute 名統一・Dashboard / Query 共通化。
関連用語との違い
- vs OpenTracing / OpenCensus: 統合後継
- vs Datadog APM / New Relic: OSS 規格 / 商用製品
- vs Jaeger / Zipkin: Tracing 実装 / 規格
FAQ
Q1: OTel + Prometheus? A: OTel Metrics を Prometheus と互換に出力可・「OTel SDK で計装 + Prometheus 形式でExport」が一般的構成。
Q2: 既存Jaeger / Zipkin 移行? A: OTel Collector で「Jaeger / Zipkin Receiver」を有効化・既存資産をそのままOTel エコシステム内で活用可。
Q3: Datadog / New Relic 投資保護? A: OTel SDK で計装 → OTLP で送信 → Datadog / New Relic 受信。将来ベンダ切替時もコード変更不要・ベンダロックイン解消。