OpenTelemetryとは?分散トレーシングの基本を解説

インフラ・クラウド

OpenTelemetry(OTel)は、ベンダー非依存の分散トレーシング・メトリクス・ログ収集の標準仕様です。マイクロサービス時代の必須技術になりつつあり、主要オブザーバビリティツール(Datadog、New Relic等)が広く対応しています。本記事では、OpenTelemetryの基本を入門レベルで解説します。

OpenTelemetryとは

OpenTelemetryは、CNCF主導のオブザーバビリティ標準で、計装(instrumentation)・収集(collector)・送信(exporter)を統一的に扱えます。アプリにOTel SDKを組み込んでおけば、配信先のバックエンド(Datadog、Tempo、Honeycombなど)を後から自由に変更できます。

3つのシグナル

  • Trace:処理の流れを時系列で記録(リクエストごとに分散トレース)
  • Metric:数値の時系列データ(CPU、レイテンシ、エラー率など)
  • Log:構造化ログ(traceIDと紐付けて分析可能)

主な構成要素

  • SDK / Instrumentation:アプリ側に組み込むライブラリ
  • Collector:エージェント/ゲートウェイとして受信・加工・転送
  • Exporter:保存先(Datadog、Jaeger、Tempo、CloudWatchなど)へ送信

自動計装の例(Node.js)

npm i @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node

// instrumentation.js
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');

new NodeSDK({
  instrumentations: [getNodeAutoInstrumentations()],
}).start();
# 起動時にロード
node --require ./instrumentation.js index.js

これだけでExpress・PostgreSQL・Redisなど主要ライブラリのトレースが自動で取得できます。

Collectorの役割

Collectorはバックエンドへの直接接続を中継し、サンプリング・属性追加・複数送信先への分岐などを担います。これにより、アプリ側のコードを変えずに送信先を切り替えられます。

分散トレースの威力

マイクロサービスでは、1リクエストが複数サービスを跨ぐため「どこで遅延しているか」が見えにくくなりがちです。OTelでtraceIDを伝播させれば、フロント → API → 認証 → DB → 外部API…といった経路を1つのタイムラインで可視化できます。

対応バックエンド

  • OSS:Jaeger、Tempo、Loki、Prometheus
  • SaaS:Datadog、New Relic、Honeycomb、Lightstep
  • クラウド:AWS X-Ray、Google Cloud Trace、Azure Monitor

導入のコツ

  • まず自動計装で全体可視化、足りないところに手動Spanを追加
  • サンプリングを適切に設定してコストを抑える
  • traceID をログに含めて、ログとトレースを紐付ける

まとめ

OpenTelemetryは「オブザーバビリティのベンダーロックインを解消する」標準仕様です。SDK + Collector + Exporterの3要素を理解しておけば、将来送信先を切り替える際にも安心。マイクロサービス時代の運用に必須の技術として、まずは小さなアプリから自動計装を試してみてください。