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 ダッシュボード

実践的な知識は関連書籍でも得られる。

関連用語