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 初始化 |
准备接入信息¶
- 进入「用户访问监测 > 应用列表 > 新建应用 > Web」。
- 创建应用并获取控制台生成的
applicationId、env、version等配置。 -
选择数据上报方式:
-
公网 OpenWay:获取
site和clientToken,无需部署 DataKit。 - DataKit 直连:准备
datakitOrigin;DataKit 需要启用 RUM 采集器,并配置为公网可访问且安装 IP 地理信息库。
两种上报方式不要同时配置
公网 OpenWay 使用 site 和 clientToken;DataKit 直连使用 datakitOrigin。请只保留当前接入方式所需的字段。
上报方式¶
集成 SDK¶
接入方式 |
说明 |
|---|---|
| NPM | 将 SDK 代码打包到前端项目中,便于锁定版本。可能错过 SDK 初始化前的请求和错误。 |
| CDN 异步加载 | 通过 CDN 异步引入 SDK 脚本,不影响页面加载性能。可能错过初始化前的请求和错误收集。 |
| CDN 同步加载 | 通过 CDN 同步引入 SDK 脚本,能完整收集所有错误和性能指标。但可能影响页面加载性能。 |
NPM 接入¶
在前端项目中安装并引入 SDK:
在项目中初始化 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 直连时,请移除 site 和 clientToken,改为配置 datakitOrigin。
验证接入¶
- 打开已接入 SDK 的页面,并完成一次页面跳转、按钮点击和 API 请求。
- 在浏览器开发者工具的 Network 中过滤
/v1/write/rum,确认存在成功的上报请求。 - 检查 Console,确认没有
Application ID is not configured、datakitOrigin or site is not configured等初始化错误。 - 进入「用户访问监测 > 应用列表」,打开对应 Web 应用,在查看器中按
service、env、version筛选并确认存在 View、Resource 或 Action 数据。
看到 View 数据即表示基础接入成功
Error、Resource 和 Action 需要页面实际发生对应事件后才会出现。若没有数据,请先检查当前 Session 是否命中 sessionSampleRate,再参考 FAQ。
常用可选配置¶
基础数据确认成功后,再按需要开启其他能力:
| 目标 | 配置或 API | 文档 |
|---|---|---|
| 关联前后端链路 | allowedTracingUrls、traceType |
链路追踪配置 |
| 控制采集比例 | sessionSampleRate、startSession() |
采样配置 |
| 开启会话重放 | 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 接入使用对应的运行时字符串。目前支持 DDTRACE(ddtrace)、ZIPKIN_MULTI_HEADER(zipkin)、ZIPKIN_SINGLE_HEADER(zipkin_single_header)、W3C_TRACEPARENT(w3c_traceparent)、W3C_TRACEPARENT_64(w3c_traceparent_64bit)、SKYWALKING_V3(skywalking_v3)和 JAEGER(jaeger)。❗️ 1. OpenTelemetry 支持 zipkin_single_header、w3c_traceparent、zipkin、jaeger 4 种类型。2. 该配置的生效依赖 allowedTracingUrls。3. 配置相应类型时,需要为 API 服务设置对应的 Access-Control-Allow-Headers,详情参考 APM 如何关联 RUM。 |
traceId128Bit |
Boolean | 否 | false |
是否以 128 位模式生成 traceID,与 traceType 对应,目前支持 zipkin、jaeger。 |
allowedTracingUrls |
Array | 否 | [] |
允许注入 Trace Header 的请求 URL 匹配列表。数组项可以是完整 URL、正则、匹配函数,或包含 match 和 traceType 的对象。例如:["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 和自动调度预算;只想改变图片质量时请传 0 到 1 之间的数字。 |
replayCanvasAutoCooldown |
number |
否 | 250 |
同一 Canvas 自动 snapshot 的最小冷却时间,单位为毫秒。 |
replayCanvasAutoUnchangedBackoff |
number |
否 | 3000 |
轻量签名持续未变化时,触发下一次完整编码校验的间隔,单位为毫秒;期间仍会以有界、自适应节奏探测变化。 |
replayCanvasAutoFailureBackoff |
number |
否 | 5000 |
自动采集失败后的退避时间,单位为毫秒。 |
replayCanvasAutoMaxPerRun |
number |
否 | 2 |
单次自动调度最多处理的 Canvas 数。 |
replayCanvasFlushImmediately |
boolean |
否 | manual: trueauto: false |
Canvas 帧成功进入 replay 后是否优先 flush。 |
silentMultipleInit |
boolean |
否 | 是否静默忽略重复初始化。 |
未使用 low、medium、high 字符串预设时,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,不需要等待下一次用户交互:
也可以同时覆盖运行时 sessionSampleRate:
采样率必须在 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
})
注意事项¶
- 数据压缩逻辑在 Web Worker 中执行,若启用了 CSP 安全策略,需要在
worker-src中允许blob:。更多信息可参考 CSP 安全策略说明。 - SDK 支持通过
workerUrl配置项指定自托管的 Worker 地址。 - 使用该功能的 SDK 版本需 >= 3.2。
自定义数据与事件¶
基础接入页不再重复展开所有公共 API。按业务目标进入对应页面,可获得 CDN、NPM 和完整参数示例:
- 跟踪用户操作:自动采集点击、定义 Action 名称、添加自定义 Action。
- 自定义用户标识:登录后设置用户,退出或切换账号时清理用户。
- 全局上下文:为所有后续 RUM 事件添加稳定业务维度。
- 添加自定义 Action:记录无法通过页面点击表达的业务操作。
- 上报自定义 Error:上报已经捕获或由业务主动识别的异常。
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 从 SDK3.3.7起提供,要求 RUM 主包版本>= 3.3.7,还需额外安装并注册兼容的browser-rum-webgl插件;建议插件与主包使用同一 SDK 发布版本,详情见Canvas 录制使用手册; - 为确保重放时能正常访问静态资源(如字体、图片),可能需要配置 CORS 策略;
- 确保通过 CSSStyleSheet 接口可访问 CSS 规则,以支持 CSS 样式和鼠标悬停事件。
验证录制状态¶
调用 window.DATAFLUX_RUM.isRecording() 检查当前页面是否正在录制,并在会话重放查看器中确认对应 Session 已产生重放数据。生产环境再根据业务需求调整 sessionReplaySampleRate。