> ## Documentation Index
> Fetch the complete documentation index at: https://docs.molesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# RUM 探索

> 搜索真实用户的会话、视图、操作、错误、请求和长任务，按字段缩小范围，把它们画成随时间变化、排名、表格或地图上的数字，并打开某一行或整个会话。

探索页按类型列出真实用户留下的行。用字段查询找到它们，按时间统计数量，并在不离开列表的情况下打开某一行。打开 **用户体验 → 探索**。读取 RUM 数据需要 `streams.query`。

还没有[应用](https://docs.molesignal.com/zh-Hans/rum/applications.md)的工作区，这里会显示如何创建应用。

## 行的类型

标题下方的页签决定一行代表什么。一行是它所属实体的最新版本：多次上报的视图只出现一次，显示它最后的计数。

| 页签 | 一行代表 | 直方图标出 |
| - | - | - |
| **会话** | 一个会话，由它的视图派生：用户、落地页、时长、视图/操作/错误的数量、浏览器和国家。 | 有错误的会话 |
| **视图** | 一次页面浏览或一个界面：加载时间、Web Vitals 和计数。 | 有错误的视图 |
| **操作** | 一次点击、轻点或自定义操作。 | 有受挫信号的操作 |
| **错误** | 一个错误：消息、类型、来源、处理方式和堆栈。 | — |
| **资源** | 一个请求：方法、URL、状态、耗时、大小和 trace。 | 失败的请求，即状态为 `400` 及以上或 `0` |
| **长任务** | 一个长动画帧、长任务或冻结帧。 | — |

## 编写查询

查询编辑器默认收起。选择 **展开查询编辑器**，或选择 **代码**、**构造器**，即可展开。

**代码** 接受字段查询：对当前类型的字段做比较，用 `AND` 连接。

| 字段查询 | 含义 |
| - | - |
| `usr.id = 'u-42'` | 字段恰好是这个值。 |
| `view.url_path contains 'checkout'` | 字段包含这段文本。 |
| `browser.name != 'Safari'` | 字段是别的值。 |
| `resource.duration >= 1000000000` | 数字可以用 `=`、`!=`、`>`、`>=`、`<` 和 `<=` 比较。 |
| `error.issue_id = '3f9c2a71e0b4c8d1'` | 某个 [issue](https://docs.molesignal.com/zh-Hans/rum/errors.md) 的错误。 |
| `error.fingerprint = ''` | 空值表示询问字段是否没有值；`!= ''` 询问它是否有值。 |

时长以**纳秒**保存，因此 `1000000000` 是一秒。表格单元格会按合适的单位显示它们。

不是比较的词，会在当前类型的文本列中查找，例如用户、页面、错误消息和请求 URL。对当前类型没有的字段、或对保存 JSON 文档的字段做的比较，会被忽略，并显示为 **已忽略**。

**构造器** 把同一个查询显示为筛选条件。选择 **条件**，再选择字段、比较方式和值。

用 **运行查询** 运行，或在编辑器中按 `⌘ Enter` 或 `Ctrl+Enter`。**刷新** 会重新读取结果。时间范围位于运行按钮旁边，探索页默认打开最近 24 小时。

## 字段

结果旁边的 **字段** 列表包含当前类型的全部字段，分为三组：**显示字段**，即表格的列；**索引字段**，筛选时不必读取每一行；以及 **其他字段**。在 **查找字段** 中输入内容可以缩小列表。

* 点击字段名称，会列出它最常见的取值及数量，统计范围是查询匹配的行。
* **只看此值** 和 **排除此值** 会把对应的比较加入查询。再次选择已筛选的值即可移除筛选。
* 字段旁的眼睛图标把它加入表格或从表格移除。**恢复默认列** 会重置表格。
* 字段旁的加号按钮会在查询中为该字段开始一个比较。

## 结果与直方图

表格每个结果一行，最新的在前，每行最前面是时间。出问题的行在左边缘带有标记。可选择每页 100、200、500、1,000、2,000 或 5,000 行，并用 **上一页** 和 **下一页** 翻页。

表格上方的直方图统计查询在所选时间范围内匹配的**全部**行，而不仅是已加载的一页，并说明每根柱代表多少行。拖动选择柱子可以缩小时间范围。选择 **隐藏直方图** 可以关闭它，这个选择会被记住。

## 把行画成数字

结果上方的 **可视化为** 选择查询所匹配的行如何绘制。**列表** 是行的表格，默认打开。其余四种是在所选时间范围内对查询匹配的**全部**行统计出的数字，而不是对已加载的一页统计，所以与旁边的列表一致。

| 方式 | 绘制 | 可用 |
| - | - | - |
| **时序** | 一个数字随时间的变化。百分位、平均值、最小值或最大值画成折线；计数或求和画成按分组堆叠的柱。 | 一个度量，最多两层分组，最多 20 条序列 |
| **Top 列表** | 按一个数字给分组排名，每组一根横条，数字写在条后。 | 一个度量，一层分组 |
| **表格** | 每个分组一行，每个度量一列。 | 最多六个度量，最多两层分组 |
| **地图** | 在世界地图上按数字的大小给每个国家着色，数字越大颜色越深。 | 一个度量；行按 `geo.country_iso_code` 分组 |

地图可以从整个世界放大到八倍。用地图角落的按钮、滚轮或双指捏合（以指针所在处为中心）、双击放大，拖动放大后的地图来移动它。地图获得焦点后，`+` 和 `-` 缩放，`0` 显示整个世界，方向键移动放大后的地图。小到看不见的国家（例如新加坡、马耳他）会标在它所在的位置。把指针放在国家上可以看到它的数字。轮廓来自 Natural Earth 的 1:10m 国家边界，经过简化，采用中国的国界口径，不含南极洲。台湾、香港、澳门是中国的一部分：台湾单独成块、四周不画国界线，所以它的行可以单独着色。[拨测](https://docs.molesignal.com/zh-Hans/synthetics.md)里按地点的可用性地图使用同样的轮廓。

选择 Top 列表或表格里的一个分组，会把查询缩小到它；再选一次则取消。选择表格的列头会按该列排序：由服务端按这一列排名，所以看到的是该顺序的前几行，而不是另一种顺序的前几行再排序。点击时序图会固定它的提示，提示里的 **Include** 和 **Exclude** 会把查询缩小到指针下的序列，或把它排除。拖动选择图表可以缩小时间范围，与直方图相同。

当数字是 **Largest Contentful Paint**、**Interaction to Next Paint** 或 **Cumulative Layout Shift** 的某个水平值时，图表按秒、毫秒或分数绘制，并用两条虚线标出指标从良好变为较差的位置（2.5 秒和 4 秒、200 毫秒和 500 毫秒、0.1 和 0.25）；Top 列表和表格里的数字按等级着色。

### 统计什么

把行画成数字时，查询下方会出现一行设置。每次修改立即生效。

* **度量** 是字段的函数。`count` 统计行数。`count_distinct` 统计字段不同取值的个数，例如 `session.id` 或 `usr.id`。`sum`、`avg`、`min`、`max`、`p50`、`p75`、`p90`、`p95` 和 `p99` 取数值字段，百分位是估计值。时长以纳秒存储，显示时使用合适的单位。选择一个度量可以修改它；选择 **度量** 可以给表格添加一个。
* **分组** 按一个字段的取值区分各行，**再分一层** 按第二个字段区分。该字段没有值的行归在 **（无）** 下。度量值、时间和 JSON 文档不能用来分组。
* **时间桶** 是时序里一个点的长度。**自动** 把范围切成约三十个点，每个点从页面时钟上该长度的整数倍处开始。只提供能把范围切成 2 到 300 个点的长度。
* **取前** 是绘制多少个分组：时序 3 到 20 个，Top 列表和表格 5 到 100 个。

探索器数的是保留下来的行。应用[只保留一部分会话](https://docs.molesignal.com/zh-Hans/rum/sampling.md)时，显示总数的页面会把总数放大到所有会话，探索器不会：它的列表、直方图和画出来的图，都按存下来的行原样计数。

Top 列表和表格默认按该类型最常用来排名的字段分组：会话按浏览器，视图和长任务按页面，操作按目标，错误按错误类型，资源按主机。时序默认统计行数，不分组。如果统计超过了时间预算，探索页会在原本画图的位置显示 **暂不可用**；缩小时间范围或查询后再运行。

可视化方式和统计内容都写在地址里，所以复制地址栏就能分享图表：`viz` 是 `timeseries`、`toplist`、`table` 或 `map`（列表不写）；`m` 是一个度量，例如 `count` 或 `p75:view.performance.lcp.timestamp`，每个度量写一次；`by` 是一个分组字段，每个字段写一次；`bucket` 是 `5m`、`1h` 这样的长度；`top` 是分组个数；`sort` 和 `dir` 给表格排序。切换类型会保留可视化方式，并去掉 `m`、`by` 和 `sort`，因为它们属于某一类型的字段。数字通过 [`aggregate`](https://docs.molesignal.com/zh-Hans/api/rum#度量行) 读取。

## 打开一行

点击一行，或用方向键移动后按 `Enter`，会在列表旁的抽屉中打开它。抽屉先显示该类型最能说明问题的事实，然后是这一行的全部字段，错误还会显示堆栈。拖动抽屉左边缘可以调整宽度。

* `J` 和 `K`，或抽屉头部的箭头，跳到列表中的下一行和上一行。
* **打开会话** 会打开这一行所属的会话。
* 浏览器的视图会以较宽的抽屉打开，先显示 **加载瀑布**：它发出的请求和阻塞它的长任务，画在从它开始算起的同一条时间轴上。它的字段在下一个分区。见[视图的加载](https://docs.molesignal.com/zh-Hans/rum/performance.md#视图的加载)。
* 关闭抽屉后，焦点回到这一行。

## 打开会话

会话页从探索页打开，包含：

* 会话录制了 DOM 回放时显示 **回放播放器**，否则显示 **动作时间线**。回放的时间尺上，每个错误有一道刻度（红色），每个带受挫信号的操作有一道（橙色），第一页之后的每次换页有一道（灰色）；
* 回放下面的 **开发者工具**：**错误**、**网络** 和 **性能**，见下文；
* **用户信息**：用户、设备、位置、IP 地址、应用、环境、版本和时长；
* **页面**：这次访问的第一个和最后一个页面；**发现的问题**：错误、崩溃、受挫信号和长任务；
* **事件时间线**：会话中所有视图、操作、请求、错误和长任务，按发生顺序排列；
* **关联链路**：会话的某个请求携带了其 ID 的后端链路（**直接关联**）；没有请求携带 ID 时，则是会话运行期间在跑的链路（**时间相关**）。每条链路都可以在 **链路** 中打开。

如果某个会话的请求携带了某条链路的 ID，**链路** 中该链路的头部会提供 **用户会话**。

会话头部有 **复制此刻的链接**，复制的是回放打开在当前时刻的地址；还有 **加入播放列表**，把会话放进[播放列表](https://docs.molesignal.com/zh-Hans/rum/playlists.md)。

### 开发者工具

回放下面有三个标签，各带计数：**错误**、**网络** 和 **性能**。它们读取会话自己的事件，并且跟着回放走。

* 回放所在的那一行（在回放那一刻之前发生的最后一行）左边亮着一条线。回放播放或被拖动时，列表会滚动保持它在视野里，列表下面的页面不会跟着动。
* 点一行，回放跳到那一刻并暂停。时间是从录制开头起算的分和秒，和进度条是同一把尺。没有录制回放的会话没有什么可跟随、可跳转的：时间从会话开始起算，行只说明发生了什么。
* **错误** 按发生顺序列出会话的错误：时间、类型、信息，以及这个错误归入的 issue，issue 在 [错误](https://docs.molesignal.com/zh-Hans/rum/errors.md) 里打开。会话遇到过错误时，工具打开在这个标签上，没有时打开在 **网络**。
* **网络** 列出一个视图的请求：时间、方法、主机和路径、状态、类型、耗时和大小，每行还有一根时间条，画在这个视图的请求所用的时间上。**视图** 选择视图。没有选择时，是回放所在的视图，**跟随回放** 可以换回来。**全部视图** 列出会话的所有请求。**显示** 把列表收窄到慢的请求（500 ms 以上）或失败的请求。**瀑布** 像探索页那样展示这个视图的加载（见[一次视图的加载](https://docs.molesignal.com/zh-Hans/rum/performance.md#视图的加载)）。
* **性能** 给会话的每个视图一行：LCP、INP 和 CLS（用它评级的颜色），以及这个视图遇到的请求数和长任务数。点一行，在 **网络** 里打开这个视图的瀑布。

没有控制台标签，因为 SDK 不发送控制台输出。标签、视图和请求的显示方式写在地址里（`tab`、`view`、`display` 和 `show`），回放打开的时刻也在地址里（`at`，自纪元起的微秒数），回放停在那里，直到播放。[受挫](https://docs.molesignal.com/zh-Hans/rum/frustration.md) 里的链接就这样打开会话。

## 页签、分享与地址

探索页使用与 **日志** 相同的查询页签：可以并排打开多个查询、重命名页签并拆分页面。页面地址就是屏幕上的查询，它包含类型（`type`）、字段查询（`q`）、时间范围（`time`），以及把行画成数字时的方式（见[把行画成数字](#把行画成数字)），所以复制地址栏就能分享查询。**分享** 会复制一个链接，并可选择链接的时间范围。

## 探索页读取什么

行存放在 [RUM 数据流](https://docs.molesignal.com/zh-Hans/rum/events.md#事件的存储位置)中。查询经由查询引擎执行，遮盖规则和限制与 **日志** 相同；统计耗时过长时会提示不可用。列及其单位与[事件格式](https://docs.molesignal.com/zh-Hans/rum/events.md)中的字段一致。

> **[RUM 事件格式](https://docs.molesignal.com/zh-Hans/rum/events.md)**
>
> 列背后的字段。

> **[RUM 应用](https://docs.molesignal.com/zh-Hans/rum/applications.md)**
>
> 创建应用并把它的 Token 交给 SDK。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.