type、date,以及它所属的 session 和 view,另有一个以类型命名的对象承载详情。事件的 JSON Schema 随源码发布,位于 contracts/rum/events/v1.schema.json,并附有合法与非法的示例事件。
发送事件
应答
应答逐个报告每个事件,因此一个坏事件不会让请求里的其余事件一起被丢弃。
请求里的事件全部不合格时仍返回
200,accepted 为 0。完全无法读取的请求会整体失败:请求体不是 JSON、Content-Encoding 不受支持或 gzip 数据无法解码时返回 400;Token 缺失、已吊销或没有 rum.write 时返回 401 或 403;超出上述限制时返回 413。
事件会因以下原因被拒绝:
SDK 通过错误回调报告被拒绝的事件,不会重新发送。
规则
date是事件开始的时间,单位为 epoch 毫秒。view的date是视图的开始时间,在它的各个修订之间不会改变。- 所有时长,以及相对视图开始的时间(例如
performance.lcp.timestamp、resource.dns.start),都是整数纳秒。发送前请先取整。 - 视图中只要有变化,就用更高的
view.revision和当前的计数再次发送。MoleSignal 保留最高的修订。计数是累计值,不是增量。 - 客户端不发送会话事件。MoleSignal 从视图派生会话:开始与结束时间、时长、各类计数、落地页与退出页,以及是否录制了回放。
session.start为 epoch 毫秒,可选但建议提供。尚不认识某个会话的节点用它区分刚开始的会话和丢失了状态的老会话。application.id可选。应用就是 Client Token 绑定的那个,写成别的值会被拒绝。geo和network由 MoleSignal 写入,发送了也会被忽略。retention也一样:retention.rate是这类行保留下来的比例(百分数),retention.filter是什么保留了这一行(过滤器的 id、default,或者没被保留的会话的错误的errors)。总数就是用它们算出来的。- Schema 不认识的字段会被接受并保留;Schema 认识的字段如果类型或取值错误,事件会被拒绝。
error.frames承载结构化堆栈,Source Map、mapping 文件和原生符号文件应用于它。error.stack是同一堆栈的文本形式,用于展示和搜索。
每个事件都有的属性
标识符由
A-Z、a-z、0-9、.、_、: 和 - 组成,最长 128 个字符。usr、account 和设备的文本属性最长 256 个字符。
视图
view 事件的 view 对象除了上面的 id、url 和 name,还有这些字段。
动作
错误
资源
长任务
指标
MoleSignal 补充的内容
- **位置:**根据客户端 IP 地址在 DB-IP City Lite 数据库中查到的国家、行政区、城市、洲和坐标。只有应用选择保存 IP 地址时才保存地址本身。
- **浏览器、系统和设备:**浏览器事件没有携带这些内容时,由
User-Agent请求头解析得到。爬虫会成为device.type: bot。SDK 发送的值优先。 - URL 各部分:
view.url_host、view.url_path和view.url_path_group,resource.url同理。 - 长任务的脚本:
long_task.top_script.source_url、long_task.top_script.function和long_task.top_script.invoker_type,取自long_task.scripts里运行最久的那一项。浏览器没有报告脚本时,它们为空;客户端在这些列里发送的内容会被丢弃。 - **会话:**由视图派生出的每个会话的
rum_sessions行。
事件的存储位置
每种类型都有自己的普通 Logs 数据流,在创建第一个应用时创建。数据流的 Schema 是固定的,因此类型错误的值不会改变列。
列名是事件展平后的名称,例如
view.performance.lcp.timestamp 和 resource.status_code。可在 RUM 探索中浏览,也可在 日志 中用 SQL 查询这些数据流。
示例
一个请求,其中有再次发送的视图、一个失败的请求,以及它引发的错误:RUM 应用
创建 Client Token 所绑定的应用。
RUM 探索
按类型和字段搜索事件。