Application Real-Time Monitoring Service (ARMS) の Web および HTML5 向けリアルユーザーモニタリング (RUM) SDK は、ビジネス要件を満たすためにさまざまなカスタム構成を提供します。このトピックでは、参考として Web および HTML5 アプリケーションの一般的な SDK 構成について説明します。
SDK パラメーター
パラメーター | タイプ | 説明 | 必須 | デフォルト値 |
pid | String | アプリケーション ID。 | はい | - |
endpoint | String | モニタリングデータがレポートされるアドレス。 | はい | - |
env | String | アプリケーションの環境。有効な値:
| いいえ | prod |
version | String | アプリケーションのバージョン。 | いいえ | - |
user | Object | ユーザー設定。デフォルトでは、ユーザー ID (user.id) は RUM SDK によって生成されます。 | いいえ | - |
spaMode | String | ページイベントをモニターし、ページビューを再度レポートするかどうかを指定します。このパラメーターは、シングルページアプリケーション (SPA) に適用されます。有効な値:
| いいえ | false |
beforeReport | Function | データをレポートする前に呼び出され、レポートされるデータを変更またはブロックする関数。 | いいえ | - |
reportConfig | Object | データレポート設定。詳細については、「reportConfig パラメーター」セクションをご参照ください。 | いいえ | - |
sessionConfig | Object | サンプリングやストレージなどのセッションの設定に関する詳細については、「SessionConfig」セクションをご参照ください。 | いいえ | - |
collectors | Object | コレクター設定。 | いいえ | - |
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 | 動的構成。詳細については、「動的構成」セクションをご参照ください。 | いいえ | - |
Alibaba Cloud Content Delivery Network (CDN) を使用してアプリケーションにアクセスする場合、アプリケーションがグローバル名前空間 RumSDK.default に存在することを確認してください。
const ArmsRum = window.RumSDK.default;
// RUM SDK を使用する前に、SDK がロードされていることを確認してください。
// SDK がロードされる前に __rum 構成が定義されていない場合は、ここで構成を初期化できます。
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
});
// NPM パッケージまたは CDN ローディングによる初期化は同じです。
ArmsRum.setConfig('env', 'pre');
ユーザーパラメーター
パラメーター | タイプ | 説明 | 必須 | デフォルト値 |
id | String | SDK によって生成されるユーザー ID で、変更できません。 | いいえ | - |
tags | String | タグ。 | いいえ | - |
name | String | ユーザー名。 | いいえ | - |
例
ユーザーをビジネスアカウントシステムに関連付けるには、user.name または user.tags を使用します。user.id は SDK によって自動的に生成され、変更できません。user.id を上書きすると、UV 計算に影響します。
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
user: {
name: 'your user.name',
tags: 'your user.tags',
},
});
reportConfig パラメーター
パラメーター | タイプ | 説明 | 必須 | デフォルト値 |
flushTime | Number | データがレポートされる間隔。 有効な値: 0 から 10000。 | いいえ | 3000 |
maxEventCount | Number | 一度にレポートされるデータエントリの最大数。 有効な値: 1 から 100。 | いいえ | 20 |
例
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
reportConfig: {
flushTime: 0, // データが即時にレポートされるように指定します。
maxEventCount: 50, // 一度にレポートされるデータエントリの最大数を指定します。
},
});
sessionConfig パラメーター
パラメーター | タイプ | 説明 | 必須 | デフォルト値 |
sampleRate | Number | サンプリングレート。有効な値: 0 から 1。 値 0.5 は 50% のサンプリングレートを指定します。 | いいえ | 1 |
maxDuration | Number | セッションの最大期間。単位: ミリ秒。デフォルト値: 86400000 (24 時間)。 | いいえ | 86400000 |
overtime | Number | セッションのタイムアウト期間。単位: ミリ秒。デフォルト値: 3600000 (1 時間)。 | いいえ | 3600000 |
storage | String | セッション関連データのストレージ場所。有効な値:
| いいえ | localStorage |
storage パラメーターは user.id とセッション情報を格納します:
_arms_uid: 一意のユーザー ID (user.id)。
_arms_session: セマンティックセッション情報。
sessionId: 一意のセッション ID。
sampled: サンプリングがトリガーされたかどうかを指定します。
startTime: セッションの開始タイムスタンプ。
lastTime: セッションが最後にアクティブだったときのタイムスタンプ。
`${sessionId}-${sampled}-${startTime}-${lastTime}`例
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
sessionConfig: {
sampleRate: 0.5, // サンプリングレートは 50% です。
maxDuration: 86400000,
overtime: 3600000,
storage: 'cookie',
},
});
collectors パラメーター
SDK は、api や静的リソースなどのコレクターを使用して、ページのモニタリングデータを収集します。
パラメーター | タイプ | 説明 | 必須 | デフォルト値 |
perf | Boolean | Object | アプリケーションのパフォーマンスデータを追跡します。 | いいえ | true |
webvitals | Boolean | Object | アプリケーションの Web Vitals データを追跡します。 | いいえ | true |
api | Boolean | Object | API リクエストを追跡します。 | いいえ | true |
staticResource | Boolean | Object | 静的リソースリクエストを追跡します。 | いいえ | true |
consoleError | Boolean | Object | コンソールエラーを追跡します。 | いいえ | true |
jsError | Boolean | Object | JavaScript エラーを追跡します。 | いいえ | true |
action | Boolean | Object | ユーザーの動作を追跡します。 | いいえ | true |
例
次の例では、ユーザーインタラクションデータの収集が無効になっています。
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
collectors: {
action: false,
},
});
EvaluateApi パラメーター
evaluateApi 関数は、XMLHttpRequest および fetch イベントのカスタム解析を提供します。
パラメーター | タイプ | 説明 |
options | Object | url、headers、data を含むリクエストパラメーター。パラメーターはリクエストメソッドに依存します。 |
response | Object | リクエストの応答本文。 |
error | Error | エラー。このパラメーターはオプションであり、リクエストが失敗した場合にのみ使用できます。 |
この関数は非同期で呼び出すことができます。Promise<IApiBaseAttr> が返されます。次の表に IApiBaseAttr を示します。
パラメーター | タイプ | 説明 | 必須 |
name | String | API 名。通常は集約された URL で、最大 1,000 文字の長さです。 URL が 重要 このフィールドは parseResourceName 関数によって返されるものよりも優先されます。 | いいえ |
message | String | API を説明するために使用される短い文字列で、最大 1,000 文字の長さです。 | いいえ |
success | Number | リクエストが成功したかどうかを示します。有効な値:
| いいえ |
duration | Number | API の合計期間。 | いいえ |
status_code | Number | String | 状態コード。 | いいえ |
snapshots | String | スナップショット。 説明 スナップショットには、reqHeaders、params、および resHeaders に関する情報が格納されます。スナップショットを構成するフィールドをカスタマイズできます。スナップショットは主に例外のトラブルシューティングに使用されます。スナップショットにはインデックスがないため、クエリや集約のフィルター条件として構成することはできません。最大 5,000 文字の文字列のみ可能です。 | いいえ |
例
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 パラメーター
filters パラメーターは、レポートする必要のないリソースまたは例外イベントを除外します。
パラメーター | タイプ | 説明 | 必須 |
resource | MatchOption | MatchOption[] | レポートする必要のない XMLHttpRequest や fetch などの静的リソースや API に関連するイベントを除外します。 | いいえ |
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 が返された場合、URL は一致します。
入力が MatchOption[] の場合、前述の条件が順に評価され、いずれかの条件が満たされると除外されます。
例
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
filters: {
// 例外イベントを除外します。
exception: [
'Test error', // 'Test error' で始まるエラーメッセージ。
/^ Script error\.?$/, // 正規表現に一致するエラーメッセージ。
(msg) => {
return msg.includes('example-error');
},
],
// リソースまたは API イベントを除外します。
resource: [
'https://example.com/', // 'https://example.com/' で始まるリソース
/localhost/i,
(url) => {
return url.includes('example-resource');
},
],
},
});
whiteScreen パラメーター
whiteScreen パラメーターは、Chrome 40 や IE 9+ などのブラウザでのみサポートされています。
パラメーター | タイプ | 説明 |
detectionRules |
| ルールが構成されているシーケンスと遅延に基づいてブラウザを検出するための 1 つ以上のルールを指定します。 |
DetectionRule
パラメーター | タイプ | 必須 | 説明 | デフォルト値 |
target |
| はい | 検出する要素を指定します。検出はセレクターに一致するエリアで実行されます。 | なし |
test_when |
| はい | 検出をトリガーできるイベントを指定します。有効な値:
| なし |
delay |
| いいえ |
|
|
tester |
| はい | 検出メソッドを定義します。有効な値:
| なし |
ignoreUrlList |
| いいえ | 検出する必要のないページ URL のリスト。 |
|
configOptions |
| いいえ |
|
|
CustomTesterResult:
type CustomTesterResult = {
/**
* コンテンツが存在するかどうかを示します。`true` はコンテンツが存在することを示します。それ以外の場合は、ホワイトスクリーンが発生しています。
*/
hasContent: boolean;
/**
* エラーメッセージ
*/
message?: string;
/**
* 例外のスナップショットデータ
*/
snapshot?: Record<string, any>;
}ConfigOptions
ConfigOptions パラメーターは、関連する検出メソッドでのみ使用できます。
パラメーター | タイプ | 関連メソッド | 説明 | デフォルト値 |
colorRange |
|
| ホワイトスクリーンと見なされる色のセット。ピクセル比較中に現在のピクセルブロックが「完全に白」であるかどうかを判断します。フォーマット: |
|
fillColor |
|
| 塗りつぶしの色。スクリーンショット撮影中、イメージ、ビデオ、キャンバス、SVG、iframe などの要素にカラーブロックの塗りつぶしが適用されます。塗りつぶしの色は、 |
|
horizontalOffset |
|
| ターゲット要素の左端に対するホワイトスクリーン検出エリアの左端の水平オフセット。ターゲット要素の左メニューをフィルターするために使用されます。 |
|
verticalOffset |
|
| ターゲット要素の上端に対するホワイトスクリーン検出エリアの上端の垂直オフセット。ターゲット要素のトップバーをフィルターするために使用されます。 |
|
pixels |
|
| ホワイトスクリーン検出に使用されるピクセルブロックのサイズ。各ブロックのサイズは |
|
threshold |
|
| ホワイトスクリーン率のしきい値。ホワイトスクリーン率がしきい値を超えると、ホワイトスクリーンが発生したと見なされます。 |
|
dpr |
|
| スナップショットイメージのスケーリング比。 |
|
ignoreElements |
|
| 検出のためにスクリーンショットを撮る際に無視される要素のカスケードスタイルシート (CSS) セレクター。 |
|
sampleMethod |
|
| サンプリングメソッド。有効な値:
|
|
checkPoints |
|
| 放射状サンプリングポイントの数。
|
|
whiteBoxElements |
|
| ホワイトスクリーン要素の CSS セレクターのリスト。サンプリングポイントのトップレベル DOM 要素がこれらのセレクターのいずれかに一致する場合、ホワイトスクリーンカウントが増分されます。 |
|
debug |
|
| デバッグモードを有効にするかどうかを指定します。デバッグモードでは、印刷された検出情報が開発者ツールに表示されます。 |
|
例
SCREENSHOT
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,
},
}],
},
});
SAMPLE
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'],
},
}],
},
});
CUSTOM
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 パラメーター
RUM が提供するプロパティは、すべてのイベントに対して構成できます。
パラメーター | タイプ | 説明 | 必須 |
[key: string] | String | Number |
| いいえ |
evaluateApi、sendCustom、sendException、および sendResource を使用して、イベントにプロパティを追加できます。プロパティはイベントに対してのみ有効です。
グローバルプロパティとイベントプロパティは、格納時にマージされます。イベントプロパティはグローバルプロパティよりも優先度が高くなります。マージ時に同じキーが使用された場合、イベントプロパティがグローバルプロパティを上書きします。マージ後のキーと値のペアの数は 20 を超えることはできません。20 を超える場合、ペアはキーに基づいてソートされ、超過分は削除されます。
例
グローバルに構成されたプロパティは、すべてのレポートされたイベントにアタッチされます。
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
properties: {
prop_string: 'xx',
prop_number: 2,
// キーまたは値の長さが制限を超えた場合、超過部分は削除されます。
more_than_50_key_limit_012345678901234567890123456789: 'yy',
more_than_2000_value_limit: new Array(2003).join('1'),
// 以下の無効なキーと値のペアは削除されます。
prop_null: null,
prop_undefined: undefined,
prop_bool: true,
},
});
動的構成
RUM は、SDK の収集およびレポート構成の動的配信をサポートしています。これらの動的構成は、アプリケーションの初期ロード中に SDK によってロードされ、SDK の初期化時に設定された静的構成をオーバーライドします。実装は、コンソールと SDK の 2 つの部分で構成されます。
コンソール構成
動的構成を有効にする前に、[アプリケーションリスト] をクリックし、アプリケーション詳細ページに移動し、[アプリケーション設定] > [SDK 設定] を選択して ARMS コンソールで構成します。
構成とテストを完了した後、[動的構成の更新を確認] をクリックして、構成をリモート OSS サーバーにプッシュして保存します。
SDK 構成
動的構成配信を有効にするには、SDK の初期化構成に remoteConfig フィールドを追加する必要もあります。初期化時に、SDK はこのフィールドに基づいて OSS からリモート構成をフェッチし、イベントトラッキングやデータレポートなどの機能を適宜更新します。
CDN 経由で SDK を初期化します:
window.__rum = {
pid: "your app id",
endpoint: "your endpoint",
remoteConfig: {
// Web アプリケーションがホストされているリージョンを設定します。例: シンガポールは ap-southeast-1 です。
region: "cn-hangzhou"
}
};
// CDN 経由で SDK をロードします
<script async src="https://xxid-sdk.rum.aliyuncs.com/v2/browser-sdk.js"></script>
NPM パッケージ経由で SDK を初期化します:
import ArmsRum from '@arms/rum-browser';
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
remoteConfig: {
// Web アプリケーションがホストされているリージョンを設定します。例: シンガポールは ap-southeast-1 です。
region: "cn-hangzhou"
}
});
SDK がリモート構成を取得すると、構成をすぐに適用するだけでなく、ローカルにも保存するため、SDK は次回の初期化時にキャッシュされた構成を優先的に使用できます。
注: SDK が NPM パッケージとして、またはバージョンを指定して CDN 経由でインポートされる場合、動的構成を有効にするにはバージョンが 0.0.37 以上であることを確認してください。
その他のパラメーター
RUM SDK を使用すると、IP アドレスと UserAgent に基づいて解決される共通のプロパティを構成できます。事前に構成されたフィールドは、自動的に解決されるフィールドよりも優先度が高くなります。
パラメーター | タイプ | 説明 | 必須 |
device | Object | デバイス情報。 | いいえ |
os | Object | システムおよびコンテナー情報。 | いいえ |
geo | Object | ジオロケーション情報。 | いいえ |
isp | Object | キャリア情報。 | いいえ |
net | Object | ネットワーク情報。 | いいえ |
上記のフィールドに関する設定項目の詳細については、「ログデータ」トピックの「共通プロパティ」セクションをご参照ください。
例
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
geo: {
country: 'your custom country info',
city: 'your custom city info',
},
});
SDK API
RUM SDK は、カスタムデータの変更とレポート、および SDK 構成の動的な変更のための API を提供します。
getConfig
この関数を使用して SDK 構成を取得できます。
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: 'CustomEvnetType1',
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 | リクエストが成功したかどうかを示します。有効な値:
| いいえ |
method | String | リクエストメソッド。有効な値: | いいえ |
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,
},
});