本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
ARMS前端監控提供一系列SDK配置項,讓您能夠通過設置參數來滿足額外需求,例如忽略指定URL、API、JS錯誤的上報、通過過濾URL中的非關鍵字符使頁面聚類、通過隨機采樣上報來減小上報量并降低負載等。
本頁索引
pid | uid | tag | page | setUsername | enableSPA | parseHash | disableHook | ignoreUrlCase | urlHelper | apiHelper | parseResponse | ignore | disabled | sample | pvSample | sendResource | useFmp | enableLinkTrace | release | environment | behavior | c1\c2\c3 | autoSendPerf
如何使用前端監控SDK配置項
可通過以下兩種方式使用前端監控SDK配置項:
向頁面插入BI探針時在config中添加額外參數。
例如,以下示例代碼的config中,除了默認的pid參數外,還添加了用于單頁面應用(Single Page Application)場景的enableSPA參數。
<script> !(function(c,b,d,a){c[a]||(c[a]={});c[a].config={pid:"xxxxxx",enableSPA:true}; with(b)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("crossorigin","",src=d) })(window,document,"https://retcode.alicdn.com/retcode/bl.js","__bl"); </script>
頁面初始化完成后,在前端JS代碼中調用setConfig方法來修改配置項。
__bl.setConfig(next)
調用參數說明:參數
類型
描述
是否必選
默認值
next
Object
需要修改的配置項以及值
是
無
pid
|
|
|
|
|
pid | String | 項目唯一ID,由ARMS在創建站點時自動生成。 | 是 | 無 |
uid
|
|
|
|
|
uid | String | 用戶ID,用于標識訪問用戶,可手動配置,用于根據用戶ID檢索。如果不配置,則由SDK隨機自動生成且每半年更新一次。 |
|
|
示例:調用setConfig方法修改SDK配置項。
__bl.setConfig({
uid: 12345
});
對于setConfig方法,小程序場景不支持配置uid,您可以使用setUsername代替uid標識用戶。
tag
|
|
|
|
|
tag | String | 傳入的標記,每條日志都會攜帶該標記。 | 否 | 無 |
page
|
|
|
|
|
page | String | 頁面名稱。 | 否 | 默認取當前頁面URL的關鍵部分: host + pathname 。 |
您可以根據實際情況,使用ignoreErrors過濾需要上報的錯誤。具體操作,請參見ignore。
setUsername
|
|
|
|
|
setUsername | Function | 用于設置一個方法,該方法需要返回類型為String的用戶名稱。 | 否 | 無 |
本配置項用于設置一個方法,該方法需要返回類型為String的用戶名稱。配置后可以根據用戶名稱進行全鏈路追蹤(會話追蹤)、查詢用戶會話軌跡,便于排查問題。
若頁面加載初期暫時無法獲取用戶名,則可設置返回Null,但不要設置返回一個臨時用戶名。因為SDK發送日志時會再次調用setUsername方法獲取用戶名,如果之前設置了返回臨時用戶名,則會一直沿用最初設置的用戶名,不再重新獲取。
在不關閉應用的情況下,setUsername只能設置一次。
示例:調用setConfig方法修改SDK配置項。
__bl.setConfig({
setUsername: function () {
return "username_xxx";
}
});
enableSPA
|
|
|
|
|
enableSPA | Boolean | 監聽頁面的hashchange事件并重新上報PV,適用于單頁面應用場景。 | 否(僅Web場景支持) | false |
parseHash
|
|
|
|
|
parseHash | Function | 與enableSPA搭配使用。 | 否 | 見下文 |
單頁面應用場景中(參見SPA頁面上報),在enableSPA設為true
的前提下,頁面觸發hashchange事件時,parseHash參數用于將URL Hash解析為Page字段。
默認值
其默認值由一個簡單的字符串處理方法獲得:
function (hash) {
var page = hash ? hash.replace(/^#/, '').replace(/\?.*$/, '') : '';
return page || '[index]';
}
此項一般情況下不需要修改。如果需要在上報時使用自定義的頁面名,或者URL的Hash比較復雜,則需要修改此配置項。例如:
// 定義頁面Hash和Page的映射關系。
var PAGE_MAP = {
'/': '首頁',
'/contact': '聯系我們',
'/list': '數據列表',
// ...
};
// 頁面load后調用SDK方法。
window.addEventListener('load', function (e) {
// 調用setConfig方法修改SDK配置項。
__bl.setConfig({
parseHash: function (hash) {
key = hash.replace(/\?.*$/, '');
return PAGE_MAP[key] || '未知頁面';
}
});
});
disableHook
disableHook僅在初始化配置時生效。
|
|
|
|
|
disableHook | Boolean | 禁用AJAX請求監聽。 | 否 | false :默認會監聽并用于API調用成功率上報。 |
ignoreUrlCase
|
|
|
|
|
ignoreUrlCase | Boolean | 忽略Page URL大小寫。 | 否 | true :默認忽略。 |
urlHelper
|
|
|
|
|
urlHelper | * | 代替舊參數ignoreUrlPath,用于配置URL過濾規則。 | 否 | 見下文 |
當頁面URL類似于http://example.com/projects/123456
(projects后面的數字是項目ID)時,如果將example.com/projects/123456
作為page上報,會導致在數據查看時頁面無法聚成一類。這種情況下,為了使同類頁面聚類,可以使用urlHelper參數過濾掉非關鍵字符,例如此例中的項目ID。
用于URL過濾規則的舊參數ignoreUrlPath現已廢棄,請使用新參數urlHelper。若繼續使用舊參數且不使用新參數,配置仍將生效。若同時使用新舊參數,則新參數的配置生效。
此配置項只在自動獲取頁面URL作為Page時才會生效。如果手動調用setPage或setConfig方法(參考前端接口說明)修改過Page,或者如果enableSPA已設為
true
,則此設置項無效。
默認值
此配置項的默認值是以下數組,一般情況下不需要修改。
[
// 將所有Path中的數字變成*。
{rule: /\/([a-z\-_]+)?\d{2,20}/g, target: '/$1**'},
// 去掉URL末尾的'/'。
/\/$/
]
此設置項的默認值會過濾掉xxxx/123456
后面的數字,例如xxxx/00001
和xxxx/00002
都會變成xxxx/**
。
值類型
urlHelper的值可以是以下類型:
String
或RegExp
(正則表達式):將匹配到的字符串去掉。Object<rule, target>
:對象包含兩個Key(rule和target)作為JS字符串的replace方法的入參。使用方法參見JS相關教程中的String::replace方法。Function
:將原字符串作為入參執行方法,將執行結果作為Page。Array
:用于設置多條規則,每條規則都可以是上述類型之一。
apiHelper
|
|
|
|
|
apiHelper | * | 代替舊參數ignoreApiPath,用于配置API過濾規則。 | 否 | 見下文 |
用于在自動上報API時過濾接口URL中的非關鍵字符,用法及含義同urlHelper。
用于API過濾規則的舊參數ignoreApiPath現已廢棄,請使用新參數apiHelper。若繼續使用舊參數且不使用新參數,配置仍將生效。若同時使用新舊參數,則新參數的配置生效,舊參數的配置不生效。
默認值
默認值是一個對象,一般情況下不需要修改:
{rule: /(\w+)\/\d{2,}/g, target: '$1'}
此設置項的默認值會過濾掉接口URL中類似xxxx/123456
后面的數字。
如果需要在API中上報?
后面的參數,例如:https://arms.console.aliyun.com/apm?pid=fr6fbgbeot
中的pid參數,需要按照以下方法手動上報API數據:
parseResponse
|
|
|
|
|
parseResponse | Function | 用于解析自動上報API時返回的數據。 | 否 | 見下文 |
該配置項用于解析自動上報API時返回的數據。
默認值
該配置項的默認值為:
function (res) {
if (!res || typeof res !== 'object') return {};
var code = res.code;
var msg = res.msg || res.message || res.subMsg || res.errorMsg || res.ret || res.errorResponse || '';
if (typeof msg === 'object') {
code = code || msg.code;
msg = msg.msg || msg.message || msg.info || msg.ret || JSON.stringify(msg);
}
return {msg: msg, code: code, success: true};
}
以上代碼會解析返回的數據,嘗試提取出msg
和code
。對于一般應用來說,此設置項不需要修改。如果默認值無法滿足業務需求,則可以重新設置。
ignore
|
|
|
|
|
ignore | Object | 忽略指定URL/API/JS錯誤。符合規則的日志將被忽略且不會被上報,包含子配置項ignoreUrls、ignoreApis、ignoreErrors和ignoreResErrors。 | 否 | 見下文 |
ignore的值是一個對象,對象中包含4個屬性:ignoreUrls、ignoreApis、ignoreErrors和ignoreResErrors。可單獨設置其中的1個或多個屬性。
默認值
該配置項的默認值為:
ignore: {
ignoreUrls: [],
ignoreApis: [],
ignoreErrors: [],
ignoreResErrors: []
},
ignoreUrls
ignoreUrls表示忽略某些URL,符合規則的URL下的日志都不會被上報。值可以是String
、RegExp
、Function
或者以上三種類型組成的數組。示例:
__bl.setConfig({
ignore: {
ignoreUrls: [
'http://host1/', // 字符串
/.+?host2.+/, // 正則表達式
function(str) { // 方法
if (str && str.indexOf('host3') >= 0) {
return true; // 不上報
}
return false; // 上報
}]
}
});
ignoreApis
ignoreApis表示忽略某些API,符合規則的API將不會被監控。值可以是String
、RegExp
、Function
或者以上三種類型組成的數組。示例:
__bl.setConfig({
ignore: {
ignoreApis: [
'api1','api2','api3', // 字符串
/^random/, // 正則表達式
function(str) { // 方法
if (str && str.indexOf('api3') >= 0) return true; // 不上報
return false; // 上報
}]
}
});
ignoreErrors
ignoreErrors表示忽略某些JS錯誤,符合規則的JS錯誤不會被上報。值可以是String
、RegExp
、Function
或者以上三種類型組成的數組。示例:
__bl.setConfig({
ignore: {
ignoreErrors: [
'test error', // 字符串
/^Script error\.?$/, // 正則表達式
function(str) { // 方法
if (str && str.indexOf('Unknown error') >= 0) return true; // 不上報
return false; // 上報
}]
}
});
ignoreResErrors
ignoreResErrors表示忽略指定的資源錯誤,符合規則的資源錯誤不會被上報。值可以是String
、RegExp
、Function
或者以上三種類型組成的數組。示例:
__bl.setConfig({
ignore: {
ignoreResErrors: [
'http://xx/picture.jpg', // 字符串
/jpg$/, // 正則表達式
function(str) { // 方法
if (str && str.indexOf('xx.jpg') >= 0) return true; // 不上報
return false; // 上報
}]
}
});
disabled
|
|
|
|
|
disabled | Boolean | 禁用日志上報功能。 | 否 | false |
sample
|
|
|
|
|
sample | Integer | API日志采樣配置,值為1~100的整數。對性能日志和成功API日志按照 | 否 |
|
sample配置項作用:
減小API的數據上報量(降低部分費用),更精確的方案建議使用ignore參數過濾掉某些不需要監控的API數據,更多信息,請參考ignore。
降低采集數據的性能開銷。
sample配置項說明:
為了減小上報量和降低負載,該配置項會對性能和成功API日志進行隨機采樣上報,后臺處理日志時會根據對應的采樣配置進行還原,因此不會影響JS錯誤率和失敗API率等指標的計算。但是會導致在查詢API詳情或者相關數據明細的時候,無法保證一定可以查看明細。
采樣值
sample
默認為1
,值可以是1~100的整數,對應的采樣率為1/sample
,例如:1
表示100%采樣,10
表示10%采樣,100
表示1%采樣。
由于是隨機采樣,如果原上報量較小,該配置項可能會造成較大的統計結果誤差,建議僅日均PV在100萬以上的站點使用該配置項。
pvSample
參數 | 類型 | 描述 | 是否必選 | 默認值 |
pvSample | Integer | PV日志采樣配置,值為1~100的整數。對PV日志按照 | 否 |
|
pvSample配置項作用:
減小PV的數據上報量(降低部分費用)。
降低采集數據的性能開銷。
pvSample配置項說明:
為了減小上報量和降低負載,該配置項會對PV日志進行隨機采樣上報,后臺處理日志時會根據對應的采樣配置進行還原,樣本量足夠大的情況下對JS錯誤率等指標的計算影響不大。
采樣值
pvSample
默認為1
,值可以是1~100的整數,對應的采樣率為1/pvSample
,例如:1
表示100%采樣,10
表示10%采樣,100
表示1%采樣。
sendResource
|
|
|
|
|
sendResource | Boolean | 上報頁面靜態資源。 | 否 | false |
如果sendResource配置為true
,則頁面load事件觸發時會上報當前頁面加載的靜態資源信息。如果發現頁面加載較慢,可以在會話追蹤頁面查看頁面加載的靜態資源瀑布圖,判斷頁面加載較慢的具體原因。
sendResource示例代碼:
<script>
!(function(c,b,d,a){c[a]||(c[a]={});c[a].config={pid:"xxxxxx",sendResource:true};
with(b)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("crossorigin","",src=d)
})(window,document,"https://retcode.alicdn.com/retcode/bl.js","__bl");
</script>
由于是在頁面load事件觸發時判斷,所以請在config中配置sendResource(如以上示例所示),不要使用setConfig的方式,因為這種方式可能在頁面load事件完成后才會觸發,從而使該配置項無效。
useFmp
|
|
|
|
|
useFmp | Boolean | 采集首屏FMP(First Meaningful Paint,首次有效渲染)數據。 | 否 | false |
enableLinkTrace
|
|
|
|
|
enableLinkTrace | Boolean | 進行前后端鏈路追蹤,請參見使用前后端鏈路追蹤診斷API錯誤原因。 | 否(僅Web場景、支付寶小程序、微信小程序、釘釘小程序支持) | false |
release
請在初始化時的config中配置release,不要使用setConfig的方式。
|
|
|
|
|
release | String | 應用版本號。建議您配置,便于查看不同版本的上報信息。 | 否 | undefined |
environment
|
|
|
|
|
environment | String | 環境字段,取值為:prod、gray、pre、daily和local,其中:
| 否 | prod |
behavior
|
|
|
|
|
behavior | Boolean | 是否為了便于排查錯誤而記錄報錯的用戶行為。 | 否(僅Web場景和小程序場景支持) | Browser默認為 true ,小程序默認為false 。 |
autoSendPerf
|
|
|
|
|
autoSendPerf | Boolean | 是否允許自動發送性能日志。 | 否 | true |
c1\c2\c3
除了以上列出的配置項,您可能還需要更多的附加信息輔助處理業務問題,因此ARMS SDK提供了3個可自定義字段的配置項,配置后字段內容會包含在每一條上報的日志中。
|
|
|
|
|
c1 | String | 業務自定義字段,每條日志都會攜帶該標記。 | 否 | 無 |
c2 | String | 業務自定義字段,每條日志都會攜帶該標記。 | 否 | 無 |
c3 | String | 業務自定義字段,每條日志都會攜帶該標記。 | 否 | 無 |
c1\c2\c3是用戶自定義的當前頁面中所有上報都攜帶的數據(一般具備業務屬性),在初始化JS SDK時傳入SDK的參數,用于篩選數據,例如用戶的VIP等級。