OpenTelemetry

メトリクス、ログ、トレースを統一的に収集するオブザーバビリティのオープン標準

オブザーバビリティ基礎
OpenTelemetry」の技術書を見る (8 冊) →

OpenTelemetry とは

OpenTelemetry (OTel) は、CNCF がホストするオブザーバビリティのオープン標準で、メトリクス、ログ、トレースを統一的な API・SDK・プロトコルで収集する。ベンダーロックインを避け、バックエンド (X-Ray, Datadog, Grafana) を自由に切り替えられる。

アーキテクチャ

アーキテクチャを図で示す。

アプリケーション (OTel SDK)
  ↓ OTLP (OpenTelemetry Protocol)
OTel Collector
  ↓ エクスポーター
CloudWatch / X-Ray / Datadog / Grafana
コンポーネント役割
API計装のインターフェース
SDKAPI の実装 (言語ごと)
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

OTel とベンダー固有 SDK の違いを以下にまとめる。

観点OpenTelemetryベンダー固有
ロックインなしあり
バックエンド切り替えCollector の設定変更のみコード変更が必要
機能の豊富さ標準的ベンダー独自機能
コミュニティCNCF (大規模)ベンダー依存

Collector の設定

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

AWS での OTel を以下にまとめる。

サービス連携
ADOT CollectorECS, EKS, Lambda で動作
X-Rayトレースのバックエンド
CloudWatchメトリクス・ログのバックエンド
Managed Grafanaダッシュボード

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

この記事は役に立ちましたか?

関連用語

関連する記事