ブラウザRUMのインストルメンテーション固有のデータ

Splunk Observability Cloud リアルユーザーモニタリング / RUM for Browser は、自動インストルメンテーションによって以下のデータを収集します。

Splunk RUM for Browser は、インストルメンテーションによって以下のデータを収集します。インストルメンテーションをアクティブ化または非アクティブ化するには、「インストルメンテーション設定」を参照してください。

ドキュメントのロード

document インストルメンテーションは、Window:load イベントが発生するまでにロードされるリソースに関するスパンを生成します。生成されるルートスパンは documentLoad です。documentFetch および resourceFetch スパンの parentIDdocumentLoad.id です。

ページロード要求に Server-Timing ヘッダーがある場合、RUM はデータを使用して documentFetch スパンを対応するバックエンドスパンにリンクします。ブラウザ RUM エージェントは、scriptlinkcss - fontiframeXHR/fetchimgfaviconmanifest.json などのリソースも収集し、Server-Timing ヘッダーが存在する場合は、それらを APM トレースにリンクします。

documentLoad

ブラウザ RUMエージェントは、documentLoad インストルメンテーションを使用して、以下のデータを収集します:

Name

タイプ

説明

document.referrer

文字列

参照ページの URI。たとえば、https://subdomain.example.com のようになります。

screen.xy

文字列

ディスプレイの幅と高さ。たとえば、2560x1440 のようになります。

以下の注釈は、PerformanceNavigationTiming インターフェイスに関する W3C 仕様で指定されているナビゲーションのタイミングから収集されたものです:

Name

タイムスタンプ

fetchStart

ブラウザがリソースのフェッチを開始する直前。

unloadEventStart

ユーザーエージェントが前の文書のアンロードイベントを開始する直前。

unloadEventEnd

ユーザーエージェントが前の文書のアンロードイベントを終了した直後。

domInteractive

.

domContentLoadedEventStart

ユーザーエージェントが現在のドキュメントで DOMContentLoaded イベントを発生させる直前。

domContentLoadedEventEnd

現在の文書の DOMContentLoaded イベントが完了した直後。

domComplete

.

loadEventStart

現在のドキュメントのロードイベントが発生する直前。

loadEventEnd

現在の文書のロードイベントが完了したとき。

この図は、documentLoad の一連のイベントを示しています。

この図は、documentLoad プロセスを示しています。

documentFetch

ブラウザ RUMエージェントは、documentFetch インストルメンテーションを使用して、以下のデータを収集します:

Name

タイプ

説明

http.response_content_length

数字

ペイロードボディから受け取ったドキュメントのサイズ。

link.traceId

文字列

APM エージェントが設定した Server-Timing レスポンスヘッダーから収集したトレース識別子。

link.spanId

文字列

APM エージェントが設定した Server-Timing レスポンスヘッダーから収集したスパン識別子。

resourceFetch

ブラウザ RUMエージェントは、resourceFetch インストルメンテーションを使用して、以下のデータを収集します:

Name

タイプ

説明

http.response_content_length

数字

ペイロードボディから受け取ったドキュメントのサイズ。

http.url

文字列

リクエストされたリソースのURL。

link.traceId

文字列

APM エージェントが設定した Server-Timing レスポンスヘッダーから収集したトレース識別子。

link.spanId

文字列

APM エージェントが設定した Server-Timing レスポンスヘッダーから収集したスパン識別子。

注: Safari 10.1 は resourceFetch スパンをサポートしていません。

XHRとFetchインストルメンテーション

xhr および fetch インストルメンテーションは、XMLHttpRequest イベントと Fetch API イベントを収集します。スパンは、component タグの値で xml-http-requestfetch が区別されます。

このインストルメンテーションは、スパンの名前の前に HTTP メソッド名を付加します。インストルメンテーションのマップ先となっているバックエンドの応答に Server-Timing ヘッダーが含まれる場合は、バックエンドのトレースとのリンクも生成されます。

ブラウザ RUMエージェントは、XHRおよびFetchインストルメンテーションを使用して、以下のデータを収集します:

  • http.method

  • http.response_content_length

  • http.host

  • http.scheme

  • http.status_code

  • http.status_text

  • http.user_agent

  • http.url

XHRインストルメンテーションとFetchインストルメンテーションは、以下のイベントがいつ発生するかを示すタイムスタンプでスパンに注釈を付けます:

イベント

タイプ

説明

open

数字

XHR open イベントが発生する UNIX エポックでの時間。マイクロ秒単位でインストルメンテーションされます。

send

数字

XHR send イベントが発生する時刻。

load

数字

XHR load イベントが発生する時刻。

"error"

数字

XHR "error" イベントが発生する時刻。

timeout

数字

XHR timeout イベントが発生する時刻。

abort

数字

XHR abort イベントが発生する時刻。

XHR および Fetch インストルメンテーションが収集する注釈については、「リクエストタイミング注釈」に説明があります。

ウェブバイタル

webvitals インストルメンテーションは、Google Web Vitals メトリクスに関するデータを収集します。ブラウザ RUM エージェントは、期間がゼロのスパンとして Web Vitals メトリクスを収集します。すべてのスパンには指定された traceId があり、親スパンはありません。

ブラウザ RUMエージェントは、webvitals インストルメンテーションを使用して、以下のデータを収集します:

Name

ウェブバイタル

説明

lcp

最大コンテンツの描画

ビューポート内に表示される最大の画像またはテキストブロックのレンダリング時間をキャプチャすることにより、読み込みパフォーマンスを測定します。

fid

最初の入力遅延

ユーザーとのインタラクションから、そのインタラクションに反応してブラウザがイベントハンドラの処理を開始するまでのタイムスタンプを取得することで、インタラクティブ性を測定します。

cls

累積レイアウトシフト

ページのライフスパン全体で発生する予期せぬレイアウトシフトのスコアを測定し、その合計を取得することで、視覚的な安定性を測定します。レイアウトシフトは、あるレンダリングフレームから次のレンダリングフレームへ、可視要素が位置を変えるたびに発生します。

inp

次のペイントへの相互作用

ユーザーがページ上で行ったすべてのインタラクションのレイテンシを観察することで応答性を測定し、最も遅い値を報告します。

ロード後のリソース

postloadインストルメンテーションは、ページ load イベント後にロードされるリソースに関するデータを収集します。デフォルトでは、インストルメンテーションは <script> および <img> リソースのインストルメンテーションをアクティブにします。通常、postload インストルメンテーションは、scroll イベントで画像をロードするときにテレメトリを収集するために使用します。

postload で収集されたスパンは、「resourceFetch」で説明されているデータモデルと一致します。

ユーザーインタラクション

interactions インストルメンテーションは、Element.addEventListener タイプのイベントリスナーが登録されているエレメント上のインタラクションのテレメトリデータを収集します。リスナーによって収集されたイベントは、DOM イベント名と一致する名前でスパンを生成します。

ブラウザ RUMエージェントは、interactions インストルメンテーションを使用して、以下のデータを収集します:

Name

タイプ

説明

event_type

文字列

イベントの名前。たとえば、click のようになります。

target_element

文字列

ターゲット要素の名前。たとえば、BUTTON のようになります。

target_xpath

文字列

ターゲット要素のXPath。

可視性

visibility インストルメンテーションは、visibilitychange イベントを収集します。ブラウザのタブがまったく表示されない場合があるため、ページが更新されたときに起こる可視性の変化は記録されません。

ブラウザ RUMエージェントは、visibility インストルメンテーションを使用して、以下のデータを収集します:

Name

タイプ

説明

hidden

ブーリアン

ページが非表示かどうか。

接続性

connectivity インストルメンテーションは、offlineonline イベントを収集します。ブラウザがオフラインになると、ブラウザはオフラインイベントを記録し、ブラウザがオンラインになるまでメモリにキャッシュされます。オフラインイベントとオンラインイベントは同時に送信されます。

ブラウザ RUMエージェントは、connectivity インストルメンテーションを使用して、以下のデータを収集します:

Name

タイプ

説明

online

ブーリアン

ブラウザがオンラインになったかオフラインになったか。

履歴API

ブラウザ RUM エージェントは、History API をインストルメンテーションして、ブラウザのセッション履歴を可視化できるようにします。History API は、ページをリロードせず、単一ページのアプリケーションで使用される URL 変更を追跡します。

インストルメンテーションはまた、hashchange イベントをリッスンすることで、location.hash を変更して発生する URL の変更も追跡します。ルート変更には期間がありません。routeChange スパンには次のタグが含まれます。

Name

タイプ

説明

component

文字列

値は常に "user-interaction" です。

prev.href

文字列

ルート変更前のページURL

location.href

文字列

ルート変更後のページURL

長いタスク

longtask インストルメンテーションは、長いタスクに関する情報を収集します。ブラウザ RUM エージェントは、検出されたすべての長いタスクに対してスパンを作成します。

スパン属性には、そのタスクが発生したコンテナが含まれます。トップレベルページ内で発生しないタスクについては、containerIdcontainerNamecontainerSrc フィールドがタスクのソースについての情報を提供します。

ブラウザ RUMエージェントは、longtask インストルメンテーションを使用して、以下のデータを収集します:

Name

タイプ

longtask.name

文字列

longtask.entry_type

数字

longtask.duration

数字

attribution.name

文字列

attribution.entry_type

文字列

attribution.start_time

数字

attribution.duration

数字

attribution.container_type

文字列

attribution.container_src

文字列

attribution.container_id

文字列

attribution.container_name

文字列

ウェブソケット

websockets インストルメンテーションは、WebSocket のライフサイクルイベントを収集し、それを使用してスパンを生成します。インストルメンテーションでは、WebSocket connectsendonmessage イベントからスパンを収集します。

connect

websockets インストルメンテーションは、connect イベントから以下のデータを収集します:

Name

タイプ

説明

http.url

文字列

ウェブソケットのURL。

duration

数字

ウェブソケットのコンストラクタ呼び出しから ws.open イベントが発生するまでの経過時間。

protocols

文字列または配列

ウェブソケットのコンストラクタに渡されるプロトコル。

error

文字列

エラーが発生したかどうかに応じて、値は true または false になります。エラーは、WebSocket の構築中または ws.error イベントの発生時に収集されます。

error

文字列

ウェブソケットのエラー・イベント・メッセージ。

send と onmessage

websockets インストルメンテーションは、sendonmessage イベントから以下のデータを収集します:

Name

タイプ

説明

http.url

文字列

ウェブソケットのURL。

response_content_length

数字

バイト単位のペイロードサイズ。

Socket.io メッセージ

Socket.io インストルメンテーションは、socket.io クライアントライブラリを使用して送信されたメッセージからスパンを生成します。スパンは、メッセージングシステムの OpenTelemetry 仕様に準拠しています。このインストルメンテーションはデフォルトで非アクティブ化されています。

スタンドアロンのsocket.ioビルドを使用する場合は、次のスニペットのように、true をコンフィギュレーション設定に渡してインストルメンテーションを有効にします:

<script src="/location/to/splunk-otel-web.js"></script>
<script>
   SplunkRum.init({
      // ...
      instrumentations: {
         socketio: true
      }
   });
</script>
<script src="/socket.io/socket.io.js"></script>

@splunk/otel-websocket.io-client の両方の npm パッケージを同じバンドルで使用する場合は、target の設定を使用して、socket.io クライアントをインストルメンテーションに渡します:

import SplunkOtelWeb from '@splunk/otel-web';
import { io } from 'socket.io-client';
SplunkRum.init({
// ...
   instrumentations: {
      socketio: {
         target: io,
      },
   },
});

Splunk RUM の CDN ディストリビューションを使用する場合は、以下の例のように socket.io インストルメンテーションを有効にして io 関数を window.ioとして公開します。

<script src="/location/to/splunk-otel-web.js"></script>
<script>
SplunkRum.init({
   // ...
   instrumentations: {
      socketio: true
   }
});
</script>
<script src="/app.min.js"></script>

先ほどの例の app.min.js ファイルの内容は以下の通りです:

import { io } from 'socket.io-client';
window.io = io;
const socket = io();
// ...

ターゲットにグローバル変数名を指定すれば、別のグローバル変数名を使うことができます:

SplunkRum.init({
// ...
instrumentations: {
   socketio: {
      target: 'socketIoClient',
      },
   },
});
// Expose the io object in your bundle
window.socketIoClient = io;

socket.io のクライアントとサーバー間で送信されるメッセージは、クライアントからサーバーへ送信される場合は EVENT_NAME send スパン、サーバーからクライアントへ送信される場合は EVENT_NAME receive スパンを生成します。どちらのタイプのスパンにも、次の属性が含まれます。

Name

タイプ

説明

messaging.system

文字列

値は常に socket.io です。

messaging.destination messaging.socket.io.namespace

文字列

socket.io 名前空間の値。

messaging.destination_kind

文字列

値は常に topic です。

messaging.socket.io.event_name

文字列

イベントの名前、emit または on 関数の第一引数。