MackerelはOpenTelemetryの仕組み(計装)を利用してデータを取得しています。
このページではブラウザで動作するWebアプリケーションのデータをMackerelに送信する方法を解説します。
ブラウザ向けOpenTelemetry
OpenTelemetryにはブラウザ用のSDK(@opentelemetry/sdk-trace-web)が用意されています。
このSDKを使用して、ページの読み込み時間やユーザー操作などのパフォーマンスデータを計測できます。
前提条件
ブラウザからMackerelにトレースを投稿するには、クライアントトークンが必要です。事前にダッシュボードからクライアントトークンを作成してください。
クライアントトークンの詳細については以下のページを参照してください。
導入方法
以下のステップでMackerelトレーシング機能を導入できます。
- パッケージ追加
- 初期設定
- サンプリングの設定
1. パッケージ追加
以下のパッケージを使用します。
npm install @opentelemetry/api \ @opentelemetry/sdk-trace-web \ @opentelemetry/sdk-trace-base \ @opentelemetry/exporter-trace-otlp-proto \ @opentelemetry/instrumentation \ @opentelemetry/instrumentation-document-load \ @opentelemetry/instrumentation-fetch \ @opentelemetry/context-zone \ @opentelemetry/resources \ @opentelemetry/semantic-conventions
2. 初期設定
OpenTelemetryのデータをMackerelに送信するためには、以下の項目を設定する必要があります。
- Exporter
- resource
例えば、以下のようにすると、SDKからMackerelに送信することができます。
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'; import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; import { DocumentLoadInstrumentation } from '@opentelemetry/instrumentation-document-load'; import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch'; import { ZoneContextManager } from '@opentelemetry/context-zone'; import { resourceFromAttributes } from '@opentelemetry/resources'; import { registerInstrumentations } from '@opentelemetry/instrumentation'; import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION, } from '@opentelemetry/semantic-conventions'; // ATTR_DEPLOYMENT_ENVIRONMENT_NAME は個別に定義 const ATTR_DEPLOYMENT_ENVIRONMENT_NAME = 'deployment.environment.name'; // Client Token を使用した Exporter の設定 const exporter = new OTLPTraceExporter({ url: 'https://otlp-vaxila.mackerelio.com/v1/traces', headers: { 'X-Mackerel-Client-Token': 'YOUR_CLIENT_TOKEN_HERE', }, }); // TracerProvider の設定 const provider = new WebTracerProvider({ resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: 'my-web-app', [ATTR_SERVICE_VERSION]: 'vX.Y.Z', [ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: 'production', }), spanProcessors: [new SimpleSpanProcessor(exporter)], // 本番環境では BatchSpanProcessor の使用を検討してください // spanProcessors: [new BatchSpanProcessor(exporter)], }); provider.register({ // ZoneContextManager を使用すると非同期操作がサポートされます contextManager: new ZoneContextManager(), }); registerInstrumentations({ instrumentations: [ // DocumentLoadInstrumentation を使用してページ読み込みのパフォーマンスを計測 new DocumentLoadInstrumentation(), // FetchInstrumentation を使用して Fetch API による HTTP リクエストのパフォーマンスを計測 new FetchInstrumentation() ], });
この例では次の項目を設定しています。
- Exporter
- url
https://otlp.mackerelio.com/v1/tracesと設定することで、データをMackerelに送信するようになります。
- headers
X-Mackerel-Client-Tokenヘッダーにクライアントトークンを設定します。- クライアントトークンの作成方法はクライアントトークンを参照してください。
- url
- resource
ATTR_SERVICE_NAMEにサービス名を設定することで、データがどこから来たかわかるようになります。ATTR_DEPLOYMENT_ENVIRONMENT_NAMEは2025年5月時点で@opentelemetry/semantic-conventions/incubatingに含まれますが、このパッケージは不安定であるため、Unstable SemConv で推奨されるように、import せず個別に定義しています。
以下のようにトレースが投稿されます。

3. サンプリングの設定
ブラウザからのトレースはユーザー数に比例して大量に発生します。レートリミットの超過やコスト増加を防ぐため、サンプリングの設定を推奨します。
TraceIdRatioBasedSampler を使用すると、トレースの一定割合のみを送信するように設定できます。前述の初期設定コードに sampler オプションを追加してください。
import { TraceIdRatioBasedSampler } from '@opentelemetry/sdk-trace-base'; const provider = new WebTracerProvider({ sampler: new TraceIdRatioBasedSampler(0.1), // 10%のトレースのみ記録 // ... 前述の resource, spanProcessors の設定 });
サンプリングレートはアプリケーションの規模やトラフィック量に応じて調整してください。
計装の方法は他にも用意されています。詳細はOpenTelemetryのドキュメントを参照してください。