跳转至

Web 应用接入


完成本页配置后,Browser RUM SDK 会自动采集页面 View、资源请求、前端错误和用户操作,并将数据上报到观测云。

选择接入路径

先根据应用形态选择入口,避免重复配置 View 或在服务端渲染阶段访问浏览器 API。

应用形态 推荐入口 说明
使用 Webpack、Vite、Rollup 等构建工具 NPM 接入 推荐方式,便于版本管理和按需集成
无前端构建流程 CDN 异步加载 不阻塞页面解析,但可能错过初始化前的请求和错误
必须采集页面最早阶段的错误和请求 CDN 同步加载 尽早初始化,但会占用页面加载时间
React、Vue、Angular 单页应用 前端框架插件接入 自动管理 Router View 和框架错误
Next.js、Nuxt SSR 框架下接入 区分服务端与浏览器环境,避免重复 View
Electron Electron 应用接入 只在 renderer process 初始化

准备接入信息

  1. 进入「用户访问监测 > 应用列表 > 新建应用 > Web」。
  2. 创建应用并获取控制台生成的 applicationIdenvversion 等配置。
  3. 选择数据上报方式:

  4. 公网 OpenWay:获取 siteclientToken,无需部署 DataKit。

  5. DataKit 直连:准备 datakitOrigin;DataKit 需要启用 RUM 采集器,并配置为公网可访问且安装 IP 地理信息库
两种上报方式不要同时配置

公网 OpenWay 使用 siteclientToken;DataKit 直连使用 datakitOrigin。请只保留当前接入方式所需的字段。

上报方式

{
  applicationId: "<APPLICATION_ID>",
  datakitOrigin: "<DATAKIT_ORIGIN>"
}

{
  applicationId: "<APPLICATION_ID>",
  site: "<PUBLIC_OPENWAY_URL>",
  clientToken: "<CLIENT_TOKEN>"
}

集成 SDK

接入方式
说明
NPM 将 SDK 代码打包到前端项目中,便于锁定版本。可能错过 SDK 初始化前的请求和错误。
CDN 异步加载 通过 CDN 异步引入 SDK 脚本,不影响页面加载性能。可能错过初始化前的请求和错误收集。
CDN 同步加载 通过 CDN 同步引入 SDK 脚本,能完整收集所有错误和性能指标。但可能影响页面加载性能。

NPM 接入

在前端项目中安装并引入 SDK:

npm install @cloudcare/browser-rum @cloudcare/browser-core

在项目中初始化 SDK:

import { datafluxRum } from "@cloudcare/browser-rum"

datafluxRum.init({
  applicationId: "<APPLICATION_ID>",
  site: "<PUBLIC_OPENWAY_URL>",
  clientToken: "<CLIENT_TOKEN>",
  service: "web-app",
  env: "production",
  version: "1.0.0",
  sessionSampleRate: 100,
  trackUserInteractions: true
})

CDN 同步加载

在 HTML 文件中添加脚本:

<script
  src="https://static.guance.com/browser-sdk/v3/dataflux-rum.js"
  type="text/javascript"
></script>
<script>
  window.DATAFLUX_RUM &&
    window.DATAFLUX_RUM.init({
      applicationId: "<APPLICATION_ID>",
      site: "<PUBLIC_OPENWAY_URL>",
      clientToken: "<CLIENT_TOKEN>",
      service: "web-app",
      env: "production",
      version: "1.0.0",
      sessionSampleRate: 100,
      trackUserInteractions: true
    })
</script>

CDN 异步加载

在 HTML 文件中添加脚本:

<script>
  ;(function (h, o, u, n, d) {
    h = h[d] = h[d] || {
      q: [],
      onReady: function (c) {
        h.q.push(c)
      },
    }
    d = o.createElement(u)
    d.async = 1
    d.src = n
    n = o.getElementsByTagName(u)[0]
    n.parentNode.insertBefore(d, n)
  })(
    window,
    document,
    "script",
    "https://static.guance.com/browser-sdk/v3/dataflux-rum.js",
    "DATAFLUX_RUM"
  )
  DATAFLUX_RUM.onReady(function () {
    DATAFLUX_RUM.init({
      applicationId: "<APPLICATION_ID>",
      site: "<PUBLIC_OPENWAY_URL>",
      clientToken: "<CLIENT_TOKEN>",
      service: "web-app",
      env: "production",
      version: "1.0.0",
      sessionSampleRate: 100,
      trackUserInteractions: true
    })
  })
</script>

以上示例使用公网 OpenWay。使用 DataKit 直连时,请移除 siteclientToken,改为配置 datakitOrigin

验证接入

  1. 打开已接入 SDK 的页面,并完成一次页面跳转、按钮点击和 API 请求。
  2. 在浏览器开发者工具的 Network 中过滤 /v1/write/rum,确认存在成功的上报请求。
  3. 检查 Console,确认没有 Application ID is not configureddatakitOrigin or site is not configured 等初始化错误。
  4. 进入「用户访问监测 > 应用列表」,打开对应 Web 应用,在查看器中按 serviceenvversion 筛选并确认存在 View、Resource 或 Action 数据。
看到 View 数据即表示基础接入成功

Error、Resource 和 Action 需要页面实际发生对应事件后才会出现。若没有数据,请先检查当前 Session 是否命中 sessionSampleRate,再参考 FAQ

常用可选配置

基础数据确认成功后,再按需要开启其他能力:

目标 配置或 API 文档
关联前后端链路 allowedTracingUrlstraceType 链路追踪配置
控制采集比例 sessionSampleRatestartSession() 采样配置
开启会话重放 startSessionReplayRecording() Web 会话重放
自动管理 SPA Router View plugins 前端框架插件接入
录制 WebGL/WebGL2 plugins、Canvas 自动录制 Canvas 录制使用手册
标识登录用户 setUser() 自定义用户标识
添加业务字段或事件 Global Context、addAction()addError() 自定义数据与事件

链路追踪配置(可选)

NPM + TypeScript 接入时,traceType 必须使用从对应品牌 browser-core 包导入的 TraceType 枚举:

import { TraceType } from "@cloudcare/browser-core"
import { datafluxRum } from "@cloudcare/browser-rum"

datafluxRum.init({
  applicationId: "<APPLICATION_ID>",
  site: "<PUBLIC_OPENWAY_URL>",
  clientToken: "<CLIENT_TOKEN>",
  allowedTracingUrls: ["https://api.example.com"],
  traceType: TraceType.DDTRACE
})

TraceType.DDTRACE 的运行时值仍为 "ddtrace"。CDN 接入没有模块导入,显式配置时使用对应的运行时字符串。开启链路追踪后,还需要在 API 服务端允许对应的 Trace Header,详情参考 APM 如何关联 RUM

如果常规 Session 未命中采样,但仍需要把 Trace Header 传给后端,可以显式开启 allowTraceHeaderWithoutSession

datafluxRum.init({
  applicationId: "<APPLICATION_ID>",
  site: "<PUBLIC_OPENWAY_URL>",
  clientToken: "<CLIENT_TOKEN>",
  sessionSampleRate: 0,
  sessionOnErrorSampleRate: 0,
  allowedTracingUrls: ["https://api.example.com"],
  allowTraceHeaderWithoutSession: true
})

开启后,SDK 仍只为命中 allowedTracingUrls 的 XHR 和 Fetch 请求注入 Trace Header。 此配置不会创建或强制启用 RUM Session,也不会上报未采样 Session 的 View、Error、 Resource 或 Action 数据。API 服务仍需允许所选 traceType 对应的请求头;跨域请求还需 正确配置 CORS。

参数配置

初始化参数

参数
类型
是否必须
默认值
描述
applicationId String 从观测云创建的应用 ID。
datakitOrigin String DataKit 直连时 DataKit 数据上报地址,格式为 协议(包括 ://)+ 域名或 IP + 可选端口,例如 https://datakit.example.com
clientToken String 公网 OpenWay 时 公网 OpenWay 数据上报 Token,从观测云控制台获取。
site String 公网 OpenWay 时 公网 OpenWay 数据上报地址,从观测云控制台获取。
env String Web 应用当前环境,如 prod:线上环境;gray:灰度环境;pre:预发布环境;common:日常环境;local:本地环境。
version String Web 应用的版本号。
service String 当前应用的服务名称,默认为 browser,支持自定义配置。
sessionSampleRate Number 100 指标数据收集百分比:
100 表示全收集;0 表示不收集。
sessionOnErrorSampleRate Number 0 错误会话补偿采样率:当会话未被 sessionSampleRate 采样时,若会话期间发生错误,则按此比例采集。此类会话将在错误发生时开始记录事件,并持续记录直到会话结束。SDK 版本要求>= 3.2.19
sessionReplaySampleRate Number 100 Session Replay 数据采集百分比:
100 表示全收集;0 表示不收集。
sessionReplayOnErrorSampleRate Number 0 Session Replay 错误会话重放补偿采样率:当会话未被 sessionReplaySampleRate 采样时,若会话期间发生错误,则按此比例采集。此类回放将记录错误发生前最多一分钟的事件,并持续记录直到会话结束。SDK 版本要求>= 3.2.19
trackSessionAcrossSubdomains Boolean false 同一个域名下面的子域名共享缓存。
usePartitionedCrossSiteSessionCookie Boolean false 是否开启分区安全跨站点会话 cookie 详情
useSecureSessionCookie Boolean false 使用安全会话 cookie。这将禁用在不安全(非 HTTPS)连接上发送的 RUM 事件
traceType TraceType TraceType.DDTRACE(运行时值为 ddtrace 配置链路追踪工具类型。NPM 接入使用 TraceType 枚举,CDN 接入使用对应的运行时字符串。目前支持 DDTRACEddtrace)、ZIPKIN_MULTI_HEADERzipkin)、ZIPKIN_SINGLE_HEADERzipkin_single_header)、W3C_TRACEPARENTw3c_traceparent)、W3C_TRACEPARENT_64w3c_traceparent_64bit)、SKYWALKING_V3skywalking_v3)和 JAEGERjaeger)。

❗️
1. OpenTelemetry 支持 zipkin_single_headerw3c_traceparentzipkinjaeger 4 种类型。
2. 该配置的生效依赖 allowedTracingUrls
3. 配置相应类型时,需要为 API 服务设置对应的 Access-Control-Allow-Headers,详情参考 APM 如何关联 RUM
traceId128Bit Boolean false 是否以 128 位模式生成 traceID,与 traceType 对应,目前支持 zipkinjaeger
allowedTracingUrls Array [] 允许注入 Trace Header 的请求 URL 匹配列表。数组项可以是完整 URL、正则、匹配函数,或包含 matchtraceType 的对象。例如:["https://api.example.com/xxx", /https:\/\/.*\.my-api-domain\.com\/xxx/, (url) => url.includes("/api/")]
allowTraceHeaderWithoutSession Boolean false 当前 RUM Session 未命中采样时,是否仍为命中 allowedTracingUrls 的 XHR 和 Fetch 请求注入 Trace Header。开启不会创建 Session,也不会上报未采样 Session 的 RUM 数据。
allowedTracingOrigins Array [] 已废弃,仅为兼容旧版本配置保留。新接入请使用 allowedTracingUrls;两者同时配置时,allowedTracingUrls 会覆盖该配置。
trackUserInteractions Boolean false 是否开启用户行为采集。
trackViewsManually Boolean false 是否关闭 SDK 自动 View 并由应用调用 startView() 手动启动 View。框架 Router 插件会自动管理该配置,业务不需要重复设置。详情参考
plugins Array [] 注册 RUM 插件,必须在 init() 时传入。框架插件可采集 React、Vue、Angular、Next.js 和 Nuxt 的路由 View 与框架错误,SDK 版本要求 >= 3.3.6,详情参考前端框架插件接入。WebGL Replay 从 SDK 3.3.7 起提供,要求 RUM 主包版本 >= 3.3.7,并建议插件与主包使用同一 SDK 发布版本,详情参考Canvas 录制使用手册
enableExperimentalFeatures Array [] 开启实验功能。配置 ["track_websockets"] 可采集原生 WebSocket 连接级 Resource。SDK 版本要求 >= 3.3.6详情参考
actionNameAttribute String 版本要求:>3.1.2。 为元素添加自定义属性来指定操作的名称。具体使用方式,详情参考
beforeSend Function(event, context):Boolean 版本要求:>3.1.2。 数据拦截以及数据修改,详情参考
storeContextsToLocal Boolean 版本要求:>3.1.2。是否把用户自定义数据缓存到本地 localstorage,例如: setUser, addGlobalContext api 添加的自定义数据。
storeContextsKey String 版本要求:>3.1.18。定义存储到 localstorage 的 key ,默认不填,自动生成, 该参数主要是为了区分在同一个域名下,不同子路径共用 store 的问题
compressIntakeRequests Boolean 压缩 RUM 数据请求内容,以减少发送大量数据时的带宽使用量,同时能够减少发送数据的请求数量。压缩在 WebWorker 线程中完成。关于 csp 安全策略可参考 csp 安全。SDK 版本要求>= 3.2.0。 datakit 版本要求 >=1.60。部署版要求 >= 1.96.178
workerUrl String sessionReplay 和 compressIntakeRequests 数据压缩都是在 webwork 线程中完成,所以默认情况下,在开启 csp 安全访问的情况下,需要允许 worker-src blob:; 该配置允许添加自行托管 worker 地址。关于 csp 安全策略可参考 csp 安全。SDK 版本要求>= 3.2.0
remoteConfiguration Boolean 是否开启数据采集的远程配置功能,默认不开启。 远程配置功能可以在不发布新版本的情况下,动态修改数据采集的配置项。例如:可以在远程配置中修改采样率、是否开启用户行为采集等。远程配置功能需要在观测云控制台中开启环境变量设置。SDK 版本要求>= 3.2.20。datakit 版本要求 >=1.60观测云控制台如何开启环境变量功能
replayCanvasWorkerUrl string canvas snapshot 编码专用 worker 地址,不替代 workerUrl。 该配置允许添加自行托管 worker 地址。关于 csp 安全策略可参考 csp 安全。SDK 版本要求>= 3.3.0
replayCanvasEnabled boolean false 是否开启 canvas 录制。不开启则不会采集 canvas。SDK 版本要求>= 3.3.0
replayCanvasMode 'manual' \| 'auto' auto canvas 录制模式。manual 需要手动调用 snapshotCanvas(canvas)auto 为自动录制。
replayCanvasSampling number \| 'all' 2 仅在 replayCanvasMode: 'auto' 下生效。正数选择自动 snapshot 路径,建议从 2 开始;数值本身不控制 Canvas 2D 的采集频率。'all' 让 Canvas 2D 尝试更高还原度的 command capture,复杂场景仍可能回退为 snapshot;WebGL 插件始终使用有预算的像素快照。
replayCanvasAutoInterval number 250 每个 Canvas 的自动 snapshot 目标间隔,单位为毫秒。多 Canvas 会公平轮转,实际节奏还受 cooldown、backoff、页面可见性和全局运行时预算限制。
replayCanvasQuality 'low' \| 'medium' \| 'high' \| number 0.4 Canvas snapshot 编码质量。字符串预设还会同时调整 sampling 和自动调度预算;只想改变图片质量时请传 01 之间的数字。
replayCanvasAutoCooldown number 250 同一 Canvas 自动 snapshot 的最小冷却时间,单位为毫秒。
replayCanvasAutoUnchangedBackoff number 3000 轻量签名持续未变化时,触发下一次完整编码校验的间隔,单位为毫秒;期间仍会以有界、自适应节奏探测变化。
replayCanvasAutoFailureBackoff number 5000 自动采集失败后的退避时间,单位为毫秒。
replayCanvasAutoMaxPerRun number 2 单次自动调度最多处理的 Canvas 数。
replayCanvasFlushImmediately boolean manual: true
auto: false
Canvas 帧成功进入 replay 后是否优先 flush。
silentMultipleInit boolean 是否静默忽略重复初始化。

未使用 lowmediumhigh 字符串预设时,Canvas 自动调度基线是:sampling 2、每个 Canvas 的目标 interval 250 ms、cooldown 250 ms、unchanged backoff 3000 ms、 failure backoff 5000 ms、每轮最多 2 个 Canvas。字符串预设会同时替换这些 预算和编码质量;多 Canvas 还会受公平轮转和全局采集预算限制。显式单项配置会 覆盖预设里的对应值。完整 preset 矩阵见 Canvas 录制使用手册

以上高频调度基线用于 Canvas 2D。WebGL 插件未显式配置 interval/cooldown 时 继续采用更保守的 GPU 读回节奏;显式单项配置才会分别覆盖。

site 参数处理

节点名 地址
中国区 1(杭州) https://rum-openway.guance.com
中国区 2(宁夏) https://aws-openway.guance.com
中国区 4(广州) https://cn4-openway.guance.com
中国区 6(香港) https://cn6-openway.guance.one
国际区 1(俄勒冈) https://us1-openway.guance.com
欧洲区 1(法兰克福) https://eu1-openway.guance.one
亚太区 1(新加坡) https://ap1-openway.guance.one
非洲区 1(南非) https://za1-openway.guance.com
印尼区 1(雅加达) https://id1-openway.guance.com

运行时 Session 控制

RUM SDK 3.3.6 新增 startSession()。调用后会立即结束当前 Session,并按照当前 采样配置重新开始 Session,不需要等待下一次用户交互:

datafluxRum.startSession()

也可以同时覆盖运行时 sessionSampleRate

datafluxRum.startSession({
  sessionSampleRate: 100,
})

采样率必须在 0 到 100 之间。该覆盖值会用于本次和后续自动续建的 Session。 完整 RUM 包与精简 RUM 包都支持此 API。详细语义和使用场景参见 运行时重新开始 Session

按需开启高级能力

仅采集错误会话事件

版本要求

SDK 版本要求 >= 3.2.19

当页面触发错误时,SDK 将自动执行:

  • 持续记录:从错误触发起,完整记录会话全生命周期数据。
  • 精准补偿:通过独立采样通道,确保错误场景无遗漏。

配置方案

window.DATAFLUX_RUM &&
  window.DATAFLUX_RUM.init({
    applicationId: "<APPLICATION_ID>",
    site: "<PUBLIC_OPENWAY_URL>",
    clientToken: "<CLIENT_TOKEN>",
    sessionSampleRate: 0,
    sessionOnErrorSampleRate: 100
  })

以上示例使用公网 OpenWay。DataKit 直连时,按基础接入示例替换上报地址字段。

数据压缩

在采集大量静态资源(如 JS、CSS、图片等)并开启全量采集时,SDK 在初始化后可能会产生较多数据,造成请求积压,甚至对应用线程状态产生影响。

设置 compressIntakeRequests: true 后,SDK 会在 Web Worker 中使用 deflate 压缩上报数据,以减少请求体积和请求数量。

配置示例

window.DATAFLUX_RUM &&
  window.DATAFLUX_RUM.init({
    applicationId: "<APPLICATION_ID>",
    site: "<PUBLIC_OPENWAY_URL>",
    clientToken: "<CLIENT_TOKEN>",
    compressIntakeRequests: true
  })

注意事项

  1. 数据压缩逻辑在 Web Worker 中执行,若启用了 CSP 安全策略,需要在 worker-src 中允许 blob:。更多信息可参考 CSP 安全策略说明
  2. SDK 支持通过 workerUrl 配置项指定自托管的 Worker 地址。
  3. 使用该功能的 SDK 版本需 >= 3.2

自定义数据与事件

基础接入页不再重复展开所有公共 API。按业务目标进入对应页面,可获得 CDN、NPM 和完整参数示例:

Web 会话重放

前提

使用包含 Session Replay 的完整 RUM 包;精简 RUM 包不包含会话重放能力。

开启录制

在 SDK 初始化后,调用 startSessionReplayRecording() 方法来开启会话重放的录制。您可以选择在特定条件下开启,如用户登录后 开启会话录制

仅采集错误相关的会话重放数据

版本要求

SDK 版本要求 >= 3.2.19

当页面发生错误时,SDK 将自动执行以下操作:

  • 回溯采集:记录错误前 1 分钟的完整页面快照;
  • 持续录制:从错误发生时起持续记录,直至会话结束;
  • 智能补偿:通过独立采样通道确保错误场景无遗漏。

配置示例

window.DATAFLUX_RUM &&
  window.DATAFLUX_RUM.init({
    applicationId: "<APPLICATION_ID>",
    site: "<PUBLIC_OPENWAY_URL>",
    clientToken: "<CLIENT_TOKEN>",
    sessionSampleRate: 100,
    sessionReplaySampleRate: 0,
    sessionReplayOnErrorSampleRate: 100
  })

window.DATAFLUX_RUM && window.DATAFLUX_RUM.startSessionReplayRecording()

注意事项

  • 会话重放不记录 iframe、视频和音频的播放内容;Canvas 默认不采集,需要单独配置 replayCanvasEnabled。WebGL/WebGL2 从 SDK 3.3.7 起提供,要求 RUM 主包版本 >= 3.3.7,还需额外安装并注册兼容的 browser-rum-webgl 插件;建议插件与主包使用同一 SDK 发布版本,详情见Canvas 录制使用手册
  • 为确保重放时能正常访问静态资源(如字体、图片),可能需要配置 CORS 策略;
  • 确保通过 CSSStyleSheet 接口可访问 CSS 规则,以支持 CSS 样式和鼠标悬停事件。

验证录制状态

调用 window.DATAFLUX_RUM.isRecording() 检查当前页面是否正在录制,并在会话重放查看器中确认对应 Session 已产生重放数据。生产环境再根据业务需求调整 sessionReplaySampleRate

文档评价

文档内容是否对您有帮助? ×