标准答案

  1. 错误类数据包括 window error、unhandledrejection、框架错误边界、资源加载失败和接口错误。
  2. 性能类数据包括 LCP、INP、CLS、FCP、TTFB、长任务、资源加载耗时和路由切换耗时。
  3. 上下文数据包括版本号、release、commit、页面 URL、设备、浏览器、网络、用户行为面包屑和环境信息。
  4. 前端监控要和 source map、release 版本、灰度批次和构建产物对应起来,方便还原问题。
  5. 采集必须控制隐私和性能,避免上传 token、手机号、身份证、完整请求体或高频阻塞主线程。

题目解析

监控 SDK 的目标不是把用户页面里发生的一切都传上来,而是让线上问题能定位、能归因、能衡量影响面。错误、性能、行为路径和版本信息要能拼出一次问题发生的上下文。

错误监控要关注可定位性。压缩后的堆栈如果没有 release 和 source map 对齐,只能看到构建产物行列号;接口错误如果没有状态码、接口名和 trace id,也很难和后端排查衔接。

性能监控要控制成本。SDK 自己不能明显拖慢页面,通常要做采样、批量上报、空闲上报、失败重试和字段脱敏。隐私合规比多采几个字段更重要。

代码示例

最小错误采集通常会覆盖同步错误和未处理 Promise 异常。

JavaScript
window.addEventListener('error', (event) => {
  report({
    type: 'js-error',
    message: event.message,
    filename: event.filename,
    lineno: event.lineno,
    colno: event.colno
  })
})

window.addEventListener('unhandledrejection', (event) => {
  report({
    type: 'unhandledrejection',
    reason: String(event.reason)
  })
})

常见误区

  • 只采集错误消息,不带版本、路由、环境和 release,导致无法复现和聚合。
  • 上传完整请求参数、响应体或用户输入,带来隐私和合规风险。
  • SDK 高频同步上报或阻塞主线程,监控本身影响用户体验。

作者信息