opentelemetry-js全体概要編
こんにちは、@sugar235711です。
この記事は「ひとりで気になるOSSのソースコード全部読んで何かする Advent Calendar 2025」7日目の記事です。
前日の記事はこちら: 番外編 Agones FleetAutoscaleRequestMetaData & 軽いContribute編
OpenTelemetryは各種SDKおよびCollectorを提供しており、全てコードが公開されています。
今回からはその中のJavaScriptのSDKに関して内部実装を見ていこうと思います。
https://opentelemetry.io/docs/languages/js/
基本的にOpenTelemetryにおける基礎的な知識の説明は全部割愛します。ドキュメントを見てください。
OpenTelemetryのSDKにはopentelemetry-jsの他にopentelemetry-js-contribの各種フレームワークを計装したパッケージ等もありますが、今回はopentelemetry-jsに実装されているコアパッケージおよび標準のフレームワークの計装実装のみを対象として確認していきます。
https://github.com/open-telemetry/opentelemetry-js
ちなみに「HonoとOpenTelemetryで実現するオブザーバービリティ構築」というタイトルでHono Conference 2025で発表しています。
分散トレースに関してやopentelemetry-js等の実装に関してもちょっとだけ触れているので興味あれば見てください。
https://speakerdeck.com/sugarcat7/hono-opentelemetry-2025
パッケージ群
opentelemetry-jsを構成するパッケージとして主なものをリストアップする。
他にも色々あるのだがブラウザ/Node.js環境それぞれの実装等でパッケージが分かれていたり非推奨なものも含まれていたりするので一旦は下記パッケージを押さえておけば問題なさそうです。
@opentelemetry/api
Tracer、Span、Meter などと、そのNo-op実装を提供。SDK 非導入時でも呼び出し安全な実装で、ライブラリ・フレームワークはこの API のみを参照して計装コードを書句ことができる
https://github.com/open-telemetry/opentelemetry-js/blob/main/api/package.json
@opentelemetry/core
API の補助機能や便利ユーティリティを提供
https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core
@opentelemetry/sdk-trace-base
手動計装向けのパッケージ
https://github.com/open-telemetry/opentelemetry-js/blob/bc9e37fec46f324b624fdf2f1fa666779377690b/packages/opentelemetry-sdk-trace-base/package.json
@opentelemetry/sdk-trace-node / sdk-trace-web
Node.js または Web ブラウザ向けの自動計装 SDK
https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-sdk-trace-node/package.json
Node アプリ向けに async_hooks ベースの自動計装を含むTraceProviderを提供
https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-sdk-trace-web/package.json
sdk-trace-web はブラウザ向けに XHR/Fetch などの自動計装を含むTraceProviderを提供
Exporter(@opentelemetry/exporter-exporter-*)
バックエンド向けのエクスポーター(例:OTLP、Console、Jaeger、Zipkin など)。共通のSpanExporter インターフェイスを実装し、SDKのSpanProcessorから送られてきた span データを外部に送出する
ex)https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http
Instrumentation(@opentelemetry/instrumentation-http等)
フレームワーク/ライブラリごとに自動計装を提供するプラグイン群
https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http
Context/Propagator(@opentelemetry/context-async-hooksなど)
アプリ内トレースコンテキスト管理用の実装や、W3C トレースコンテキスト・バゲージのプロパゲータ実装が個別パッケージになってる(TraceProvider.register()でグローバルコンテキストマネージャやプロパゲータを登録)
https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-context-async-hooks/package.json
@opentelemetry/resources
テレメトリに付加するリソース情報(例えばk8sのpod名やnamespaceの情報など)
https://github.com/open-telemetry/opentelemetry-js/blob/main/packages/opentelemetry-resources/package.json
@opentelemetry/semantic-conventions
OpenTelemetry SDK/API等で利用するセマンティック属性、トレースのために標準化された属性
https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/package.json
Contributing Guide
https://github.com/open-telemetry/opentelemetry-js/blob/main/CONTRIBUTING.md#general-merge-requirements
https://github.com/open-telemetry/community/tree/main/guides/contributor
まとめ
明日から内部実装を見ていきます。