OpenTelemetry
メトリクス、ログ、トレースを統一的に収集するオブザーバビリティのオープン標準
オブザーバビリティ基礎
OpenTelemetry とは
OpenTelemetry (OTel) は、CNCF がホストするオブザーバビリティのオープン標準で、メトリクス、ログ、トレースを統一的な API・SDK・プロトコルで収集する。ベンダーロックインを避け、バックエンド (X-Ray, Datadog, Grafana) を自由に切り替えられる。
アーキテクチャ
アプリケーション (OTel SDK)
↓ OTLP (OpenTelemetry Protocol)
OTel Collector
↓ エクスポーター
CloudWatch / X-Ray / Datadog / Grafana
| コンポーネント | 役割 |
|---|---|
| API | 計装のインターフェース |
| SDK | API の実装 (言語ごと) |
| Collector | テレメトリの受信・処理・送信 |
| OTLP | 標準プロトコル |
ADOT (AWS Distro for OpenTelemetry) Layer を追加するだけで、Lambda の自動計装が有効になる。
手動計装
import { trace, SpanStatusCode } from '@opentelemetry/api';
const tracer = trace.getTracer('order-service');
async function processOrder(orderId: string) {
const span = tracer.startSpan('processOrder');
span.setAttribute('order.id', orderId);
try {
const result = await db.getItem(orderId);
span.setStatus({ code: SpanStatusCode.OK });
return result;
} catch (e) {
span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });
throw e;
} finally {
span.end();
}
}
OTel vs ベンダー固有 SDK
| 観点 | OpenTelemetry | ベンダー固有 |
|---|---|---|
| ロックイン | なし | あり |
| バックエンド切り替え | Collector の設定変更のみ | コード変更が必要 |
| 機能の豊富さ | 標準的 | ベンダー独自機能 |
| コミュニティ | CNCF (大規模) | ベンダー依存 |
Collector の設定
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
exporters:
awsxray: {}
awsemf: {}
service:
pipelines:
traces:
receivers: [otlp]
exporters: [awsxray]
metrics:
receivers: [otlp]
exporters: [awsemf]
AWS での OTel
| サービス | 連携 |
|---|---|
| ADOT Collector | ECS, EKS, Lambda で動作 |
| X-Ray | トレースのバックエンド |
| CloudWatch | メトリクス・ログのバックエンド |
| Managed Grafana | ダッシュボード |
実践的な知識は関連書籍でも得られる。