Web SDK

更新时间:
复制为 MD 格式

SDK接入流程

步骤

集成内容

本文中的位置

是否必选

附加说明

第一步

SDK获取

查看文档「第一步SDK接入说明」

必选

提供NPMCDN两种方式,根据自身环境选择其一即可

第二步

设置初始化参数

查看文档 [第二设置初始化参数-设置应用唯一标识(appkey)」

必选

设置初始化参数

查看文档 [第二步设置初始化参数-设置收数服务地址」

必选

设置初始化参数

查看文档 [第二步设置初始化参数

黑白名单设置pageFilter

可选

通过设置pageFilter完成对日志的过滤

设置初始化参数

查看文档 [第二步设置初始化参数输出日志等级」

可选

附录

兼容性说明

查看文档 [附录兼容性说明」

注意:在完成Web端接入前,需要先获取Webappkey。

SDK接入说明

Web 端SDK接入方式有两种:CDNNPM

注意:

  1. CDN下载地址:APM H5 SDK

  2. npm命令:npm install lydaas_apm --save

  3. 内网环境,请将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得分小于设定值,会发送白屏日志
  }
});

设置/修改初始化参数

SDK初始化参数说明

参数名

含义

类型

默认值

sample

全局采样率(百分比)

number

undefined

logLevel

日志等级

枚举值

0 表示ERROR日志

1 表示WARN日志

2 表示INFO日志

3 表示DEBUG日志

0

pid

接入应用唯一标识(appkey)

string

undefined

uid

用户唯一id

string

undefined

puid

用户自定义id

string

undefined

tag

设置产品线标识id,可以在同一个appkey下区分不同的产品线,方便开发者排查问题

string

undefined

environment

代码部署环境标识(如 prodtest

string

undefined

release

web应用版本号

string

undefined

dsn

SDK采集服务地址

string

undefined

pkgList

通过native发送日志的应用的bundle id白名单集合,如有多个包,用英文逗号分隔

'com.umeng.com,com.apm.com'

['com.umeng.com','com.apm.com']

string 或者Array<string>

'' 表示包名称地址为空,默认不发送日志

pageFilter

用于设置采集的H5页面黑白名单,可以在黑名单和白名单中选择其一,如果选择白名单的方式,那么只有符合标准的页面会被采集,如果选择的是黑名单的方式,那么符合标准的页面不会被采集

此项非必须参数,用于根据页面地址判断是否过滤日志

object

mode:ignore,当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报

rules:[],该默认值表示黑名单为空,日志全部上报

errorFilter

该功能用于配置H5页面的采集黑白名单。您可以选择白名单或黑名单模式:

  • 若选择白名单模式,仅符合配置规则的页面会被采集

  • 若选择黑名单模式,符合配置规则的页面将被排除,不会被采集

object

mode:ignore,当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报

rules:[],该默认值表示黑名单为空,日志全部上报

apiFilter

该功能用于设置API请求日志黑白名单,根据设置的黑白名单,过滤xhrfetch的请求url,仅对api日志生效

object

mode:ignore,当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报

rules:[],该默认值表示黑名单为空,日志全部上报

hookFetch

是否开启fetch请求的拦截

boolean

true,即默认开启

hookXHR

是否开启XMLHttpRequest请求的拦截

boolean

true,即默认开启

traceKey

全链路追踪标识字段名

string

'traceId'

enableNetWorkType

是否启用网络类型检测功能:

  • 当设置为 true 时,SDK 会尝试获取并上报用户设备的网络类型信息(如 Wi-Fi4G3G 等)。

  • 当设置为 false 时,SDK 将禁用网络类型检测,相关数据不会收集或上报。

boolean

true,即默认开启

enableCatchJSError

是否自动捕获 JavaScript 运行时错误

  • 当设置为 true 时,SDK 会自动监听并捕获以下错误:

    • 未捕获的 JavaScript 异常(通过 window.onerror 或 addEventListener('error')

    • 未处理的 Promise 拒绝(通过 window.onunhandledrejection

    • 其他运行时错误(如语法错误、资源加载失败等,具体取决于 SDK 实现)

  • 当设置为 false 时,SDK 会禁用自动错误捕获功能。

boolean

true,即默认开启

enablePerformance

是否收集页面性能指标

boolean

true,即默认开启

enableJSBridge

javaScriptBridge开关

boolean

true,即默认开启

enableFID

是否计算首次输入延迟(FID)

boolean

true,即默认开启

enableRemoteConfig

是否启用远程配置

boolean

true,即默认开启

enableBlankScreen

白屏检查开关

boolean

true,即默认开启

sampleConfig

采样配置

object

{

enable: true, sampleRate: 50, rules: {

perf: {

enable: false // 关闭性能采样

}

}

}

blackConfig

白屏配置

object

{

blank_target:'body', //白屏检查目标元素

blank_timeout:6000, //白屏检查时机,页面加载后多久检查白屏,单位毫秒

screenshot:true, //是否发送截屏

X:1.5, //截屏的发送阈值,dom得分小于设定值时发送截屏数据

Y:6, //白屏日志发送阈值,dom得分小于设定值时发送白屏日志

}

xhrConfig

xhr请求的配置

object

{

enableReqBody:true //是否在开启对xhr请求body的采集,默认情况下,会在请求响应状态码大于400时采集

}

fetchConfig

fetch请求的配置

object

{

enableReqBody:true //是否在开启对fetch请求body的采集,默认情况下,会在请求响应状态码大于400时采集

}

enableCrypt

是否启用数据加密

boolean

false,即默认关闭

enableScreenCrypt

是否启用屏幕截图加密

boolean

false,即默认关闭

data2Encrypt

数据加密函数

Function

返回原始输入和 Header

data2Decrypt

数据解密函数

Function

返回原始输入和 Header

设置应用唯一标识(appkey)

必填

属性

含义

默认

类型

pid

接入应用唯一标识(appkey)

-

string

设置用户产品线标志tag(可选)

属性

含义

默认

类型

tag

设置产品线标识id,可以在同一个appkey下区分不同的产品线,方便开发者排查问题

-

string

设置SDK采集服务地址

必填

属性

含义

默认

类型

dsn

SDK采集服务地址

-

string

黑白名单设置pageFilter(可选)

您可以设置采集的H5页面黑白名单模式,黑名单和白名单二选一:

  • 若选择白名单模式,仅符合规则的页面会被采集

  • 若选择黑名单模式,则符合规则的页面不会被采集

此项非必须参数,用于根据页面地址判断是否过滤日志,包含如下属性

属性

含义

默认

类型

mode

匹配模式

当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报

ignore

枚举值 ignore|match

rules

匹配规则集合的匹配逻辑如下:

  • 当规则类型为字符串string时,表示当页面的 url 包含该字符串时,即视为命中规则;

  • 当规则类型为函数Function时,若该函数返回 true,则表示命中规则,返回 false 则表示未命中;

  • 当规则类型为数组时,表示一组规则集合,数组中的各个规则之间为“或”的关系,只要任意一个规则命中,则整个规则集视为命中。

[],该默认值表示黑名单为空,日志全部上报

  • string

  • RegExp

  • Function

  • Array<string | RegExp | Function>

黑白名单设置errorFilter(可选)

该功能用于配置H5页面的采集黑白名单。您可以选择白名单或黑名单模式:

  • 若选择白名单模式,仅符合配置规则的页面会被采集

  • 若选择黑名单模式,符合配置规则的页面将被排除,不会被采集

此项非必须参数,用于根据自定条件判断是否过滤日志,包含如下属性

属性

含义

默认

类型

mode

匹配模式

当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报

ignore

枚举值 ignore|match

rules

匹配规则集合的定义如下:

  • 当类型为 string 时,表示页面 URL 包含该字符串时规则命中;

  • 当类型为 Function 时,该函数返回 true 表示规则命中,返回 false 表示未命中;

  • 当类型为 数组 时,表示规则集合,集合中的规则之间为“或”关系,只要任意一个规则命中,则整个规则集命中。

[],该默认值表示黑名单为空,日志全部上报

  • string

  • RegExp

  • Function

  • Array<string | RegExp | Function>

黑白名单设置apiFilter (可选)

该功能用于设置API请求日志黑白名单,根据设置的黑白名单,过滤xhrfetch的请求url,仅对api日志生效

属性

含义

默认

类型

mode

匹配模式

当值为ignore,表示黑名单模式,命中规则的不上报 、当值为match,表示白名单模式命中规则的上报

ignore

枚举值 ignore|match

rules

匹配规则集合的定义如下:

  • 当类型为 string 时,表示页面 URL 包含该字符串时规则命中;

  • 当类型为 Function 时,该函数返回 true 表示规则命中,返回 false 表示未命中;

  • 当类型为 数组 时,表示规则集合,集合中的规则之间为“或”关系,只要任意一个规则命中,则整个规则集命中。

[],该默认值表示黑名单为空,日志全部上报

  • string

  • RegExp

  • Function

  • Array<string | RegExp | Function>

设置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

枚举值

  • traceparent

  • b3

  • sw8

  • sentry-trace

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+