已采纳
回答正文
回复
讨论正文
该问题的正文、回答与讨论。
背景
我做了 8 年前端,目前带一个 B 端中台(React 18.2 + Vite 5 + TS 5.4,约 90 个路由,月 UV 80 万)。错误监控链路是 window.onerror + unhandledrejection + React ErrorBoundary 三路汇聚,指纹规则是 (归一化 message + 堆栈前 3 帧 + app 版本),上报走 sendBeacon + 服务端按指纹聚合出错误率。#28 那篇的 4 步落地我们两年前就抄完了,#139 讨论的指纹过碎/过合也调过一轮,现在卡在更上游的问题:一次用户交互引发的错误链被拆成多条独立指纹,错误率统计整体失真。
现象
最典型的一条链:用户点击「提交对账单」→ API 返回 500 → 我们的请求封装 reject → 组件里 catch 后 setState 一个兜底空态 → 但下游一个 memo 子组件没做空态防御,Cannot read properties of null (reading 'map') 再抛 → 同时未捕获的 Promise 分支还产生一条 unhandledrejection。
一次操作,监控里是 3 条独立错误指纹、3 个错误事件、错误率分子 ×3。上周按这个口径算的「错误率 0.8%」,人工回放抽样后实际「受影响交互率」只有 0.27%——虚高 3 倍。更麻烦的下游影响:
已尝试与结果
traceId(UUID),塞进该次交互内所有后续事件的 payload,上报后服务端按 (traceId, 时间窗) 聚合。问题:ErrorBoundary 里拿到的错误对象上没带 traceId(React 的 error 不冒泡业务上下文);unhandledrejection 更拿不到——只能靠「当前模块级变量」赌时序,异步竞态下会串号;期望得到的答案形态
社区里 #139 聊过指纹设计、#1446 聊过采样率、#121 聊过全量 vs 采样的成本权衡,但「一次交互多条错误的关联与归因」这个口子我还没看到被正面讨论过,先抛出来。