Web および HTML5 向けのリアルユーザーモニタリング (RUM) SDK では、データ収集、セッション管理、イベントフィルタリング、ホワイトスクリーン検出のための構成オプションを提供します。本リファレンスでは、一般的な SDK 構成、ランタイム API、および使用例について説明します。
初期化パラメーター
SDK の起動時に構成を設定するには、これらのパラメーターを ArmsRum.init() に渡します。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| 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 | 1 バッチあたりの最大イベント数 |
使用例
ArmsRum.init({
pid: "<your-app-id>",
endpoint: "<your-endpoint>",
reportConfig: {
flushTime: 0, // 即時送信
maxEventCount: 50, // 1 バッチあたり最大 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 | ブール値 \ | オブジェクト | いいえ | true | ページパフォーマンスデータ |
| webvitals | ブール値 \ | オブジェクト | いいえ | true | Web Vitals メトリック |
| api | ブール値 \ | オブジェクト | いいえ | true | API リクエスト (XMLHttpRequest、フェッチ) |
| staticResource | ブール値 \ | オブジェクト | いいえ | true | 静的リソースリクエスト |
| consoleError | ブール値 \ | オブジェクト | いいえ | true | コンソールエラー |
| jsError | ブール値 \ | オブジェクト | いいえ | true | JavaScript エラー |
| action | ブール値 \ | オブジェクト | いいえ | true | ユーザー動作 |
使用例
ユーザー操作のトラッキングを無効化します。
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 | 番号 \ | 文字列 | いいえ | ステータスコード |
| 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 パラメーター
特定のリソースまたは例外イベントをレポート対象から除外します。
| パラメーター | タイプ | 必須 | 説明 | |
|---|---|---|---|---|
| リソース | MatchOption \ | MatchOption[] | いいえ | マッチする静的リソースおよび API イベント (XMLHttpRequest、フェッチ) を除外します。 |
| 例外 | MatchOption \ | MatchOption[] | いいえ | マッチする例外イベントを除外します。 |
MatchOption 型
type MatchOption = string | RegExp | ((value: string) => boolean);文字列 — 指定された値で始まる任意の URL またはメッセージと一致します。たとえば、
'https://api.aliyun.com'は'https://api.aliyun.com/v1/resource'と一致します。正規表現 — URL またはメッセージを正規表現と照合します。
関数 — 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 × 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 で有効化する
初期化コードに、アプリケーションがホストされている remoteConfig フィールドを region とともに追加します。
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,
},
});