Splunk ブラウザ RUM インストルメンテーションを設定する

ブラウザベースの Web アプリケーション用に Splunk Observability Cloud リアルユーザーモニタリング / RUM インストルメンテーションを設定します。

OpenTelemetry JS for Web の Splunk ディストリビューションから ブラウザ RUM エージェントを設定することで、カスタム属性の追加、環境やアプリケーションに合わせたインストルメンテーション、サンプリングのカスタマイズなどを行うことができます。

設定方法

ブラウザRUMエージェントを設定するには、SplunkRum.init() 関数に渡されるオブジェクトを編集します:

<script src="https://cdn.signalfx.com/o11y-gdi-rum/latest/splunk-otel-web.js" crossorigin="anonymous"></script>
<script>
      SplunkRum.init(
      {
         realm: 'us0',
         rumAccessToken: 'ABC123...789',
         applicationName: 'my-awesome-app',
         version: '1.0.1'
         // Any additional settings
      });
</script>

一般設定

以下の設定を使用して、ブラウザRUMエージェントを構成します:

プロパティ タイプ 説明

realm

文字列

組織のレルムの名前(us0 など)。アカウントのレルム名を確認するには、Splunk Observability Cloud のナビゲーションメニューを開き、[Settings] を選択し、ユーザー名を選択します。レルム名は Organizations セクションに表示されます。

rumAccessToken

文字列(必須)

エージェントがテレメトリデータを Splunk Observability Cloud に送信することを許可する RUM トークン。RUM アクセストークンを生成するには、「Splunk Observability Cloud で RUM アクセストークンを生成する」を参照してください。

beaconEndpoint

文字列(realm が設定されていない場合は必須)

収集されたテレメトリをエージェントが送信する取り込み URL 。realm が設定されている場合、URL の形式は https://rum-ingest.<realm>.signalfx.com/v1/rum です。エンドポイントを手動で設定すると、realm の値が上書きされます。

applicationName

文字列

アプリケーションの名前。デフォルト値は unknown-browser-app です。

version

文字列

全スパンのアプリケーションのバージョン。たとえば、「1.0.1」または「20220820」です。

deploymentEnvironment

文字列

アプリケーションによって生成されるすべてのスパンの環境。たとえば、devtest、または prod です。

globalAttributes

オブジェクト

すべてのスパンに追加される属性を設定します。たとえば、version または user_id

instrumentations

オブジェクト

特定のブラウザ RUM インストルメンテーションをアクティブまたは非アクティブにします。「インストルメンテーション設定」を参照してください。

ignoreUrls

(string\|regex)[]

エージェントが無視する必要がある URL のリスト。一致した URL ではスパンは生成されません。2 つの異なるタイプのルールを指定できます(文字列または正規表現)。

cookieDomain

文字列

セッショントラッキングに使用されるドメイン。たとえば、foo.example.combar.example.com の両方にサイトがある場合、cookieDomainexample.com に設定すると、両方のサイトで同じセッション識別子を使用できます。詳細については、「ブラウザ RUM エージェントが使用するクッキー」を参照してください。

context.async

ブーリアン

非同期コンテキストマネージャーを有効にします。デフォルト値は true です。「非同期トレース設定」を参照してください。

exporter.onAttributesSerializing

(a: SpanAttributes, s?: Span) => SpanAttributes

エクスポート前にスパン属性を修正するためのコールバックを提供します。デフォルト値は (attrs) => attrs です。シナリオ例は、「個人を特定できる情報(PII)のサニタイズ」です。

tracer

オブジェクト

WebTracerProviderに渡されたトレース設定。これを使用して、サンプリングを設定できます。「サンプリング設定」を参照してください。

debug

ブーリアン

開発者コンソールのデバッグロギングを有効にします。デフォルト値は false です。

persistance'cookie' | 'localStorage'セッションデータを保存する場所を指定します。Cookie をサポートしていない環境では、'localStorage' を使用します。ローカルストレージには、サブドメイン間でセッションを追跡できないという制限があります。デフォルト値は cookie です。バージョン 0.20.0 から利用できます。
disableBotsブーリアンボットのトラッキングを無効にします。デフォルト値は false です。バージョン 0.20.0 から利用できます。
disableAutomationFrameworksブーリアン自動化フレームワークの追跡を無効にします。デフォルト値は false です。バージョン 0.20.0 から利用できます。

インストルメンテーション設定

特定のブラウザ RUM インストルメンテーションをアクティブ化または非アクティブ化するには、オブジェクトを作成して instrumentations プロパティに渡します。次のエージェント初期化の例では、いくつかのインストルメンテーションの設定を変更します。

SplunkRum.init(
   {
      beaconEndpoint: 'https://rum-ingest.us0.signalfx.com/v1/rum',
      rumAccessToken: 'ABC123…789',
      applicationName: 'my-awesome-app',
      instrumentations:
      {
         interactions:
         {
            // Adds``gamepadconneted`` events to the
            // list of events collected by default
           eventNames: [
             ...SplunkRum.DEFAULT_AUTO_INSTRUMENTED_EVENT_NAMES,
             'gamepadconnected'
           ],
         },
         longtask: false, // Deactivates monitoring for longtasks
         websocket: true, // Activates monitoring for websockets
      },
   });

instrumentations オプションで対応しているすべてのプロパティを以下の表に示します:

プロパティ デフォルト 説明

connectivity

false

接続イベントの収集をアクティブにします。「接続性」を参照してください。

document

true

ドキュメントロードイベントに関連するスパンの収集をアクティブにします。「ドキュメントのロード」を参照してください。

errors

true

JavaScript エラーの収集をアクティブにします。「ブラウザ RUM エージェントが収集するエラー」を参照してください。onError フック を指定して、送信前にエラースパンを変更できます。

fetch

true

Fetch API リクエストの収集をアクティブにします。 「XHR と Fetch インストルメンテーション」を参照してください。

interactions

true

クリックやキーの押下などのユーザーインタラクションの収集をアクティブにします。 「ユーザーインタラクション」を参照してください。

interactions.eventNames

インストルメンテーションがユーザーインタラクションとしてキャプチャする DOM イベントの配列。デフォルト値にアクセスするには、SplunkRum.DEFAULT_AUTO_INSTRUMENTED_EVENT_NAMES プロパティにアクセスします。

longtask

true

長いタスクの収集をアクティブにします。「長いタスク」を参照してください。

socketio

false

socket.io メッセージの収集をアクティブにします。「Socket.io メッセージ」を参照してください。

postload

true

ロードイベントの後にロードされたリソースの収集をアクティブにします。「ロード後のリソース」を参照してください。

socketio.target

'io'

socket.io クライアントをロードするグローバル変数名、または ioオブジェクト。「Socket.io メッセージ」を参照してください。

visibility

false

可視性イベントの収集をアクティブにします。「可視性」を参照してください。

websocket

false

WebSocket のライフサイクルイベントの収集をアクティブにします。「WebSocket」を参照してください。

webvitals

true

Google Web Vitals メトリクスの収集を有効にします。「ウェブバイタル」を参照してください。

xhr

true

XMLHttpRequest イベントの収集をアクティブにします。「XHR と Fetch インストルメンテーション」を参照してください。

サンプリング設定

デフォルトでは、ブラウザ RUM エージェントはすべてのユーザーからすべてのデータを収集します。カスタムサンプラーを tracer プロパティに渡すことで、サンプリングを調整できます。

次の例は、サンプリングをログインしているユーザーに制限する方法を示しています:

CDN
<script src="https://cdn.signalfx.com/o11y-gdi-rum/latest/splunk-otel-web.js" crossorigin="anonymous"></script>
<script>
   var shouldTrace = isUserLoggedIn();

   SplunkRum.init({
      realm: '<realm>',
      rumAccessToken: '<your_rum_token>',
      applicationName: '<application-name>',
      tracer: {
         sampler: shouldTrace ? new SplunkRum.AlwaysOnSampler() : new SplunkRum.AlwaysOffSampler(),
      },
   });
</script>
npm
// When using npm you can get samplers directly from @opentelemetry/core
import {AlwaysOnSampler, AlwaysOffSampler} from '@opentelemetry/core';
import SplunkOtelWeb from '@splunk/otel-web';

SplunkOtelWeb.init({
   beaconEndpoint: 'https://rum-ingest..signalfx.com/v1/rum',
   rumAccessToken: '<your_rum_token>',
   applicationName: '<application-name>',
   tracer: {
      sampler: userShouldBeTraced() ? new SplunkRum.AlwaysOnSampler() : new SplunkRum.AlwaysOffSampler(),
   },
});

Splunk Distribution of OpenTelemetry JS for Web には、以下のサンプラーが含まれています:

サンプラー

説明

AlwaysOnSampler

すべての要求でサンプリングが有効になっています。これがデフォルトのサンプラーです。

AlwaysOffSampler

全リクエストで停止されたサンプリング。

ParentBasedSampler

親トレースのサンプラー設定を継承します。

SessionBasedSampler

セッションベースのサンプリング。「セッションベースのサンプラー」を参照してください。

セッションベースのサンプラー

Splunk Distribution of OpenTelemetry JS for Web には、セッションをサポートするカスタムサンプラーが含まれています。セッション比率では各セッションからのデータがそのまま維持されるため、トレース比率よりも推奨されます。

セッションベースのサンプラーには、以下の方法でアクセスできます:

  • Splunk CDN ビルドを使用する場合は、SplunkRum.SessionBasedSampler エクスポートを使用します。

  • npmパッケージを使用する場合は、SessionBasedSampler エクスポートを使用します。

セッションベースのサンプラーは、以下の設定を受け付けます:

オプション

タイプ

デフォルト値

説明

ratio

number

1.0

報告されたセッションの割合、範囲は 0.0 から 1.0 まで。

sampled

Sampler

AlwaysOnSampler

セッションのサンプリング時に使用するサンプラー。

notSampled

Sampler

AlwaysOffSampler

セッションをサンプリングしない場合に使用するサンプラー。

次の例は、セッションの半分からRUMデータを収集する方法を示しています:

CDN
<script src="https://cdn.signalfx.com/o11y-gdi-rum/latest/splunk-otel-web.js" crossorigin="anonymous"></script>
<script>
  SplunkRum.init({
    realm: '<realm>',
    rumAccessToken: '<your_rum_token>',
    applicationName: '<application-name>',
    tracer: {
      sampler: new SplunkRum.SessionBasedSampler({
      ratio: 0.5
      }),
    },
  });
</script>
npm
import SplunkOtelWeb, {SessionBasedSampler} from '@splunk/otel-web';

SplunkOtelWeb.init({
  realm: '<realm>',
  rumAccessToken: '<your_rum_token>',
  applicationName: '<application-name>',
  tracer: {
      sampler: new SessionBasedSampler({
        ratio: 0.5
      }),
  },
});

非同期トレース設定

プロミスチェーンにつながるユーザーインタラクションなど、非同期に発生するトレースは、親アクティビティから切り離される可能性があります。この問題を回避するために、ブラウザ RUM エージェントは、以下のプロパティまたはパターンを使用しているときに発生するトレースと親トレースを接続するカスタム コンテキスト マネージャーを含んでいます。

  • setTimeout 34ms以下のタイムアウト

  • setImmediate

  • requestAnimationFrame

  • Promise.then / catch / finally

  • textNode 上の MutationObserver

  • MessagePort

  • ハッシュ・ベース・ルーター

非同期トレースのリンクはデフォルトで有効になっています。互換性の問題がある場合は、context.async プロパティを false に設定することで、無効にすることができます。

コンテキストマネージャーにより、Splunk RUM はコンポーネントが最初にレンダリングされたときに実行されたリクエストを、アプリケーションがコンポーネントをページに追加する原因となったユーザーインタラクションにリンクさせることができます。XMLHttpRequest イベントと Fetch API イベントは、promise メソッドを介して親コンテキストを保持するようにパッチされます。

制限事項

非同期トレースを使用する場合、以下の制限が適用されます:

  • async/await 関数はサポートされていません。Babel を使用して古いブラウザをターゲットにコードをダウンコンパイルしてください。

    document.getElementById('save-button').addEventListener('click', async () => {
      const saveRes = await fetch('/api/items', {method: 'POST'});
    
      const listRes = await fetch('/api/items'); // Can be disconnected from click event when not transpiled
    });
  • プロミスベースの実装によってロードされたコードだけが、親インタラクションにリンクされます。

コンテキスト伝播の設定

ブラウザ RUM エージェントは、Server-Timing ヘッダーから traceparent データを収集するため、コンテキストプロパゲータを登録しません。必要に応じて、OpenTelemetry API を使用してコンテキストプロパゲータを登録できます。

import {propagation} from '@opentelemetry/api';
import {B3Propagator} from '@opentelemetry/propagator-b3';

propagation.setGlobalPropagator(new B3Propagator());

OpenTelemetry API を直接呼び出す場合は、使用する API のバージョンが、ブラウザ RUM エージェントで使用されているものと一致していることを確認してください。

エクスポート設定

デフォルトでは、Browser RUMエージェントはZipkinエクスポーターを使用してデータをSplunk Observability Cloudに送信します。

バージョン 0.17.0 以降では、OTLP エクスポータを使用するように RUM エージェントを設定できます。次の例は、OTLP エクスポータを使用するように RUM インストルメンテーションを設定する方法を示しています。

   SplunkRum.init({
      realm: '<realm>',
      rumAccessToken: '<your_rum_token>',
      applicationName: '<application-name>',
      deploymentEnvironment: '<deployment-env>',
      exporter: {
         otlp: true
      },
   });

beaconEndpoint を手動で設定する場合は、OTLP エンドポイントとして https://rum-ingest.<realm>.signalfx.com/v1/rumotlp を使用します。エンドポイントは exporter.otlptrue で、realm が設定されている場合に自動的に設定されます。

ブラウザRUMエージェントが使用するクッキー

ブラウザ RUMエージェントは、以下のクッキーを使用して、トレースをセッションにリンクします:

Name

目的

コメント

__splunk_rum_sid

セッションIDを格納します。

デフォルトでは、セッションは最後のユーザー操作から 15 分間持続します。最大セッション時間は 4 時間です。