用户会话轨迹(User Session Trace)是用户体验监控提供的核心能力之一。该功能记录终端用户从进入应用到离开的完整旅程,SDK 在应用运行期间自动采集各类用户行为和性能事件,并通过唯一的 Session ID 将同一次会话中的所有事件串联起来,形成完整的用户行为时间线。
功能概述
通过用户会话轨迹,您可以:
还原单个用户在一次会话中的完整操作路径。
定位用户遇到的异常、卡顿或慢加载问题发生时的上下文。
分析页面跳转顺序、停留时长和交互行为,优化用户体验。
结合资源请求数据,排查网络层面的性能瓶颈。
前提条件
使用用户会话轨迹功能前,请确保已完成以下准备工作:
已在控制台创建应用并获取接入初始化代码。
已完成 SDK 的集成和初始化。具体操作请参见前端应用。
说明:SDK 初始化成功后,用户会话轨迹功能默认开启,页面加载、用户操作、资源请求、异常错误、卡顿等事件将自动采集,无需额外埋点。
工作原理
会话生命周期
SDK 自动管理会话生命周期,无需手动干预。不同平台的会话管理策略如下:
移动端应用(iOS / Android):
会话创建:应用首次启动或从后台回到前台时,SDK 自动创建新会话并生成唯一的 Session ID。
会话续期:如果应用进入后台后在 60 秒内回到前台,SDK 复用当前会话,不会创建新会话。
会话过期:如果应用在后台停留超过 60 秒后回到前台,SDK 认为上一次会话已结束,自动创建新会话。
会话终止:应用被终止时,当前会话结束。
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 应用启动 │───▶│ 创建新会话 │───▶│ 采集事件 │
└─────────────┘ └──────────────┘ └──────┬──────┘
│
┌───────────────────┤
▼ ▼
┌─────────────┐ ┌──────────────┐
│ 进入后台 │ │ 应用终止 │
└──────┬──────┘ └──────────────┘
│
┌───────────┴───────────┐
▼ ▼
┌────────────────┐ ┌────────────────┐
│ ≤60秒回到前台 │ │ >60秒回到前台 │
│ 复用当前会话 │ │ 创建新会话 │
└────────────────┘ └────────────────┘前端应用(Web / 小程序):
会话创建:用户首次访问页面时,SDK 自动创建新会话并生成唯一的 Session ID。
会话续期:用户在页面上持续活跃(如点击、滚动、导航等交互行为)时,会话保持有效。
会话过期:用户无任何交互操作超过超时时间后,SDK 认为会话已结束;下次交互时自动创建新会话。
会话终止:用户关闭页面或浏览器时,当前会话结束。
会话采样
SDK 支持会话级别的采样控制。采样率默认值为 100%(即采集所有会话),被采样命中的会话,其所有事件均会上报;未命中的会话,其事件将被丢弃,不会产生网络开销。
手动配置
适用于 Web/小程序应用,在集成 RUM 过程中,初始化配置 sessionConfig 函数,可支持对 SDK 采集的会话进行采样率配置。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
sampleRate | number | Session采样率:[0, 1] 50%采样率就是0.5。 | 否 | 1 |
maxDuration | number(ms) | Session最大持续时间,默认24小时。 | 否 | 86400000 |
overtime | number(ms) | Session超时时间,默认一小时。 | 否 | 3600000 |
storage | string | Session相关的数据存储位置。
| 否 | localStorage |
armsRum.init({
endpoint: "your endpoint",
sessionConfig: {
sampleRate: 0.5, // 采样率50%
maxDuration: 86400000,
overtime: 3600000,
storage: 'cookie',
},
});远程配置
登录 RUM 控制台,应用列表点击进入应用详情 > 应用设置 > SDK 配置,在「会话配置」中进行相应会话采样率的配置。
如果您是 Web应用,如果要进行远程配置会话采样率,需要在初始化 RUM SDK 时,添加 remoteConfig 字段。SDK在初始化的时候会根据该字段去获取远程 OSS 配置,并根据获取到的配置更新探针配置功能。
参数 | 类型 | 描述 | 是否必填 | 默认值 |
enable | boolean | 是否启用远端配置 | 否 | false |
mode | string |
| 否 | launch-first |
cacheTimeout | number(ms) | 配置缓存有效期,默认一小时 | 否 | 3600000 |
armsRum.init({
endpoint: "your endpoint",
remoteConfig: {
enable: true,
mode: 'remote-first',
}
});SDK 获取到远程配置之后,除了即时更新功能外,还会将该配置存储到本地,以便下次SDK启动的时候优先使用本地存储的配置进行初始化。此外需要注意,SDK需要版本号在0.0.37及以上。
事件关联
SDK 为每次会话生成唯一的 Session ID。在会话期间采集的所有事件(页面加载、用户操作、资源请求、异常错误、卡顿等)都会自动关联该 Session ID,确保同一会话内的事件可以被完整串联和回溯。
同时,每个事件还会记录当前所在的页面信息(页面 ID 和页面名称),便于在会话轨迹中定位事件发生的具体页面上下文。
采集的事件类型
SDK 在一次用户会话中自动采集以下事件类型:
页面加载(View)
记录用户访问的每个页面的加载和停留信息。SDK 自动采集页面生命周期事件,无需手动埋点。
属性 | 说明 |
页面名称 | 页面标识名称 |
页面 URL | 页面路径 |
上一页面 | 来源页面信息,用于分析跳转路径 |
页面加载耗时 | 页面从开始加载到加载完成的时间(ms) |
页面停留时长 | 用户在该页面的停留时间(ms) |
首次绘制(FP) | 页面首次渲染的时间 |
首次内容绘制(FCP) | 页面首次有内容渲染的时间 |
最大内容绘制(LCP) | 页面最大内容元素渲染完成的时间 |
累积布局偏移(CLS) | 页面布局稳定性指标 |
首次输入延迟(FID) | 用户首次交互到应用响应的延迟 |
用户操作(Action)
记录用户在页面上的交互行为,如点击、滑动等。SDK 自动拦截用户交互事件进行采集。
属性 | 说明 |
操作类型 | 交互类型(如 tap、click、scroll 等) |
操作名称 | 操作目标的名称或描述 |
视图路径 | 操作目标在视图层级中的路径 |
操作坐标 | 用户操作的屏幕坐标 |
响应耗时 | 操作从触发到响应完成的时间(ms) |
资源请求(Resource)
自动采集应用发起的网络请求,记录请求的完整生命周期和性能指标。
属性 | 说明 |
请求 URL | 完整的请求地址 |
HTTP 方法 | 请求方法(GET、POST 等) |
状态码 | HTTP 响应状态码 |
资源类型 | 资源类型(API、Image、Media、Font 等) |
是否成功 | 请求是否成功 |
DNS 耗时 | DNS 解析耗时(ms) |
TCP 连接耗时 | TCP 连接建立耗时(ms) |
TLS 耗时 | TLS 握手耗时(ms) |
首字节时间(TTFB) | 从请求发出到收到第一个字节的时间(ms) |
响应耗时 | 完整响应耗时(ms) |
请求大小 | 请求体大小(bytes) |
响应大小 | 响应体大小(bytes) |
异常错误(Exception / Crash)
自动采集应用崩溃(Crash)和未捕获异常,同时支持通过 SDK 接口手动上报自定义异常。异常事件会自动关联当前会话和页面上下文,帮助还原异常发生时用户的完整操作路径。
属性 | 说明 |
异常类型 | 异常的分类标识 |
异常原因 | 导致异常的原因描述 |
堆栈信息 | 异常发生时的调用堆栈,用于定位代码位置 |
所在页面 | 异常发生时用户所在的页面 |
会话 ID | 异常所属的会话,可回溯异常前的完整用户行为 |
SDK 采集的异常类型包括:
应用崩溃(Crash):移动端包括运行时未捕获异常和系统信号异常(如 SIGSEGV、SIGABRT 等),SDK 在下次启动时自动上报;前端包括 JavaScript Error 和未处理的 Promise Rejection,实时上报。
自定义异常:业务代码中主动捕获的异常,可通过 SDK 提供的上报接口手动上报,适用于记录非致命错误或业务逻辑异常。
卡顿(Long Task / ANR)
自动检测应用运行中的卡顿事件,帮助定位性能瓶颈。
属性 | 说明 |
卡顿时长 | 阻塞或长任务的持续时间(ms) |
堆栈信息 | 卡顿发生时的调用堆栈 |
所在页面 | 卡顿发生时用户所在的页面 |
会话 ID | 卡顿所属的会话,可关联前后操作上下文 |
SDK 采集的卡顿类型包括:
ANR(移动端):主线程长时间无响应,通常由死锁、大量同步 IO 或复杂计算引起。
帧率卡顿(移动端):渲染帧率低于阈值,导致用户感知到界面不流畅。
长任务(Long Task):执行时间超过阈值的任务,前端和移动端均支持检测。
使用场景
场景一:排查用户投诉
用户反馈"页面打开后白屏"。通过用户会话轨迹,您可以根据用户 ID 或设备 ID 找到对应会话,查看该用户在白屏页面前后的完整事件序列:页面加载耗时是否异常、是否有资源请求失败、是否触发了 JavaScript 异常等,快速定位根因。
场景二:分析页面转化漏斗
通过会话轨迹中的页面跳转序列,分析用户从首页到下单页的转化路径。结合页面停留时长和操作事件,识别用户在哪个环节流失,是因为页面加载慢、交互卡顿还是操作路径过长。
场景三:定位慢请求影响
某个 API 接口响应变慢后,通过会话轨迹查看受影响用户的完整体验:慢请求发生在哪个页面、用户在等待期间是否有重复点击、最终是否离开了应用。结合资源请求的 DNS、TCP、TTFB 等分阶段耗时,判断是网络问题还是服务端问题。
常见问题
用户会话轨迹功能是否需要手动开启?
不需要。SDK 初始化成功后,会话轨迹功能默认开启,所有事件自动采集。
会话的超时时间是否可以自定义?
当前会话超时时间固定为 60 秒,暂不支持自定义配置。
采样率如何调整?
会话采样率通过控制台远程配置下发,默认为 100%。您可以在控制台调整采样率,修改后实时生效,无需重新发版。
崩溃事件是否也会关联到会话?
是的。崩溃事件会记录崩溃发生时的 Session ID 和页面信息。移动端崩溃由于导致应用退出,崩溃数据会在下次应用启动时上报;前端 JavaScript Error 为实时上报。两者均会关联到异常发生时的会话。