0Pricing
React Academy · レッスン

ブラウザーからOpenTelemetryトレースを取得する

ReactでOTel JavaScript SDKを設定し、ユーザー操作のスパンを作成してバックエンドのコレクターへエクスポートします。

「ブラウザーからOpenTelemetryトレースを取得する」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

OpenTelemetry JavaScript SDK

ブラウザー向けのOpenTelemetry JavaScript SDKはいくつかのパッケージで構成されています。@opentelemetry/sdk-trace-webは中核となるトレース実装を、@opentelemetry/instrumentation-fetchはすべてのfetch API呼び出しに対するスパンを自動的に作成する機能を、@opentelemetry/exporter-trace-otlp-httpはスパンをコレクターに送信する機能を提供します。

TracerProvider: OTelトレースの起点

TracerProviderは、OpenTelemetryの中心的な設定オブジェクトです。完了したスパンをどう処理するかを決めるSpanProcessorの一覧、アプリケーションを説明するリソース(サービス名やバージョン)、サンプリング設定を保持します。

BatchSpanProcessor: 効率的なエクスポート

BatchSpanProcessorは、完了したスパンをメモリ上に集め、各スパンを個別に送信するのではなく、バッチ単位でエクスポートします。これによりコレクターへのHTTPリクエスト数を大幅に減らし、ブラウザーのパフォーマンスを向上させるとともに、OTelコレクターのエンドポイントへの負荷を軽減できます。

OTLPTraceExporter: コレクターへの送信

OTLPTraceExporterは、バッチ化したスパンをOpenTelemetry互換のコレクターへ、JSONまたはprotobuf形式のHTTPで送信します。コレクターのURL(例: OTel Collectorプロキシのエンドポイント)を設定すれば、エクスポーターがシリアライズと再試行のロジックを自動的に処理します。

Spanとは何か

Spanは、トレース内の1つの作業単位を表します。たとえば、コンポーネントのマウント、API呼び出し、ユーザー操作などです。スパンには、名前、開始時刻、終了時刻、ステータス(OKまたはERROR)、キーと値の属性が含まれます。関連するスパンは、共通のトレースIDと親子関係によって結び付けられます。

スパンの手動開始と終了

provider.getTracer('react-app')でトレーサーを作成し、tracer.startSpan('component-mount')でスパンを開始します。処理が完了したらspan.end()を呼び出して終了時刻を記録します。必ずスパンを終了してください。終了されていないスパンはメモリを消費し、オブザーバビリティのバックエンドに不完全なデータを生成します。

スパンへの属性の追加

属性を使うと、コンテキストデータでスパンを補足できます。たとえば、span.setAttribute('user.id', userId)やspan.setAttribute('route', location.pathname)のように指定します。属性はオブザーバビリティのバックエンドで検索できるため、「ユーザー42の遅いスパンをすべて表示」や「/checkoutルートのすべてのエラーを表示」といったクエリを実行できます。

Fetchの自動計装

@opentelemetry/instrumentation-fetchはグローバルのfetch関数にモンキーパッチを適用し、すべての外向きHTTPリクエストに対するスパンを自動的に作成します。既存のfetch呼び出しを変更しなくても、スパンにはURL、メソッド、HTTPステータスコード、所要時間が記録されます。

W3C TraceContext によるコンテキスト伝播

fetch のインストルメンテーションが送信リクエスト用の span を作成すると、W3C TraceContext の traceparent ヘッダーをリクエストに注入します。受信側のバックエンドはこのヘッダーを読み取り、同じトレースを継続します。これにより、ブラウザーとサーバーにまたがる接続されたトレースが作成されます。

React アプリでの OTel の初期化

OTel の初期化は、コンポーネントがマウントされる前に行う必要があります。通常はアプリのエントリーファイル(main.tsx)で、ReactDOM.createRoot の呼び出し前に行います。プロバイダーを作成し、プロセッサーとエクスポーターを登録してから、provider.register() を呼び出してグローバルな TracerProvider にします。

サンプリング:トレース量の制御

トラフィックの多いアプリでユーザー操作をすべて記録すると、膨大な量のトレースデータが生成されます。TracerProvider で TraceIdRatioBased sampler(例:トレースの 10% をサンプリング)を設定し、データ量を削減します。ParentBased sampler を使用して、エラートレースは常に 100% サンプリングし、エラーを見逃さないようにしてください。

OTel BatchSpanProcessor の目的

ブラウザーアプリケーションでは、SimpleSpanProcessor ではなく BatchSpanProcessor を使用するのはなぜですか。

レッスンのまとめ

OpenTelemetry JavaScript SDK は、TracerProvider、BatchSpanProcessor、OTLPTraceExporter を使用してブラウザーをインストルメンテーションします。span は作業単位を表し、属性によって情報を付加できます。fetch のインストルメンテーションは API 呼び出し用の span を自動的に作成し、エンドツーエンドの分散トレーシングのために W3C TraceContext ヘッダーを注入します。早期に初期化し、適切にサンプリングし、クリーンなトレースデータを維持するために必ず span を終了してください。

よくある質問

「ブラウザーからOpenTelemetryトレースを取得する」レッスンは無料ですか?

はい。「ブラウザーからOpenTelemetryトレースを取得する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「ブラウザーからOpenTelemetryトレースを取得する」で何を学びますか?

ReactでOTel JavaScript SDKを設定し、ユーザー操作のスパンを作成してバックエンドのコレクターへエクスポートします。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ブラウザーからOpenTelemetryトレースを取得する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. フロントエンドのオブザーバビリティ:概要と重要性
  2. ブラウザーからOpenTelemetryトレースを取得する
  3. リアルユーザーモニタリングとWeb Vitals
  4. フロントエンドとバックエンドのトレースを関連付ける
← React Academyに戻る