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
(Regex):將匹配到的字串去掉。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.+/, // Regex
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/, // Regex
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\.?$/, // Regex
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$/, // Regex
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情境、支付寶小程式、微信小程式、DingTalk小程式支援) | 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等級。