跳转到内容
Docs

入站过滤

适用于Alpha

入站过滤决定哪些上报不会变成数据。入口在项目设置 → 入站过滤,按项目独立配置。

在你打开任何一项之前,什么都不会被过滤。从未打开过这个页面的项目会保留全部事件,升级 OpenRUM 也不会改变这一点。

每个类别、每条规则都处于 关闭、仅统计 或 丢弃 之一。

状态 是否入库 是否计数 用途
关闭 是 否 完全不看这个类别。
仅统计 是 是 在真正丢弃之前,先量清这条规则会拿掉多少。
丢弃 否 是 真正把事件挡在数据之外。

中间这个状态才是这个功能的要点。直接切到丢弃,意味着你只有在数据已经没了之后才知道影响范围。新规则先用仅统计跑一天,看过计数再决定。

这几项不需要写任何模式。

标记 User-Agent 自称爬虫或无头浏览器的流量。开启前有两点值得知道。

绝大多数爬虫根本不会出现。 不执行 JavaScript 的爬虫永远不会加载浏览器 SDK,也就不产生任何事件——链接预览抓取读完 meta 标签就走了。真正能到达 OpenRUM 的是用 Chrome 渲染的 Googlebot,以及无头浏览器。

无头浏览器会被算作机器人。 Playwright 和 Puppeteer 的运行都会被标记,所以开启这一项同时也会移除你的端到端测试和合成可用性拨测。如果你正是靠它们观察真实用户指标,这个类别不是你要的。

匹配堆栈指向扩展代码的错误(chrome-extension:// 以及 Firefox、Safari 的对应协议)。这些不是你的页面抛出的,你也修不了。

匹配来自 localhost、回环地址、.local 域名或链路本地地址的页面。

10.0.0.0/8、192.168.0.0/16 这类私有网段刻意没有包含在内。自托管部署的典型场景恰恰是内网应用,把这些地址当成开发噪声,会删掉你装 OpenRUM 就是为了收集的数据。

一条规则用一个模式匹配一个字段,每个项目最多 50 条。

字段 匹配对象
错误标题 错误类型与消息拼接后的形式,与问题列表所见一致,例如 TypeError: undefined is not a function。
堆栈帧地址 堆栈的每一行,逐行独立匹配。
页面地址 归一化后的页面地址。
版本号 Release 标识。

* 匹配任意长度的字符,且是唯一的元字符。匹配不区分大小写。

ResizeObserver loop* 匹配 "ResizeObserver loop limit exceeded"
*vendor/analytics.js* 匹配该文件的任意堆栈帧
https://staging.* 匹配任意 staging 主机上的页面
canary-* 匹配 canary-1、canary-17 等版本

两端是隐式锚定的:不以 * 开头,值就必须以该模式开头;不以 * 结尾,值就必须以它结尾。

不提供正则,原因不是图省事。同一条模式要在两个引擎上跑:服务端用 RE2 编译,它不会回溯,但也不支持 lookahead 和反向引用;浏览器的 RegExp 两者都支持,却会回溯。于是一条在你控制台里调通的模式,到服务端可能编译不过,或者让一台手机卡死。而单个通配符在两边含义完全一致。

Consumer 是权威。 它对收到的每条事件评估完整规则集,所以结果不取决于访客用的是哪个 SDK 版本。

浏览器 SDK 会额外提前丢弃一部分,那只省带宽,不承担正确性。它只收到自己能用与服务端完全相同的输入去评估的那个子集:

  • 只有 丢弃 状态的条目。仅统计的规则必须到达服务端,否则它存在的意义——那个计数——会永远读作零。
  • 不含机器人类别。判定它需要服务端那套 User-Agent 解析,在浏览器里再实现一遍必然会漂移。
  • 不含页面地址规则。服务端匹配的是归一化地址,其路径中形似 ID 的段已被替换——/orders/12345 是按 /orders/:id 匹配的——而浏览器持有的是原始地址。

保存会提升 SDK 配置版本号。Consumer 约 30 秒内取到新设置;浏览器约 5 分钟内刷新自己那份,离线或运行旧 SDK 的客户端在此之前继续用缓存。由于 Consumer 无论如何都会应用真实规则,一个陈旧的浏览器只是多传了几次,不影响准确性。

运维可以通过 openrum_consumer_filtered_total 查看实例范围的命中量,标签为 reason 和 mode。只有 enforced 那部分真正移除了事件,这使 Kafka 运维手册里的对账保持精确:接收数 = 落库数 + 死信数 + 已执行的过滤数。

按项目的数字没有做成指标标签,那会让时间序列数随项目数增长。机器人类别的标记存在事件上,因此项目级占比可以直接查询——见入库标记。

它不是攻击防护。过滤运行在 Consumer,事件到那里时已经穿过 ingest、占用过配额、写进过 Kafka——容量的钱已经付完了,之后再移除只是让报表干净。限流、Origin 白名单和载荷上限是在边缘执行的,见威胁模型。

Release Alpha · commit local