跳转到主要内容
RUM API 接收浏览器和移动端客户端的事件,并把它们读出来。所有端点都使用 /api/v1/rum 前缀,并需要 Bearer Token。
写入事件和回放分段需要 rum.write;与应用绑定的 Client Token 正好只对一个应用拥有这个权限。读取需要 streams.query。平台调用方可以在受保护的 _sys 范围内使用 sys.telemetry.read。创建、修改和删除应用需要 api_tokens.manage,设置 issue 的状态、团队或处理人需要 rum.manage。 类型 说明一个端点处理哪种行:sessions、views、actions、errors、resources、long_tasks 或 vitals。每个类型对应同名数据流,去掉 rum_ 前缀。

端点

GET /api/v1/auth/tokens/rum 返回应用的 Client Token。

发送回放分段

session_id、seq 和 events 必填。也可以带上 env、service 和 version,即 SDK 初始化时设置的值:应用的保留过滤器据此知道会话是什么样的,没被保留的会话的分段就不会存。不接受其他字段。events 是 rrweb 事件。Client Token 只写入它自己的应用:可以省略 application,写成别的值会返回 403;其他凭证必须指明应用。应用不存在时返回 404。应答描述已保存的分段:id、seq、event_count 和 has_full_snapshot。 GET /api/v1/rum/replay/{session_id} 返回 session_id、segment_count 和 events,即会话所有分段的事件,按顺序排列。

管理应用

应用有 id、name、platform 和 settings:
POST 返回新建的应用;标识符或名称已存在时返回 409。PATCH 接受 name、platform 和 settings 中的任意几项。DELETE 返回 { "deleted": true }。应用已经发送的事件会保留在数据流中,直到保留期结束。

搜索行

POST 在 JSON 请求体中使用同样的名称,适合地址放不下的查询。在地址中,filters、free_text 和 columns 是 JSON 编码的列表。 筛选条件 有 field、op 和 value。最多 32 个条件,value 最长 512 个字符。 指向该类型没有的字段,或字段无法回答的操作符,会让请求返回 400。 应答包含一页行,最新的在前:
一行包含 timestamp_micros 和所请求的列。JSON 列保存文档。视图和会话只出现一次,是它们的最新版本。

统计与描述行

facets 接受 search 的参数(不分页),并增加必填的 field 和 limit(1 到 100,默认 10)。它返回字段在匹配的行中最常见的取值:
统计耗时过长或系统繁忙时,返回空列表,并把 unavailable 设为 time_budget 或 busy。保存 JSON 文档的字段返回 400。 histogram 接受同样的选择条件,以及要统计的柱:bucket_micros(至少 1000)和 origin_micros(第一根柱的起点,省略时为 from,不能晚于 from)。一个范围最多 512 根柱。每个桶是 { start_micros, total, errors }。errors 统计出问题的行:有错误的会话和视图、有受挫信号的操作,以及状态为 400 及以上或 0 的请求。没有这类行的类型,split 为 false。 GET /api/v1/rum/schema/{type} 列出其他端点接受和返回的列:
data_type 为 bool、int64、float64、utf8 或 json。unit 为 ns、ms、bytes、count、score、percent、per_second、px 或 none:时长以 SDK 发送的纳秒保存,由客户端格式化。facetable 的字段可以按取值统计,indexed 的字段筛选时不必读取每一行,id_field 是区分各行的列。

度量行

aggregate 接受 search 的选择条件,对每个匹配的行做度量。它给出图表、表格和地图背后的数字:有多少个会话,某个 Web Vitals 的第 75 百分位,按页面或按小时拆开。
一个度量有 fn 和 field,还可以有 name、where 和 fallback。 where 是筛选条件列表,写法与 search 相同,度量只取满足它们的行:{"fn":"count","where":[{"field":"session.error.count","op":"=","value":"0"}]} 统计没有错误的会话。度量的名字是 name,没有时是 fn(field),没有字段时是 fn;两个度量不能同名。类型没有的字段,或对不是数值的字段求数值,返回 400。
一行有它所属的 group(顺序同 group_by)和各度量的 values(顺序同 measures)。按时间拆开时,还有 start_micros,即它的柱的起点。行没有值的分组是 null,没有数值的百分位也是 null。unit 是 count,或 schema 给出的字段单位。视图和会话只计一次,取最新版本。没有行匹配时,带分组或分段的答案没有行,两者都没有的答案有一行:计数为 0,其他度量为 null。读取者无权看到的值,返回它被遮盖后的文本。统计耗时过长或系统繁忙时,返回空的 rows,并把 unavailable 设为 time_budget 或 busy。

漏斗、路径与留存

/api/v1/rum/analytics 下的三个端点回答 RUM 分析 的问题。它们都取 search 里适用于会话、视图和操作的筛选:from 和 to(微秒),以及 filters,即每一行都要满足的条件,通常是应用(application.id)和环境(env)。GET 时,列表以 JSON 写在参数里,所以一个问题就是一条链接;POST 在 JSON 请求体里使用同样的名字。需要 streams.query,或受保护的 _sys 范围内的 sys.telemetry.read。统计耗时过长或系统繁忙时,不返回数字,并把 unavailable 设为 time_budget 或 busy。应答带有它所属的 from 和 to。

漏斗

会话按它第一个符合条件的行计入第一步;之后每一步,按同一会话里晚于上一步那一行、第一个符合该步骤的行计入。
一个分组是 breakdown 取某个值的会话的漏斗,按它们在第一步的会话数排序;value 为 null 表示全部会话合在一起,或行里没有这个值的会话。conversion 是占第一步会话的比例,from_previous 是占上一步会话的比例,median_ms 是离上一步所用时间的中位数;没有意义的地方都是 null。字段不是文本,或该类型没有这个字段,请求返回 400。

路径

页面分在 columns 列里,列数比 depth 多一,路径所围绕的页面是第 0 列(往前看时是最后一列)。一个节点是某一列的一个页面,带有在那里的 sessions,以及没有再往下走的 ends(往前看时,是从这里开始的)。一条链接从 column 列的一个页面走到下一列(时间上更晚的一列,往前看时同样)的一个页面,带有走这条路的会话数。页面按打开的顺序取,紧接着再次打开的页面只算一次。每一列列出会话最多的 8 个页面,其余是 __other__。sessions 是有路径所围绕那个页面的会话数。

留存

一个队列是在所问时间范围内、于从 start_micros 开始的那个周期里首次出现的用户。一个人是会话的 usr.id,没有时是它的 usr.anonymous_id。returned 给出之后每个周期里有多少队列成员出现过;到 to 还没有结束的周期是 null。

播放列表

播放列表是某个应用的一串会话的命名列表,每个会话带一个值得从那里开始看的时刻。
GET /api/v1/rum/playlists 返回不带 sessions 的播放列表,最近修改的在前,可用 application 缩小到一个应用。读取需要 streams.query,平台调用方可以使用 sys.telemetry.read。其余请求会修改播放列表,需要 rum.manage;除了返回 { "deleted": true } 的 DELETE,它们都返回带会话的播放列表。 请求里的一个会话写作 { "session_id": "...", "at_micros": 1790000005000000 }:id 为 1 到 128 个字符;给出 at_micros 时,它是会话打开的时刻,一个晚于纪元的微秒数;省略时会话从头打开。播放列表保存的是 id,不是会话:它不检查会话是否存在,行已被保留期删除的会话仍留在列表里。GET /api/v1/rum/sessions/{id}/playlists 返回装着某个会话的播放列表(不带它们的会话)。

读取一行、一个会话

GET /api/v1/rum/{type}/{id} 返回一行及其全部列,找不到时返回 404。from 和 to 可以缩小查找范围,省略时查找最近 30 天。{id} 是该类型 id_field 的值。 GET /api/v1/rum/sessions/{id}/timeline 的应答: GET /api/v1/rum/sessions/{id}/related-traces 列出会话的后端链路:先是会话的请求所携带 ID 的链路(relation: direct),没有这样的链路时,是会话运行期间在跑的链路(relation: time-correlated)。每条链路有 trace_id、service、span_count、duration_ms 和 started_at_micros,应答还有 primary_service。GET /api/v1/rum/traces/{trace_id}/session 方向相反,返回会话,或 null。

Issue

相似的错误归并成 issue,每条错误行在 error.issue_id 里带着所属 issue 的 id。issue 的数字从所查时间范围内它的错误里数出来,状态和历史另外保存。时间都是自 Unix 纪元起的微秒数。
regressed_environment 是让 issue 回归的那条错误所在的环境,那条错误没有写环境时为 null。issue 属于整个应用,与它的错误在哪个环境无关。服务端还记下每个环境第一次看到它的时间,告警规则就是据此数出一个环境的新问题。 列表读取会话(或用户、出现次数,按 sort)最多的 250 个 issue,再用 status、assignee、team、search 和 fresh 缩小。total 是筛选之后剩下的 issue 数,在 limit 截断列表之前。trend 是时间范围等分成最多 12 段后每段的出现次数,从早到晚。overflow 标出一个 issue:它计入应用超出每小时可新开 issue 数之后的错误。计数耗时过长或系统繁忙时,返回空的 issue 列表,并把 unavailable 设为 time_budget 或 busy。 GET /api/v1/rum/issues/{id} 返回列表里那样的 issue(没有 trend),其 sessions、users 和 occurrences 按 from 和 to 数,另有两个字段: issue 不存在时返回 404。 PATCH /api/v1/rum/issues/{id} 接受 status、assignee_id 和 team_id 中的任意几项,并返回修改后的 issue。
status 为 open、investigating、resolved 或 ignored。regressed 由规则在已解决的 issue 于更新的版本再现时设置,设置它返回 400。assignee_id 必须是组织成员,team_id 必须是组织的团队;null 或空文本表示撤下处理人或团队。省略的字段保持原值。标为已解决会记下 resolved_at、resolved_by,并把应用当时最新的版本记为 resolved_version;任何新状态都会结束此前已解决或回归的记录。没有写明任何要改的字段的请求返回 400;把已有的值再设一遍返回 200,什么也不改变。每次修改以 rum.issue.update 写入审计日志。

预览告警规则

按评估规则的同一段代码,逐个窗口读出RUM 指标的告警规则在最近一段时间里会看到什么。需要 streams.query。
unit 为 count、percent、milliseconds 或 score。点的 at 是窗口的起点,value 是指标,samples 是指标所用的行数;窗口里的行数少于 min_samples 时,两者都为 null。current 是最后一个点,即截止到 to 的窗口。计数耗时过长或系统繁忙时,返回空的 points,并把 unavailable 设为 time_budget 或 busy。应用不存在时返回 404,规则与指标不相符时返回 400。

错误

最后修改于 2026年10月26日