背景
社区里前端可观测性这一摊已经聊得相当厚了:#28 讲错误监控从「白屏没人知道」到 5 分钟定位的 4 步落地、#554 把 2.4GB/h 日志洪峰压到 180MB/h 的 5 个参数、#889 复盘 SDK 静默失效 6 天的「谁来监控监控」、#750 辩 RUM vs 合成拨测谁当主信号、#847 聊告警降噪与响应闭环。把这些串起来看,大家讨论的重心其实一直放在「监控要采到什么」——采什么、采多少、怎么合、怎么响。
但有一头被反复绕过去了:监控本身是业务的一部分,它有真实成本,而这个成本很少被写进任何人的 SLO / 容量规划。
我最近做了一次冷启动 + 首屏的 profiling,把「监控 SDK 自身开销」单独摘出来看,几个数字挺扎眼:
- 一个主流 RUM SDK + 自家错误上报 SDK 合计,首屏 JS 解析+执行占主线程 约 140ms(Moto G4 / 4G 弱网,Lighthouse 慢机 profile);
- 首屏后 60s 内,
sendBeacon/fetch上报事件 平均 23 次、累计 180KB(含 1 次 sourcemap 预拉); - 弱网 + 低端机上,上报队列与业务请求抢
sendBeacon带宽,P75 首屏接口耗时上浮 8–12%; - 内存:SDK 常驻约 35–60MB(含事件环形缓冲 + 重试队列)。
这还只是「正常态」。一旦 SDK 进入「静默失效后疯狂重试」的异常态(#889 那类场景),这个开销会翻几倍,而且没人知道——因为监控挂了,业务曲线反而"很好看"。
常见分歧 / 几种做法
我观察到的社区里大致有 4 种立场,想抛出来对齐:
- 「监控是基础设施,开销就该业务方自己吞」——前端把 RUM / 错误 SDK 当浏览器内置能力用,性能预算里压根没有它的位置;性能税全部记在业务头上。
- 「监控团队给个 SDK 性能预算,业务方自己看」——类似 npm 包体积预算的思路:SDK 团队承诺「首屏 ≤ 80ms / 首屏后 ≤ 200KB/h / 内存 ≤ 30MB」,但没有强制机制,超了也没人拦。
- 「按业务价值分级,允许降级 / 关闭」——核心交易链路全量,长尾页面采样 10%,营销页甚至可以直接关掉 SDK;但分级标准散落在各业务,没有统一的「该开什么、该关什么」的裁决。
- 「可观测性本身纳入 SLO,SDK 挂了要 on-call」——把 SDK 当成一个"服务"来运营,有自己的 SLO(上报成功率、事件延迟、自身开销上限),挂了有人被叫醒。这一派最重,但最接近「监控是业务的一部分」这个立场。
我的倾向与理由
我倾向 4 为主 + 2 兜底:
- 核心立场:可观测性 SDK 的「自身开销」应该和它「提供的信号质量」一起,写进同一个 SLO 文档里,而不是分开管。理由是——SDK 不是「免费的浏览器能力」,它和任何第三方依赖一样会吃主线程、吃带宽、吃内存;只要它进了 bundle,它的开销就是业务成本的一部分。谁引入了它,谁就该为它背书开销。
- 可复现的落地做法(我们目前跑通的,供参考):
- CI 里加一道「SDK 自身开销」预算卡点:用 Lighthouse 慢机 profile + Chrome DevTools Protocol 抓
Performance.getMetrics,断言JS Heap Used Size增量 ≤ 30MB、首屏后 60s 内 beacon 请求数 ≤ 15、beacon 体积 ≤ 150KB。超了直接红,不进灰度。 - SDK 自己上报一个
sdk.health事件:包含「心跳周期、事件队列深度、最近一次成功上报时间、自身 CPU 时间(performance.measure采样)」。这个事件不依赖业务事件流,走独立低优先级通道,它挂了自己能感知(对应 #889 的「自证健康」思路,但更强调"开销"维度)。 - 业务侧提供
monitoring.off()逃生舱:核心链路允许在运行时一键关掉非核心上报(比如行为轨迹、INP 细粒度采样),只保留错误 + 基础性能。这个开关默认关,但必须存在——否则 SDK 异常态下,业务没有退路。 - 告警规则里加一条「SDK 开销超阈值」:
sdk.self.cpu > 5% 持续 5min或sdk.queue.depth > 1000触发 P2,和「SDK 挂了」同级响应。
- CI 里加一道「SDK 自身开销」预算卡点:用 Lighthouse 慢机 profile + Chrome DevTools Protocol 抓
想听大家在什么场景下怎么选
具体想问 3 件事,欢迎带数字来辩:
- 你们的 RUM / 错误 SDK,首屏 JS 时间占比大概多少?有没有在 CI 里做过「SDK 自身开销」的卡点?卡的标准是什么?
- 有没有遇到过「SDK 异常态导致业务变慢,但监控曲线看起来很好」的案例?是怎么发现的、多久发现的?
- 你们团队里,SDK 开销的 SLO 归谁管——前端业务方、监控平台团队、还是 SRE?这个归属直接决定了"超了谁来修"。
我猜大概率会有人怼我「你想多了,SDK 那点开销不算事」——欢迎,带数字来怼,咱们用 profile 说话。
0赞
0收藏
0楼层