ARMS用戶體驗監控提供一系列SDK配置項,讓您能夠通過設置參數來滿足額外需求。本文介紹Web & H5應用常用的SDK配置。
SDK 配置
參數 | 類型 | 描述 | 是否必填 | 默認值 |
pid | string | 應用ID | 是 | - |
endpoint | string | 上報地址 | 是 | - |
env | string | 應用環境:
| 否 | prod |
version | string | 應用版本 | 否 | - |
user | object | User配置 | 否 | user.id由SDK默認生成 |
spaMode | string | SPA模式,監聽頁面事件并重新上報PV,適用于單頁面應用場景。
| 否 | false |
beforeReport | function | Repoter發送RUM事件之前 | 否 | - |
reportConfig | object | 上報配置,詳細說明請參見reportConfig 配置。 | 否 | - |
sessionConfig | object | Session的采樣、存儲等配置,詳細說明請參見sessionConfig 配置。 | 否 | - |
collectors | object | 各Collector(采集器)配置 | 否 | - |
parseViewName | function | 解析視圖名稱(view.name),入參為當前頁面的URL。 | 否 | - |
parseResourceName | function | 解析資源名稱(resource.name),入參為當前資源的URL。 | 否 | - |
evaluateApi | function | 自定義解析API事件,詳細說明請參見 evaluateApi 配置。 | 否 | - |
filters | object | 事件過濾配置,詳情說明請參見 filters 配置。 | 否 | - |
whiteScreen | object | 白屏監控配置,詳細說明請參見 whiteScreen 配置。 | 否 | - |
properties | object | 自定義屬性,可對所有事件生效,詳情說明請參見 properties 配置。 | 否 | - |
使用CDN加載情況下,訪問 SDK 監控實例,請使用全局命名空間 RumSDK.default。
const ArmsRum = window.RumSDK.default;
// 訪問 RumSDK 需確保SDK已經完成加載
// 如果SDK加載前沒有定義 __rum 配置,可在此初始化
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
});
// 以下繼續使用,NPM 和 CDN 一致
ArmsRum.setConfig('env', 'pre');
user 配置
參數 | 類型 | 描述 | 是否必填 | 默認值 |
id | string | 用戶ID,不可修改。 | 否 | 由SDK默認生成 |
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 endpint",
reportConfig: {
flushTime: 0, // 立即上報
maxEventCount: 50, // 一次最多上報數量
},
});
sessionConfig 配置
參數 | 類型 | 描述 | 是否必填 | 默認值 |
sampleRate | number | Session采樣率:[0, 1] 50%采樣率就是0.5。 | 否 | 1 |
maxDuration | number(ms) | Session最大持續時間,默認24小時。 | 否 | 86400000 |
overtime | number(ms) | Session超時時間,默認一小時。 | 否 | 3600000 |
storage | string | Session相關的數據存儲位置。
| 否 | localStorage |
Storage存儲了user.id和session信息 :
_arms_uid:唯一標識用戶ID,對應user.id。
_arms_session:具備語義化的Session信息。
sessionId:Session唯一標識。
sampled:是否命中采樣。
startTime:Session的開始時間戳。
lastTime:Session最后一次活躍時間戳。
`${sessionId}-${sampled}-${startTime}-${lastTime}`
示例
ArmsRum.init({
pid: "your app id",
endpoint: "your endpint",
sessionConfig: {
sampleRate: 0.5, // 采樣率50%
maxDuration: 86400000,
overtime: 3600000,
storage: 'cookie',
},
});
collectors 配置
Collector是RUM SDK用于收集頁面監控數據的最小單元。目前RUM SDK內置了API、static Resource等豐富的采集器。
參數 | 類型 | 描述 | 是否必填 | 默認值 |
perf | boolean | object | 監聽頁面的性能數據。 | 否 | true |
webvitals | boolean | object | 監聽頁面的WebVitals數據。 | 否 | true |
api | boolean | object | 監聽API請求。 | 否 | true |
staticResource | boolean | object | 監聽靜態資源請求。 | 否 | true |
consoleError | boolean | object | 監聽Console錯誤。 | 否 | true |
jsError | boolean | object | 監聽JS錯誤。 | 否 | true |
action | boolean | object | 監聽用戶行為。 | 否 | true |
示例
關閉監聽用戶Click行為。
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
collectors: {
action: false,
},
});
evaluateApi 配置
evaluateApi提供對API(XMLHttpRequest/fetch)事件的自定義解析。以下為SDK傳入的三個參數:
參數 | 類型 | 描述 |
options | object | 請求參數,包括url、headers、data等,根據具體請求方式有所差異。 |
response | object | 請求響應體。 |
error | Error | 可選參數,當請求失敗才會傳入。 |
該函數支持異步函數,返回Promise<IApiBaseAttr>,IApiBaseAttr的定義如下:
參數 | 類型 | 描述 | 是否必填 |
name | string | API名稱,一般是對URL的收斂,最大1000字符。 例如URL為 重要 該字段的優先級高于parseResourceName返回的內容。 | 否 |
message | string | API信息,一個簡短的描述API概況字符串,最大1000字符。 | 否 |
success | number | 請求成功狀態:
| 否 |
duration | number | API總耗時。 | 否 |
status_code | number | string | API狀態碼。 | 否 |
snapshots | string | API快照。 說明 可用于存儲reqHeaders、params、resHeaders等,具體字段組成方式可自行決定。該字段主要用于排查接口異常的原因,沒有索引,不能根據該字段進行篩選或聚合,只接受字符串類型,最大5000字符。 | 否 |
示例
ArmsRum.init({
pid: "your app id",
endpoint: "your endpint",
evaluateApi: async (options, response, error) => {
let respText = '';
// 當前為使用fetch請求的情況
if (response && response.text) {
respText = await response.text();
}
// 返回的字段會覆蓋默認內容,不返回的字段會依然使用SDK自定生成內容
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 和 exception 兩種事件。
參數 | 類型 | 描述 | 是否必填 |
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:使用提供的RegExp和URL執行test。
function:以URL作為參數進行計算,返回true表示匹配。
當傳入為 MatchOption[] 時,條件順序執行,有一項滿足就會被過濾。
示例
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
filters: {
// 過濾異常
exception: [
'Test error', // 以'Test error'開頭的error.message
/^Script error\.?$/, // 正則表達式匹配 error.message
(msg) => {
return msg.includes('example-error');
},
],
// 過濾資源或API
resource: [
'https://example.com/', // 以'https://example.com/'開頭的resource
/localhost/i,
(url) => {
return url.includes('example-resource');
},
],
},
});
whiteScreen 配置
白屏監控僅支持瀏覽器端(Chrome 40+,IE 9+)。
參數 | 類型 | 描述 |
detectionRules |
| 包含一個或多個白屏檢測規則,按配置順序和延時大小觸發檢測。 |
DetectionRule
參數 | 類型 | 是否必填 | 描述 | 默認值 |
target |
| 是 | 指定白屏檢測的目標元素的選擇器。當檢測觸發時,系統將對匹配此選擇器的元素區域進行白屏檢測。 | 無 |
test_when |
| 是 | 列出觸發白屏檢測的事件,檢測將在這些事件發生后啟動,可選值:
| 無 |
delay |
| 否 | 配合 |
|
tester |
| 是 | 定義使用的白屏檢測方法。
| 無 |
ignoreUrlList |
| 否 | 需要忽略檢測的URL列表,當頁面URL與列表中的任何一個匹配時,不進行白屏檢測。 |
|
configOptions |
| 否 | 和 | 詳見 |
CustomTestResult
的類型聲明:
type CustomTesterResult = {
/**
* 是否存在內容,如果為`true`則表示有內容,`false`表示發生白屏。
*/
hasContent: boolean;
/**
* 錯誤信息
*/
message?: string;
/**
* 異常的快照數據
*/
snapshot?: Record<string, any>;
}
ConfigOptions
參數僅在關聯方法中生效。
參數 | 類型 | 關聯方法 | 描述 | 默認值 |
colorRange |
|
| 視為白屏的顏色集合,用于像素比對時判斷當前像素區塊是否為“全白”,格式為 |
|
fillColor |
|
| 填充顏色。在截圖時會對圖片、視頻、canvas、svg、iframe 等元素進行色塊填充,填充色不能是 |
|
horizontalOffset |
|
| 白屏檢測區域左側邊緣相對于目標元素左側邊緣的水平偏移量,用于過濾目標元素的左側菜單。 |
|
verticalOffset |
|
| 白屏檢測區域上邊緣相對于目標元素上邊緣的垂直偏移量,用于過濾目標元素的 topBar。 |
|
pixels |
|
| 指定白屏檢測時,采樣像素區塊的大小,區塊的大小為 |
|
threshold |
|
| 白屏率閾值,當白屏率大于該值時,認為發生白屏。 |
|
dpr |
|
| 設置快照圖片的縮放比例。 |
|
ignoreElements |
|
| 需要忽略檢測的元素的 CSS 選擇器,這些元素在截圖時將被忽略。 |
|
sampleMethod |
|
| 采樣方法:
|
|
checkPoints |
|
| 設置徑向的采樣點數量。
|
|
whiteBoxElements |
|
| 白屏元素的 CSS 選擇器列表,當采樣點的頂層 DOM 元素匹配此列表中的選擇器時,增加白屏計數。 |
|
debug |
|
| 是否開啟調試模式,在調試模式下可以在開發者工具里看到打印的檢測信息。 |
|
示例
SCREENSHOT 截圖檢測法
ArmsRum.init({
pid: "your app id",
endpoint: "your endpint",
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 endpint",
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 endpint",
whiteScreen: {
detectionRules: [{
target: '#root',
test_when: ['LOAD', 'ERROR', 'ROUTE_CHANGE', 'LEAVE'],
delay: 5000,
tester: async (element) => {
// 自定義檢測函數主題
return {
hasContent: false,
message: '自定義的錯誤信息',
snapshot: {
// 鍵值對可自定義
checkPoints: 100,
rate: 0.99,
checkdata: '......',
},
};
},
}],
},
});
properties 配置
Properties是RUM提供的自定義屬性,可為任何上報事件配置該屬性。
參數 | 類型 | 描述 | 是否必填 |
[key: string] | string | number |
| 否 |
使用evaluateApi、sendCustom、sendException、sendResource等可以單獨為某個事件增加properties,僅對單個事件生效。
全局properties和事件properties在存儲時會進行合并。事件properties優先級高于全局properties,合并時相同的key,事件properties會覆蓋全局properties。合并后properties鍵值對數量不可超過20對,超出會基于key進行排序后移除。
示例
全局配置properties時,所有上報的事件都會擁有。
ArmsRum.init({
pid: "your app id",
endpoint: "your endpoint",
properties: {
prop_string: 'xx',
prop_number: 2,
// key 和 value 超出范圍會被截斷
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支持配置基于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 cuntry info',
city: 'your custom city info',
},
});
SDK API
RUM SDK開放API,用于修改上報自定義數據,動態修改SDK配置等。
getConfig
獲取SDK配置。
setConfig
修改SDK配置。
// 指定 key 設置
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、other。 | 是 |
duration | string | 請求耗時。 | 是 |
success | number | 請求成功狀態:
| 否 |
method | string | 請求方法。 | 否 |
status_code | number | string | 請求狀態碼。 | 否 |
message | string | 請求消息。 | 否 |
url | string | 請求地址。 | 否 |
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,
},
});