针对 JS 错误做监控,对于提高站点稳定性至关重要。若不监控 JS 错误,可能引发渲染出错、用户操作中断等,导致用户体验受损,尤其是对电商、支付等业务影响尤为严重。及早发现并定位问题,能有效提升站点的可靠性。JS 错误主要分为类型错误和语法错误,通常通过 `try/catch` 语句捕捉可预见错误,而不可预见的错误则抛至全局,监听 `error` 事件即可收集。然而,未处理的 Promise 错误需额外监听 `unhandledrejection` 事件。通过全局监听收集基本错误信息,包括错误类型、描述、堆栈、引发错误的行号和文件路径。但这些信息不够详细,难以追踪用户操作和环境。为定位问题,需采集更多上下文信息。监控 SDK 通过 `UserAgent` 信息获取基础环境数据,但解析具体浏览器、系统、设备信息较为复杂,需由服务端处理。有了这些数据,能快速判断错误影响范围,识别兼容性问题。对于堆栈不完整的异步错误,监控 SDK 通过包装全局异步 API 和事件 API,捕获错误时补充调用信息,提供辅助定位。尽管堆栈不完整,仍能显示错误触发的 API 调用。线上 JS 错误堆栈难以理解,方法名被压缩,文件名是打包后的。监控平台自动上传 source map,解决此问题,实现从混淆代码到源代码的映射,显示原始堆栈。监控平台自动显示原始堆栈,但面对重复错误,研发看到的可能是冗余信息。通过聚合算法,能归类相同错误,减少噪音,仅显示不同错误。算法关注堆栈特征,如函数名、文件名、代码行,相同信息视为同一错误。若发现新错误,通过判断 issueId 的变化实现通知,确保研发及时关注。这种方法同样适用于其他异常数据。识别新增异常,自动发送通知,提高效率。对于线上 bug 分配责任问题,利用 source map 和 Gitlab/Github API,可实现更细致的分“锅”。结合 Git Blame 获取特定文件行的提交信息,定位处理人。确保线上错误与实际代码版本关联,通过二进制工具在代码发布前关联版本号,实现线上错误与原始代码的对应,自动通知处理人。字节的前端监控解决方案在火山引擎中已实现,提供实时监控、报警归因、聚类分析和细节定位,有效解决关键问题,欢迎体验和使用。