全部产品
Search
文档中心

云监控:Web & H5 集成和使用SessionReplay和热力图

更新时间:Mar 16, 2026

功能概述

面对日益增长的用户体验要求和激烈的市场竞争,业务团队迫切需要更加深入地了解用户在与应用页面交互的行为,针对性地进行页面设计、内容布局或交互流程优化,从而提升产品体验与用户转化。 Session Replay (会话回放)和热力图功能提供了一种可视化、聚合式的用户行为数据分析能力,从而帮助我们基于真实的用户行为数据快速发现交互障碍,优化页面布局和交互体验。

SessionReplay(会话回放)

SessionReplay 支持录制用户在页面上的所有操作,包括:

  • DOM 变化

  • 用户交互动作(点击、输入、滚动等)

  • 网络请求

  • 页面性能指标

录制完成后,您可以在监控平台回放完整的用户会话,帮助您:

  • 快速定位问题:通过回放用户操作,快速复现错误场景

  • 优化用户体验:观察用户真实操作路径,发现交互问题

  • 提升转化率:分析用户行为,优化关键流程

热力图

热力图功能通过采集用户的点击行为数据,生成可视化的热力图,帮助您:

  • 了解用户关注点:查看用户最常点击的区域

  • 发现无效点击:识别用户点击但无响应的区域

  • 优化页面布局:根据点击热力图调整页面元素位置

  • 提升用户体验:减少误触,提高操作效率

快速入门

前置条件

已完成 RUM SDK 接入,确保 SDK 版本(≥ 0.1.5),接入参考 接入Web & H5应用

启用 SessionReplay

最简单的启用方式:

armsRum.init({
  endpoint: "your endpoint",
  replay: true, // 启用会话回放
});

启用热力图

启用热力图的使用依赖SessionReplay(基于SessionReplay作为热力图的背景页面),需要开启replay(对采样率没有要求),另外需要配置 action 采集器的 trackUserInteractions 选项:

armsRum.init({
  endpoint: "your endpoint",
  replay: true, // 启用会话回放
  collectors: {
    action: {
      enable: true,
      trackUserInteractions: true, // 启用热力图数据采集
    }
  }
});

完整配置示例

同时启用 SessionReplay 和热力图:

armsRum.init({
  endpoint: "https://your-endpoint.com/rum/web/v2",
  // SessionReplay 配置
  replay: {
    enable: true,
    sampling: 20, // 会话回放采样率,此处代表 20% 的会话会被录制
    privacy: {
      level: 'user-input', // 仅遮蔽用户输入
    }
  },
  
  // 热力图配置
  collectors: {
    action: {
      enable: true,
      trackUserInteractions: true, // 启用热力图分析
      sampling: 100, // 100% 采样率
    }
  },
  
  // Session 配置
  sessionConfig: {
    sampleRate: 1, // 会话采样配置,默认 100% 采样率
    storage: 'localStorage',
  }
});

SessionReplay 配置

配置项说明

通过 replay 配置项进行配置,支持简单启用或详细配置。

参数

类型

描述

是否必填

默认值

enable

boolean

是否启用会话回放功能

false

sampling

number

采样率,取值范围:0-100,表示百分比(例如:20 表示 20% 的会话会被录制)

1,即默认 1% 的采样率

url

string

Replay 数据存放位置,指定录制数据的存储 API

基于 endpoint 自动生成

privacy

object

隐私保护配置

{ level: 'mask' }

privacy 配置

在启用 Session Replay 前,建议您进行正式的隐私影响评估,规划隐私保护配置以控制录制内容的敏感信息遮蔽,RUM 提供了不同级别的隐私保护级别配置。

参数

类型

描述

是否必填

默认值

level

string

隐私保护级别。可选值:

- 'allow':允许录制所有内容,不做任何遮蔽

- 'mask':遮蔽所有文本内容和输入框

- 'user-input':仅遮蔽用户输入的内容(如密码、输入框等)

- 'allowlisted':仅录制白名单中的元素,其他内容将被遮蔽

'mask'

allowlisted | Array | 白名单配置。当 level'allowlisted' 时生效,指定允许录制的元素选择器或元素列表

可以通过添加特定 CSS 类来控制录制行为:

  • rum-block:避免该元素及其子元素被录制,回放时是一个同等宽高的占位元素

  • rum-ignore:避免录制该元素的输入事件

  • rum-mask:该元素及其子元素的 text 内容将会被屏蔽

<!-- 不录制该区域 -->
<div class="rum-block">
  这部分内容不会被录制
</div>

<!-- 避免录制该元素的输入事件 -->
<input class="rum-ignore" />

<!-- 遮蔽敏感信息 -->
<div class="rum-mask">
  敏感信息会被遮蔽显示
</div>

配置示例

示例 1:简单启用(默认配置)

armsRum.init({
  endpoint: "your endpoint",
  replay: true
});

示例 2:设置采样率

armsRum.init({
  endpoint: "your endpoint",
  replay: {
    enable: true,
    sampling: 20, // 20% 的会话会被录制,降低存储成本
  }
});

示例 3:隐私保护 - 遮蔽所有文本

armsRum.init({
  endpoint: "your endpoint",
  replay: {
    enable: true,
    privacy: {
      level: 'mask'  // 遮蔽所有文本内容和输入框
    }
  }
});

示例 4:隐私保护 - 仅遮蔽用户输入

armsRum.init({
  endpoint: "your endpoint",
  replay: {
    enable: true,
    privacy: {
      level: 'user-input'  // 仅遮蔽用户输入的内容(密码、输入框等)
    }
  }
});

示例 5:隐私保护 - 白名单模式

armsRum.init({
  endpoint: "your endpoint",
  replay: {
    enable: true,
    privacy: {
      level: 'allowlisted',
      allowlisted: ['.main-content', '#app', '.product-card']  // 仅录制这些元素
    }
  }
});

工作原理

  1. 录制时机:SessionReplay 在以下时机开始录制:

    • Session 初始化时

    • 页面加载完成后(DOMContentLoaded

  2. 数据上传:录制数据会在以下时机上传:

    • 页面隐藏时(visibilitychange

    • 页面冻结时(freeze

    • 页面卸载前(beforeunload

    • 路由变化时(pv

  3. 录制限制

    • 单个会话录制的最长时间为 1 小时(3600 秒)

    • 超过最大时长后会自动停止录制

  4. 采样控制

    • 采样率在 Session 级别控制,采样的命中前提是Session命中采样

    • 可通过 replay.sampling 配置

    • 采样决策在 Session 初始化时确定,整个会话期间保持不变

热力图配置

配置项说明

热力图功能通过 collectors.action 采集器配置,需要启用 trackUserInteractions 选项。

参数

类型

描述

是否必填

默认值

enable

boolean

是否启用点击事件采集

true

trackUserInteractions

boolean

是否追踪用户交互(用于热力图分析)。当为 true 时,会采集点击位置、目标元素信息等详细数据

false

sampling

number

采样率,取值范围:0-100,表示百分比

100

配置说明

  • trackUserInteractions: false(默认):

    • 只采集可交互元素(button、a、input、select、option、textarea 等)的点击事件

    • 采集的数据包括:元素名称、XPath、持续时间等基础信息

    • 适用于只需要基础点击统计的场景

  • trackUserInteractions: true

    • 采集所有元素的点击事件,包括不可交互元素

    • 采集的数据包括:

      • 位置信息:点击的 X/Y 坐标(相对于文档)、元素内相对坐标

      • 目标元素信息:元素选择器、宽度、高度、是否为可交互元素、是否可信的交互

      • 视口信息:页面视口的宽度和高度

    • 适用于需要生成热力图的场景

配置示例

示例 1:启用热力图(推荐配置)

armsRum.init({
  endpoint: "your endpoint",
  collectors: {
    action: {
      enable: true,
      trackUserInteractions: true,  // 启用热力图分析
      sampling: 100,  // 100% 采样率
    }
  }
});

示例 2:仅采集基础点击事件(不启用热力图)

armsRum.init({
  endpoint: "your endpoint",
  collectors: {
    action: {
      enable: true,
      trackUserInteractions: false,  // 不启用热力图
      sampling: 100,
    }
  }
});

采集的数据字段

trackUserInteractions: true 时,采集的点击事件包含以下字段:

position(位置信息)

{
  x: 123,        // 点击 X 坐标(相对于文档)
  y: 456,        // 点击 Y 坐标(相对于文档)
  ex: 50,        // 元素内相对 X 坐标
  ey: 30         // 元素内相对 Y 坐标
}

target(目标元素信息)

{
  selector: "#root > div > button:nth-child(15)",  // 元素选择器
  width: 120,      // 元素宽度(像素)
  height: 40,     // 元素高度(像素)
  reaction: 1,     // 是否为可交互元素(0=不可交互, 1=可交互)
  trust: 1         // 是否可信的交互(0=不可信, 1=可信)
}

viewport(视口信息)

{
  width: 1920,    // 视口宽度(像素)
  height: 1080    // 视口高度(像素)
}

工作原理

  1. 事件监听:SDK 监听页面的 click 事件(使用捕获阶段)

  2. 元素识别

    • trackUserInteractions: false 时,只采集可交互元素的点击

    • trackUserInteractions: true 时,采集所有元素的点击

  3. 数据采集

    • 计算点击位置(相对于文档和元素)

    • 获取元素信息(选择器、尺寸、交互性)

    • 判断交互可信度(基于元素大小、可见性等)

  4. 数据上报:采集的数据会随其他 RUM 事件一起上报到监控平台

使用场景

SessionReplay 常见使用场景

1. 错误复现和调试

场景:用户报告了一个错误,但无法准确描述操作步骤。

解决方案

  • 启用 SessionReplay,设置合理的采样率(如 20%)

  • 当错误发生时,通过 Session ID 关联找到对应的会话回放

  • 回放用户操作,快速定位问题原因

2. 用户体验优化

场景:分析用户在关键流程中的操作路径,优化转化率。

解决方案

  • 针对关键页面(如购买流程)提高采样率

  • 回放用户会话,观察用户操作习惯

  • 发现操作障碍点,优化页面布局和交互

3. 支持客服场景

场景:客服需要了解用户遇到的具体问题。

解决方案

  • 通过用户 ID 或 Session ID 查找对应的会话回放

  • 回放用户操作,快速理解问题上下文

  • 提供更精准的解决方案

热力图使用场景

1. 页面布局优化

场景:了解用户最常点击的区域,优化页面布局。

解决方案

  • 启用热力图数据采集

  • 在监控平台查看点击热力图

  • 根据热力图调整重要元素的位置

2. 无效点击分析

场景:发现用户点击但无响应的区域(无效点击)。

解决方案

  • 通过 target.reaction 字段识别不可交互元素的点击

  • 分析无效点击的分布和频率

  • 优化页面,减少无效点击

3. 移动端适配优化

场景:移动端用户误触率高,需要优化点击区域。

解决方案

  • 通过热力图查看移动端的点击分布

  • 识别误触热点区域

  • 调整元素大小和位置,减少误触

最佳实践

SessionReplay 最佳实践

1. 采样率设置

  • 生产环境:建议设置 10-20% 的采样率,平衡成本和覆盖率

  • 测试环境:可以设置 100% 采样率,便于问题排查

  • 关键页面:对转化率关键页面提高采样率

const isProduction = process.env.NODE_ENV === 'production';
armsRum.init({
  endpoint: "your endpoint",
  replay: {
    enable: true,
    sampling: isProduction ? 20 : 100,  // 生产环境 20%,测试环境 100%
  }
});

2. 隐私保护

  • 敏感信息:对于包含敏感信息的页面,使用 'mask''user-input' 级别

  • 公开页面:对于公开页面,可以使用 'allow' 级别,获得更完整的回放

  • 合规要求:根据合规要求,合理设置隐私级别

3. 存储成本优化

  • 合理设置采样率,按需配置采样率

  • 对于非关键页面,可以降低采样率或禁用录制

  • 定期清理过期的录制数据(默认30天)

4. 性能考虑

  • SessionReplay 会对页面性能产生一定影响,建议在关键页面使用

  • 监控录制数据的体积,避免影响上报性能

热力图最佳实践

1. 采样率设置

  • 分析阶段:建议使用 100% 采样率,获得完整数据

  • 稳定运行:可以降低到 50-80%,减少数据量

  • 高流量页面:可以适当降低采样率

armsRum.init({
  endpoint: "your endpoint",
  collectors: {
    action: {
      enable: true,
      trackUserInteractions: true,
      sampling: 80,  // 80% 采样率
    }
  }
});

2. 结合业务分析

  • 结合页面路径、用户属性等维度分析热力图

  • 关注关键转化路径的点击热力图

  • 定期分析热力图变化,优化页面布局

3. 移动端优化

  • 移动端误触率高,重点关注无效点击

  • 通过 target.trust 字段识别可信点击

  • 优化移动端元素的点击区域大小

常见问题

SessionReplay 常见问题

开启 SessionReplay 对页面性能有影响吗?

SessionReplay 会对页面性能产生一定影响,主要体现在:

  • 内存占用:录制数据会占用一定内存

  • CPU 使用:DOM 变化监听会消耗 CPU 资源

  • 网络传输:录制数据需要上传,可能影响网络性能

建议

  • 合理设置采样率,避免全量录制

  • 在非关键页面可以禁用录制

  • 监控页面性能指标,确保影响在可接受范围内

如何控制录制数据的体积?

可以通过以下方式控制录制数据体积:

  1. 降低采样率:减少录制的会话数量

  2. 设置隐私级别:使用 'mask''user-input' 级别,减少录制内容

  3. 限制录制时长:单个会话最多录制 1 小时

  4. 过滤不需要的元素:使用 allowlisted 模式,只录制关键区域

Q3: 是否支持Canvas 和 IFrame的录制?

A: 基于合规和录制性能方面的考量,暂不支持Canvas和IFrame的录制,会留白处理。

Q4: 采样率是如何工作的?

A: 采样率在 Session 初始化时确定,整个会话期间保持不变。例如:

  • 如果Session的采样率配置为20%,Replay配置为20%,SessionReplay的整体采样率是 20% × 20% = 4%

  • 如果采样率设置为 20%,则 20% 的 Session 会被录制

  • 采样决策基于 Session ID 的哈希值,确保同一 Session 的决策一致

  • 一旦 Session 被选中录制,整个会话期间都会持续录制

热力图常见问题

Q1: 热力图数据什么时候上报?

A: 热力图数据会随其他 RUM 事件一起上报,上报时机包括:

  • 达到 reportConfig.maxEventCount 时批量上报

  • 达到 reportConfig.flushTime 时间间隔时上报

  • 页面卸载前上报

Q2: 热力图数据包含哪些信息?

A: 当 trackUserInteractions: true 时,热力图数据包含:

  • 位置信息:点击的 X/Y 坐标(文档坐标和元素内坐标)

  • 元素信息:选择器、尺寸、是否为可交互元素

  • 交互信息:是否可信的交互

  • 视口信息:页面视口的宽度和高度

Q3: 如何判断点击是否有效?

A: 可以通过以下字段判断:

  • target.reaction1 表示可交互元素,0 表示不可交互元素

  • target.trust1 表示可信的交互,0 表示可能误触

无效点击通常表现为:reaction: 0trust: 0