SDK接入流程
步骤 | 集成内容 | 本文中的位置 | 是否必选 | 附加说明 |
第一步 | SDK获取 | 查看文档「第一步SDK接入说明」 | 必选 | 提供NPM和CDN两种方式,根据自身环境选择其一即可 |
第二步 | 设置初始化参数 | 查看文档 [第二设置初始化参数-设置应用唯一标识(appkey)」 | 必选 | |
设置初始化参数 | 查看文档 [第二步设置初始化参数-设置收数服务地址」 | 必选 | ||
设置初始化参数 | 查看文档 [第二步设置初始化参数 黑白名单设置pageFilter」 | 可选 | 通过设置pageFilter完成对日志的过滤 | |
设置初始化参数 | 查看文档 [第二步设置初始化参数输出日志等级」 | 可选 | ||
附录 | 兼容性说明 | 查看文档 [附录兼容性说明」 |
注意:在完成Web端接入前,需要先获取Web端appkey。
SDK接入说明
Web 端SDK接入方式有两种:CDN和NPM
注意:
CDN下载地址:APM H5 SDK
npm命令:npm install lydaas_apm --save
内网环境,请将SDK中的js文件上传到内网的静态资源服务器上,并将集成代码中的CDN地址替换为内网js文件的URL地址
通过CDN在线部署
同步加载和异步加载区别
异步加载:又称为非阻塞加载,表示浏览器在下载执行JS之后还会继续处理后续页面。若对页面性能的要求非常高,建议使用此方式。(异步加载无法捕捉到SDK加载初始化完成之前的JS错误和资源加载错误)
同步加载:又称为阻塞加载,表示当前JS加载完毕后才会进行后续处理。如需捕捉从页面打开到关闭的整个过程中的JS错误和资源加载错误,建议使用此方式
异步加载
情景一:通过CDN异步引入SDK后,设置初始化参数。
<script>
void (function (e, t, n, a, o, i, m) {
(e._um_apm_namespace = o),
(e[o] = e[o] || function () {
(e[o].q = e[o].q || []).push(arguments);
}),
(e[o].l = e[o].l || +new Date()),
(i = t.createElement(n)),
i.setAttribute('crossorigin', ''),
(i.src = a),
(m = t.getElementsByTagName(n)[0]),
m.parentNode.insertBefore(i, m);
})(
window,
document,
'script',
'https://g.alicdn.com/QTSDK/oxm-web-apm/2.1.1/es5/uapm.iife.js',
'_apm',
);
_apm('create', {
pid: '应用唯一标识',
//注意:域名前需要添加"https://"
dsn: '收数域名',
pageFilter: { mode: 'ignore', rules: [] },
//更多配置见第二步参数说明
});
</script>
情景二:在SDK引入之前设置初始化参数
<script>
window._apm = window._apm || {
p:[[
'create', {
pid: '应用唯一标识',
//注意:域名前需要添加"https://"
dsn: '收数域名',
pageFilter: {
mode: 'ignore',
rules: [],
},
//更多配置见第二步参数说明
}]],
};
</script>
<script>
void (function (e, t, n, a, o, i, m) {
(e._um_apm_namespace = o),
(e[o] = e[o] || function () {
(e[o].q = e[o].q || []).push(arguments);
}),
(e[o].l = e[o].l || +new Date()),
(i = t.createElement(n)),
i.setAttribute('crossorigin', ''),
(i.src = a),
(m = t.getElementsByTagName(n)[0]),
m.parentNode.insertBefore(i, m);
})(
window,
document,
'script',
'https://g.alicdn.com/QTSDK/oxm-web-apm/2.1.1/es5/uapm.iife.js',
'_apm',
);
</script>
同步加载
<script>
window._um_apm_namespace = '_apm';
window[_um_apm_namespace] = window[_um_apm_namespace] || {
p: [],
};
window[_um_apm_namespace].p.push([
'create',
{
//注意:域名前需要添加"https://"
dsn: '收数域名',
pid: '应用唯一标识',
pageFilter: {
mode: 'ignore',
rules: [],
},
//更多配置见第二步参数说明
},
]);
</script>
<script src="https://g.alicdn.com/QTSDK/oxm-web-apm/2.1.1/es5/uapm.iife.js" crossorigin></script>
通过NPM方式集成SDK
初始化调用示例
注意:域名前需要添加"https://"
import { init } from 'lydaas_apm';
init({
pid: '应用唯一标识',
//注意:域名前需要添加"https://"
dsn: '收数域名',
pageFilter: {
mode: 'ignore',
rules: []
},
errorFilter: {
mode: 'ignore',
rules: []
},
puid: "user@example.com", // 接入方平台用户账号
tag: "", // 自定义标签
logLevel: 0, // 日志级别; 0表示error、1表示warn、2表示info、3表示debug
enableBlankScreen: true, // 是否开启白屏统计
blankConfig: {
blank_target: 'body', // 检测白屏DOM根节点
blank_timeout: 6000, // 检测设置的白屏DOM根节点是否有像素显示的等待时间,单位为毫秒(ms)
screenshot: true, // 是否发送白屏的截图
X: 1.5, // 判断是否发送截屏,如果DOM得分小于设定的值,会发送截屏数据
Y: 6, // 判断是否发送白屏日志,如果DOM得分小于设定值,会发送白屏日志
}
});
设置/修改初始化参数
设置应用唯一标识(appkey)
必填
属性 | 含义 | 默认 | 类型 |
pid | 接入应用唯一标识(appkey) | - | string |
设置用户产品线标志tag(可选)
属性 | 含义 | 默认 | 类型 |
tag | 设置产品线标识id,可以在同一个appkey下区分不同的产品线,方便开发者排查问题 | - | string |
设置SDK采集服务地址
必填
属性 | 含义 | 默认 | 类型 |
dsn | SDK采集服务地址 | - | string |
黑白名单设置pageFilter(可选)
您可以设置采集的H5页面黑白名单模式,黑名单和白名单二选一:
若选择白名单模式,仅符合规则的页面会被采集
若选择黑名单模式,则符合规则的页面不会被采集
此项非必须参数,用于根据页面地址判断是否过滤日志,包含如下属性
属性 | 含义 | 默认 | 类型 |
mode | 匹配模式 当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报 | ignore | 枚举值 ignore|match |
rules | 匹配规则集合的匹配逻辑如下:
| [],该默认值表示黑名单为空,日志全部上报 |
|
黑白名单设置errorFilter(可选)
该功能用于配置H5页面的采集黑白名单。您可以选择白名单或黑名单模式:
若选择白名单模式,仅符合配置规则的页面会被采集
若选择黑名单模式,符合配置规则的页面将被排除,不会被采集
此项非必须参数,用于根据自定条件判断是否过滤日志,包含如下属性
属性 | 含义 | 默认 | 类型 |
mode | 匹配模式 当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报 | ignore | 枚举值 ignore|match |
rules | 匹配规则集合的定义如下:
| [],该默认值表示黑名单为空,日志全部上报 |
|
黑白名单设置apiFilter (可选)
该功能用于设置api请求日志黑白名单,根据设置的黑白名单,过滤xhr和fetch的请求url,仅对api日志生效
属性 | 含义 | 默认 | 类型 |
mode | 匹配模式 当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报 | ignore | 枚举值 ignore|match |
rules | 匹配规则集合的定义如下:
| [],该默认值表示黑名单为空,日志全部上报 |
|
设置api请求参数(可选)
属性 | 含义 | 默认 | 类型 |
hookXHR | 是否开启XMLHttpRequest请求的拦截 | true | boolean |
hookFetch | 是否开启fetch请求的拦截 | true | boolean |
xhrConfig | xhr请求的配置 | { enableReqBody:true } | object |
fetchConfig | fetch请求的配置 | { enableReqBody:true } | object |
xhrConfig
属性 | 含义 | 默认 | 类型 |
enableReqBody | 是否在开启对xhr请求body的采集,默认情况下,会在请求响应状态码大于400时采集 | true | boolean |
fetchConfig
属性 | 含义 | 默认 | 类型 |
enableReqBody | 是否在开启对fetch请求body的采集,默认情况下,会在请求响应状态码大于400时采集 | true | boolean |
输出日志等级(可选)
非必填,表示js日志输出日志等级
属性 | 含义 | 默认 | 类型 |
logLevel | 日志等级 | 0 | 枚举值 0 表示ERROR日志 1 表示WARN日志 2 表示INFO日志 3 表示DEBUG日志 |
白屏检测(可选)
非必填,用于设置白屏检测标准、截屏功能等相关配置
属性 | 含义 | 默认 | 类型 |
enableBlankScreen | 白屏检查开关 | true,即默认开启 | boolean |
blankConfig | 白屏配置 | { blank_target:'body', blank_timeout:6000, screenshot:true, X:1.5, Y:6, } | object |
blankConfig
属性 | 含义 | 默认 | 类型 |
blank_target | 白屏检查目标元素 | body | string |
blank_timeout | 白屏检查时机,页面加载后多久检查白屏,单位毫秒 | 6000 | number |
screenshot | 是否发送截屏 | true | boolean |
X | 截屏的发送阈值,dom得分小于设定值时发送截屏数据 | 1.5 | number |
Y | 白屏日志发送阈值,dom得分小于设定值时发送白屏日志 | 6 | number |
开启全链路请求注入(可选)
非必填,用于对H5应用内业务请求注入httpHeader。
注意:通过sendAPILog主动发起的请求日志不支持httpHeader注入
属性 | 含义 | 默认 | 类型 |
rumConfig | 全链路请求header注入配置 | - | object |
rumConfig
属性 | 含义 | 默认 | 类型 |
injectTraceHeader | SDK会对H5应用网络请求注入设置的请求头,并且自动生成相关协议字段 | undefined | 枚举值
|
needTracedUrls | 全链路监控注入Urls白名单,默认值为null | null,该默认值表示白名单为空,如果设置此值,则仅符合规则的请求url会被注入请求头 | Array<string | RegExp> |
ignoredUrls | 全链路监控注入Urls黑名单,默认值为null | null,该默认值表示黑名单为空,如果设置此值,则仅符合规则的请求url不会被注入请求头 | Array<string | RegExp> |
injectSDKRequest | 是否对SDK内部请求注入请求头,默认为false,即不注入 | false,该默认值表示SDK的内部请求url不会被注入请求头 | boolean |
方法说明
1. 用户手动捕捉并上报错误日志
captureException
调用方法,通过CDN引入的使用以下方式调用
_apm && _apm('captureException', new Error('手动捕捉'));
通过npm引入的使用以下方式来调用
import { captureException } from 'lydaas_apm';
try {
throw new Error('开发者手动捕捉到的错误');
} catch (error) {
captureException(error);
}
在vue中的使用示范如下,以vite创建的工程为例,在main.js中
import { createApp } from 'vue';
import './style.css';
import App from './App.vue';
import { init, captureException } from 'lydaas_apm';
init({
pageFilter: {
mode: 'ignore',
rules: [],
},
pid: 'test124',
dsn: '//aplus2-portal-lite.emas-poc.com',
logLevel: 4,
});
const app = createApp(App);
app.config.errorHandler = (err, instance, info) => {
// 处理错误,例如:报告给一个服务
captureException(err);
};
app.mount('#app');
2. 用户手动上报API请求日志
sendAPILog
(该api调用要求版本不低于2.0.10)
调用方法,通过CDN引入的使用以下方式调用
_apm && _apm('sendAPILog', {
url: 'https://example.com/getUserName',
method: 5,
rc: 500,
rt: 2000,
traceid: '1234567',
req_body: '{a:1}',
req_query: '&aaa=1'
});
通过npm引入的使用以下方式来调用
import { sendAPILog } from 'lydaas_apm';
sendAPILog({
url: 'https://example.com/getUserName',
method: 5,
rc: 500,
rt: 2000,
traceid: '1234567',
req_body: '{a:1}',
req_query: '&aaa=1'
});
属性 | 含义 | 必填项 | 类型 | 举例 |
url | 请求地址 | 必填 | string | https://u.shujupie.com/d |
method | 请求方法 1: 'GET' 2: 'POST' 3: 'PUT' 4: 'HEAD' 5: 'DELETE' 6: 'CONNECT' 7: 'OPTIONS' 8: 'TRACE' 9: 'PATCH' | 必填 | int | 2 |
rt | 请求耗时(毫秒) | 必填 | long | 3000 |
rc | 响应编码 | 必填 | int | 200 |
traceid | 请求追踪id | 选填 | string | abcdef |
req_query | 入参query | 选填 | string | string |
req_body | 入参body (仅状态码>400 且不等于0 采集上报,其它状态为空) | 选填 | string | string |
3. 设置用户标识(可选)
通过CDN引入,异步加载
<script>
void (function (e, t, n, a, o, i, m) {
(e._um_apm_namespace = o),
(e[o] = e[o] || function () {
(e[o].q = e[o].q || []).push(arguments);
}),
(e[o].l = e[o].l || +new Date()),
(i = t.createElement(n)),
i.setAttribute('crossorigin', ''),
(i.src = a),
(m = t.getElementsByTagName(n)[0]),
m.parentNode.insertBefore(i, m);
})(
window,
document,
'script',
'https://g.alicdn.com/QTSDK/oxm-web-apm/2.1.1/es5/uapm.iife.js',
'_apm',
);
_apm('create', {
pid: 'appkey',
dsn: 'https://example.com',
pageFilter: { mode: 'ignore', rules: [] },
});
</script>
<script>
// 此处为用户可以在自己的业务代码中设置
_apm('set', 'puid', '用户账号');
</script>
通过CDN引入,同步加载
<script>
window._um_apm_namespace = '_apm';
window[_um_apm_namespace] = window[_um_apm_namespace] || {
p: [],
};
window[_um_apm_namespace].p.push([
'create',
{
//注意:域名前需要添加"https://"
dsn: 'https://example.com',
pid: 'appkey',
pageFilter: {
mode: 'ignore',
rules: [],
},
},
]);
</script>
<script src="https://g.alicdn.com/QTSDK/oxm-web-apm/2.1.1/es5/uapm.iife.js" crossorigin></script>
<script>
window[_um_apm_namespace].p.push(['set', 'puid', '用户账号']);
</script>
通过npm引入
import { setUserConfig } from 'lydaas_apm';
setUserConfig({puid:"用户账号"});
附录:兼容性说明
浏览器和平台兼容性
浏览器/平台 | 支持版本 |
Safari | Safari 9+ |
Chrome | Chrome 49+ |
IE | IE 9+ |
Edge | Edge 12+ |
Firefox | Firefox 36+ |
Opera | Opera 43+ |
Safari for iOS | Safari for iOS 9.3.2+ |
Android Browser | android_webkit 4.4.2+ |