Web および HTML5 向けのリアルユーザーモニタリング (RUM) SDK は、データ収集、セッション管理、イベントフィルタリング、ホワイトスクリーン検出のための構成オプションを提供します。このリファレンスでは、一般的な SDK の構成、ランタイム API、および使用例について説明します。
初期化パラメーター
これらのパラメーターを ArmsRum.init() に渡して、起動時に SDK を構成します。
| パラメーター | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| pid | String | はい | - | アプリケーション ID |
| endpoint | String | はい | - | データ報告エンドポイント |
| env | String | いいえ | prod | アプリケーション環境。有効値:prod、gray、pre、daily、local |
| version | String | いいえ | - | アプリケーションバージョン |
| user | Object | いいえ | - | ユーザー設定。詳細については、ユーザーパラメーター |
| spaMode | String | いいえ | false | シングルページアプリケーション (SPA) のルート追跡モード。有効値:hash、history、auto、false |
| beforeReport | Function | いいえ | - | 各レポートが送信される前に呼び出されるコールバックで、報告データを変更またはブロックします |
| reportConfig | Object | いいえ | - | データ報告設定。詳細については、reportConfig パラメーター |
| sessionConfig | Object | いいえ | - | セッションのサンプリングとストレージ設定。詳細については、sessionConfig パラメーター |
| collectors | Object | いいえ | - | データコレクターの切り替え。詳細については、collectors パラメーター |
| parseViewName | Function | いいえ | - | ビュー名 (view.name) のカスタムパーサー。ページの URL を入力として受け取ります |
| parseResourceName | Function | いいえ | - | リソース名 (resource.name) のカスタムパーサー。リソースの URL を入力として受け取ります |
| evaluateApi | Function | いいえ | - | API イベントのカスタムパーサー。詳細については、evaluateApi パラメーター |
| filters | Object | いいえ | - | イベントフィルター規則。詳細については、filters パラメーター |
| whiteScreen | Object | いいえ | - | ホワイトスクリーン検出設定。詳細については、whiteScreen パラメーター |
| properties | Object | いいえ | - | すべてのイベントにアタッチされるグローバルカスタムプロパティ。詳細については、properties パラメーター |
| remoteConfig | Object | いいえ | - | 動的構成配信。詳細については、動的構成 |
CDN による初期化
Alibaba Cloud コンテンツデリバリーネットワーク (CDN) を通じて SDK をロードする場合、グローバル名前空間 RumSDK.default からアクセスします。
const ArmsRum = window.RumSDK.default;
// SDK がロードされた後に初期化します。
// SDK スクリプトタグの前に window.__rum を定義した場合は、このステップをスキップします。
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
});
// ランタイムで構成を更新
ArmsRum.setConfig('env', 'pre');npm による初期化
import ArmsRum from '@arms/rum-browser';
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
});ユーザーパラメーター
user オブジェクトを通じて、RUM セッションをビジネスアカウントに関連付けます。
| パラメーター | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| id | String | いいえ | - | ユーザー ID。SDK によって自動生成され、変更できません |
| name | String | いいえ | - | ユーザー名 |
| tags | String | いいえ | - | ユーザータグ |
user.id を上書きしないでください。SDK はこの値を自動生成するため、上書きするとユニーク訪問者 (UV) の計算に影響します。セッションをアカウントシステムにリンクするには、代わりに user.name または user.tags を使用してください。
例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
user: {
name: 'your user.name',
tags: 'your user.tags',
},
});reportConfig パラメーター
報告間隔とバッチサイズを制御します。
| パラメーター | タイプ | 必須 | デフォルト | 有効範囲 | 説明 |
|---|---|---|---|---|---|
| flushTime | Number | いいえ | 3000 | 0 -- 10000 | 報告間隔 (ミリ秒)。即時報告するには 0 に設定します |
| maxEventCount | Number | いいえ | 20 | 1 -- 100 | バッチあたりの最大イベント数 |
例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
reportConfig: {
flushTime: 0, // 即時報告
maxEventCount: 50, // バッチあたり最大 50 イベント
},
});sessionConfig パラメーター
セッションのサンプリング、期間制限、およびストレージを構成します。
| パラメーター | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| sampleRate | Number | いいえ | 1 | サンプリングレート (0 から 1)。たとえば、0.5 はセッションの 50% をサンプリングします |
| maxDuration | Number | いいえ | 86400000 | 最大セッション期間 (ミリ秒)。デフォルト:24 時間 |
| overtime | Number | いいえ | 3600000 | セッション非アクティブタイムアウト (ミリ秒)。デフォルト:1 時間 |
| storage | String | いいえ | localStorage | セッションデータの保存場所。有効値:cookie、localStorage |
ストレージの詳細
storage パラメーターは、SDK が以下のデータを永続化する場所を決定します。
_arms_uid-- ユニークユーザー ID (user.id)_arms_session-- セッションメタデータ。フォーマット:${sessionId}-${sampled}-${startTime}-${lastTime}sessionId-- ユニークセッション識別子sampled-- このセッションがサンプリングによって選択されたかどうかstartTime-- セッション開始タイムスタンプlastTime-- 最終アクティビティタイムスタンプ
例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
sessionConfig: {
sampleRate: 0.5, // セッションの 50% をサンプリング
maxDuration: 86400000, // 最大 24 時間
overtime: 3600000, // 1 時間の非アクティブタイムアウト
storage: 'cookie', // localStorage の代わりに cookie を使用
},
});collectors パラメーター
個々のデータコレクターを切り替えます。デフォルトではすべてのコレクターが有効です。
| パラメーター | タイプ | 必須 | デフォルト | 説明 | |
|---|---|---|---|---|---|
| perf | Boolean \ | Object | いいえ | true | ページパフォーマンスデータ |
| webvitals | Boolean \ | Object | いいえ | true | Web Vitals メトリック |
| api | Boolean \ | Object | いいえ | true | API リクエスト (XMLHttpRequest, fetch) |
| staticResource | Boolean \ | Object | いいえ | true | 静的リソースリクエスト |
| consoleError | Boolean \ | Object | いいえ | true | コンソールエラー |
| jsError | Boolean \ | Object | いいえ | true | JavaScript エラー |
| action | Boolean \ | Object | いいえ | true | ユーザー行動。デフォルトでは、SDK は 6 種類の DOM 要素 (button、a、input、select、option、textarea) のクリックイベントを収集します。div、dt、span などの非インタラクティブなタグのクリックイベントは、cursor:pointer、onclick、role=button、または tabindex:0 が設定されていても自動的に収集されません。SDK は getClosestTargetAncestorElement を呼び出して DOM ツリーを遡り、最も近いインタラクティブな祖先要素を探します。そのため、button または a タグでラップされた要素は、祖先マッチングによって収集されます |
| trackUserInteractions | Boolean | いいえ | false | div、dt、span などの非インタラクティブなタグを含む、すべての要素のクリックを収集するかどうか。有効にすると、SDK はクリック座標とビューポート情報も記録するため、ヒートマップ分析に適しています |
収集範囲と代替案
追跡する必要のある要素がデフォルトの収集範囲外にある場合は、次のいずれかのアプローチを使用します。
DOM 構造の調整 (推奨):監視したい要素を
buttonまたはaタグでラップします。SDK は祖先マッチングを通じて自動的に収集します。trackUserInteractionsの使用:trackUserInteractions: trueを設定すると、SDK は非インタラクティブなタグを含むすべての要素のクリックイベントを収集します。このアプローチはヒートマップ分析に適しています。sendCustomAPI の使用:ArmsRum.sendCustom()を呼び出して、デフォルトの収集範囲外のクリックイベントを手動で報告します。パラメーターの詳細については、sendCustom をご参照ください。
@arms/rum-browser v0.1.13 でのテストによると、collectors.action は collectors.click に名前が変更され、trackUserInteractions は collectors.click のサブオプションになりました。実際に使用する SDK バージョンのパラメーター名をご参照ください。
例
ユーザーインタラクションの追跡を無効にする:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
collectors: {
action: false,
},
});evaluateApi パラメーター
evaluateApi 関数は、XMLHttpRequest および fetch イベントの解析方法をカスタマイズします。3 つの引数を受け取り、Promise<IApiBaseAttr> を返します。
入力引数
| パラメーター | タイプ | 説明 |
|---|---|---|
| options | Object | リクエストパラメーター:url、headers、data。正確なフィールドはリクエストメソッドによって異なります |
| response | Object | 応答本文 |
| error | Error | エラーオブジェクト。リクエストが失敗した場合にのみ存在します |
戻り値の型 (IApiBaseAttr)
返されたフィールドは SDK のデフォルトをオーバーライドします。省略されたフィールドはデフォルト値のままです。
| フィールド | タイプ | 必須 | 説明 | |
|---|---|---|---|---|
| name | String | いいえ | API 名。通常は収束された URL (最大 1,000 文字)。例:/list/123 の場合は /list/$id。parseResourceName | |
| message | String | いいえ | API 呼び出しの簡単な説明 (最大 1,000 文字) | |
| success | Number | いいえ | リクエスト結果:1 = 成功、0 = 失敗、-1 = 不明 | |
| duration | Number | いいえ | API の合計所要時間 | |
| status_code | Number \ | String | いいえ | ステータスコード |
| snapshots | String | いいえ | 診断スナップショット (最大 5,000 文字)。reqHeaders、params、resHeaders を保存します。インデックス化されておらず、クエリや集約には使用できません |
例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
evaluateApi: async (options, response, error) => {
let respText = '';
if (response && response.text) {
respText = await response.text();
}
return {
name: 'my-custom-api',
success: error ? 0 : 1,
snapshots: JSON.stringify({
params: 'page=1&size=10',
response: respText.substring(0, 2000),
reqHeaders: '',
resHeaders: '',
}),
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
};
},
});filters パラメーター
特定のリソースまたは例外イベントを報告から除外します。
| パラメーター | タイプ | 必須 | 説明 | |
|---|---|---|---|---|
| resource | MatchOption \ | MatchOption[] | いいえ | 一致する静的リソースおよび API イベント (XMLHttpRequest, fetch) を除外します |
| exception | MatchOption \ | MatchOption[] | いいえ | 一致する例外イベントを除外します |
MatchOption 型
type MatchOption = string | RegExp | ((value: string) => boolean);String -- 指定された値で始まる URL またはメッセージに一致します。例:
'https://api.aliyun.com'は'https://api.aliyun.com/v1/resource'に一致します。RegExp -- URL またはメッセージを正規表現と照合します。
Function -- URL またはメッセージを入力として受け取ります。イベントを除外するには
trueを返します。
MatchOption 値の配列を渡すと、条件は順番に評価されます。いずれかの条件が一致した場合、イベントは除外されます。
例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
filters: {
exception: [
'Test error', // 'Test error' で始まるメッセージ
/^Script error\.?$/, // この正規表現に一致するメッセージ
(msg) => msg.includes('example-error'), // カスタムマッチ関数
],
resource: [
'https://example.com/', // 'https://example.com/' で始まる URL
/localhost/i, // 'localhost' を含む URL
(url) => url.includes('example-resource'),
],
},
});whiteScreen パラメーター
アプリケーションの空白またはホワイトスクリーンの状態を検出します。Chrome 40 および IE 9 以降でサポートされています。
| パラメーター | タイプ | 説明 |
|---|---|---|
| detectionRules | Array<DetectionRule> | 1 つ以上の検出規則。規則は構成された順序で実行されます |
DetectionRule
| パラメーター | 型 | 必須 | デフォルト | 説明 | |
|---|---|---|---|---|---|
| target | String | はい | - | モニター対象の要素の CSS セレクター | |
| test_when | Array | はい | - | 検出をトリガーするイベント。有効な値:LOAD、ERROR、ROUTE_CHANGE、LEAVE | |
| delay | Number | いいえ | 0 | トリガーイベント (ERROR と LEAVE を除く) の後、検出が開始されるまでの遅延時間 (ミリ秒) | |
| tester | String | 関数 | 関数 | はい | - | 検出メソッド。有効な値:HAS_CONTENT、SAMPLE、SCREENSHOT、またはカスタム関数 |
| ignoreUrlList | Array<String> | いいえ | [] | スキップするページの URL | |
| configOptions | ConfigOptions | いいえ | - | テスター固有のオプション。詳細は ConfigOptions |
トリガーイベント
| イベント | 説明 |
|---|---|
LOAD | ページの読み込みが完了します |
ERROR | グローバルな JavaScript エラーが発生します |
ROUTE_CHANGE | ルート (履歴またはハッシュ) が変更されます |
LEAVE | ページが閉じられようとしています |
検出メソッド
| メソッド | 仕組み |
|---|---|
HAS_CONTENT | ノードが存在し、textContent |
SAMPLE | ターゲット領域全体にサンプリングポイントを設定し、各ポイントの最上位 DOM 要素が許可された要素セットに属しているかどうかをチェックします |
SCREENSHOT | キャンバスのスクリーンショットを撮り、ピクセルブロックを比較してホワイトスクリーン率を計算します |
| カスタム関数 | ターゲット要素を入力として受け取ります。CustomTesterResult または Promise<CustomTesterResult> |
CustomTesterResult 型:
type CustomTesterResult = {
hasContent: boolean; // true = コンテンツが存在する; false = ホワイトスクリーンが検出された
message?: string; // エラーメッセージ
snapshot?: Record<string, any>; // 診断データ
}ConfigOptions
SCREENSHOT および SAMPLE 検出メソッドに固有のオプション。
SCREENSHOT オプション:
| パラメーター | タイプ | デフォルト | 説明 |
|---|---|---|---|
| colorRange | Array<String> | ['rgb(255, 255, 255)'] | 「白」として扱われる色。フォーマット:rgb(r, g, b) |
| fillColor | String | 'rgba(0, 100, 200, 255)' | スクリーンショット撮影時に画像、動画、キャンバス、SVG、iframe に適用される塗りつぶし色。colorRange |
| horizontalOffset | Number | 0 | ターゲット要素の左端からの水平オフセット (px)。左のサイドバーを除外するために使用します |
| verticalOffset | Number | 0 | ターゲット要素の上端からの垂直オフセット (px)。上のナビゲーションバーを除外するために使用します |
| pixels | Number | 10 | 比較用のピクセルブロックサイズ (pixels x pixels) |
| threshold | Number | 0.8 | ホワイトスクリーン率のしきい値。この値を超えるとホワイトスクリーンイベントがトリガーされます |
| dpr | Number | 0.3 | スクリーンショット画像のスケーリング比率 |
| ignoreElements | Array<String> | [] | スクリーンショットから除外する要素の CSS セレクター |
SAMPLE オプション:
| パラメーター | タイプ | デフォルト | 説明 | ||
|---|---|---|---|---|---|
| sampleMethod | `1 \ | 2 \ | 3` | 2 | サンプリングパターン:1 = 十字、2 = 交差十字、3 = 米字 |
| checkPoints | Number | 10 | 放射状のサンプリングポイント数。合計ポイント数:十字/交差十字 = 4 * checkPoints + 1; 米字 = 8 * checkPoints + 1 | ||
| threshold | Number | 0.8 | ホワイトスクリーン率のしきい値 | ||
| whiteBoxElements | Array<String> | [] | 「白」と見なされる要素の CSS セレクター。サンプリングポイントの最上位要素がセレクターのいずれかに一致すると、ホワイトスクリーンカウントが増加します |
共有オプション:
SCREENSHOT と SAMPLE の両方が debug オプション (Boolean、デフォルト:false) をサポートします。有効にすると、検出の詳細がブラウザーの開発者ツールコンソールに出力されます。
例
スクリーンショットベースの検出:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
whiteScreen: {
detectionRules: [{
target: '#root',
test_when: ['LOAD', 'ERROR', 'ROUTE_CHANGE', 'LEAVE'],
delay: 5000,
tester: 'SCREENSHOT',
configOptions: {
colorRange: ['rgb(255, 255, 255)', 'rgb(0, 0, 0)'],
threshold: 0.9,
pixels: 10,
horizontalOffset: 210,
verticalOffset: 50,
},
}],
},
});サンプリングベースの検出:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
whiteScreen: {
detectionRules: [{
target: '#root',
test_when: ['LOAD', 'ERROR', 'ROUTE_CHANGE', 'LEAVE'],
delay: 5000,
tester: 'SAMPLE',
configOptions: {
sampleMethod: 2,
checkPoints: 10,
threshold: 0.9,
whiteBoxElements: ['.el-skeleton'],
},
}],
},
});カスタム検出関数:
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
whiteScreen: {
detectionRules: [{
target: '#root',
test_when: ['LOAD', 'ERROR', 'ROUTE_CHANGE', 'LEAVE'],
delay: 5000,
tester: async (element) => {
return {
hasContent: false,
message: 'Custom error message',
snapshot: {
checkPoints: 100,
rate: 0.99,
checkdata: '......',
},
};
},
}],
},
});properties パラメーター
報告されるすべてのイベントにグローバルカスタムプロパティをアタッチします。
| パラメーター | タイプ | 必須 | 説明 | |
|---|---|---|---|---|
| [key: string] | String \ | Number | いいえ | カスタムのキーと値のペア。キーは JSON 仕様に準拠した文字列で、最大 50 文字 (長い場合は切り捨てられます)。文字列値:最大 2,000 文字。文字列でも数値でもない値は破棄されます |
マージ動作
グローバルプロパティ (
init()で設定) とイベントレベルのプロパティ (evaluateApi、sendCustom、sendException、またはsendResourceを通じて設定) は、ストレージ時にマージされます。イベントレベルのプロパティが優先されます。同じキーが両方に存在する場合、イベントレベルの値が優先されます。
マージ後、最大 20 個のキーと値のペアが保持されます。超過したペアはキーでソートされ、削除されます。
例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
properties: {
prop_string: 'xx',
prop_number: 2,
// 50 文字を超えるキーは切り捨てられます
more_than_50_key_limit_012345678901234567890123456789: 'yy',
// 2,000 文字を超える文字列値は切り捨てられます
more_than_2000_value_limit: new Array(2003).join('1'),
// 無効な型 -- これらのペアは削除されます
prop_null: null,
prop_undefined: undefined,
prop_bool: true,
},
});動的構成
SDK は構成設定のリモート配信をサポートしています。初期ロード中に、SDK は init() からの静的な値をオーバーライドするリモート設定をフェッチし、イベントトラッキングやデータ報告などの機能をそれに応じて更新します。
ステップ 1:ARMS コンソールでの構成
アプリケーションリスト に移動し、ご利用のアプリケーションを開きます。
アプリケーション設定 > SDK 設定 に移動します。
目的の構成値を設定します。
動的構成の更新を確認 をクリックして、設定をリモートの Object Storage Service (OSS) サーバーにプッシュします。
ステップ 2:SDK での有効化
アプリケーションがホストされている region を含む remoteConfig フィールドを初期化コードに追加します。
CDN:
window.__rum = {
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
remoteConfig: {
region: "cn-hangzhou" // 例:シンガポールは "ap-southeast-1"
}
};<script async src="https://xxid-sdk.rum.aliyuncs.com/v2/browser-sdk.js"></script>npm:
import ArmsRum from '@arms/rum-browser';
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
remoteConfig: {
region: "cn-hangzhou" // 例:シンガポールは "ap-southeast-1"
}
});キャッシュ動作
リモート構成を取得した後、SDK は設定をローカルにキャッシュします。その後の初期化では、SDK はキャッシュされた構成を優先します。
動的構成には、固定バージョンで CDN を介してインポートする場合、SDK バージョン 0.0.37自動解決パラメーター
SDK は、IP アドレスと User-Agent ヘッダーからこれらのプロパティを自動解決します。明示的に設定された値は、自動解決された値よりも優先されます。
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
| device | Object | いいえ | デバイス情報 |
| os | Object | いいえ | オペレーティングシステムとコンテナ情報 |
| geo | Object | いいえ | 地理位置情報 |
| isp | Object | いいえ | ISP/キャリア情報 |
| net | Object | いいえ | ネットワーク接続情報 |
フィールドの詳細については、ログデータトピックの共通プロパティセクションをご参照ください。
例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
geo: {
country: 'your custom country info',
city: 'your custom city info',
},
});SDK API
初期化後、これらのメソッドを使用して構成を変更し、カスタムデータを報告します。
getConfig
現在の SDK 構成を取得します。
const config = ArmsRum.getConfig();setConfig
ランタイムで SDK 構成を更新します。単一のキーと値のペア、または完全な構成オブジェクトを渡します。
// 単一の値を設定
ArmsRum.setConfig('env', 'pre');
// 複数の値を設定
const config = ArmsRum.getConfig();
ArmsRum.setConfig({
...config,
version: '1.0.0',
env: 'pre',
});sendCustom
カスタムイベントを報告します。type および name フィールドは必須です。
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
| type | String | はい | イベントタイプ |
| name | String | はい | イベント名 |
| group | String | いいえ | イベントグループ |
| value | Number | いいえ | 数値 |
| properties | Object | いいえ | カスタムプロパティ |
ArmsRum.sendCustom({
type: 'CustomEventType1',
name: 'customEventName2',
group: 'customEventGroup3',
value: 111.11,
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});sendException
カスタム例外を報告します。name および message フィールドは必須です。
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
| name | String | はい | 例外名 |
| message | String | はい | 例外メッセージ |
| file | String | いいえ | ソースファイル |
| stack | String | いいえ | スタックトレース |
| line | Number | いいえ | 行番号 |
| column | Number | いいえ | 列番号 |
| properties | Object | いいえ | カスタムプロパティ |
ArmsRum.sendException({
name: 'customErrorName',
message: 'custom error message',
file: 'custom exception filename',
stack: 'custom exception error.stack',
line: 1,
column: 2,
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});sendResource
カスタムリソースイベントを報告します。name、type、および duration フィールドは必須です。
| パラメーター | 型 | 必須 | 説明 | |
|---|---|---|---|---|
| name | String | はい | リソース名 | |
| type | String | はい | リソースタイプ (例: css、javascript、xmlhttprequest、fetch、api、image、font) | |
| duration | String | はい | 応答時間 | |
| success | Number | いいえ | 結果: 1 = 成功、0 = 失敗、-1 = 不明 | |
| method | String | いいえ | HTTP メソッド | |
| status_code | Number \ | String | いいえ | ステータスコード |
| message | String | いいえ | 応答メッセージ | |
| url | String | いいえ | リクエスト URL | |
| trace_id | String | いいえ | 分散トレース ID | |
| properties | Object | いいえ | カスタムプロパティ |
ArmsRum.sendResource({
name: 'getListByPage',
message: 'success',
duration: 800,
url: 'https://www.aliyun.com/data/getListByPage',
properties: {
prop_msg: 'custom msg',
prop_num: 1,
},
});