Skip to content

入门:错误追踪、Source Map 与全栈 SDK

基于 Sentry 8.x · 核于 2026-08

速查

  • 是什么:Sentry 是开源应用错误追踪平台(2008 年诞生,最初为 Django 调试),专注「异常/错误」这一可观测性细分领域。它通过多语言 SDK 捕获应用抛出的异常(前端 JS 错误、后端 panic、移动端崩溃),实时上报到 Sentry 服务端,用指纹(fingerprint)去重归并为 issue,分配责任人跟踪修复。
  • 核心概念:①Event(单次错误事件,含 stack trace/环境/用户/请求);②Issue(同源错误的归并组,按 fingerprint 去重);③Release(版本,标记错误首次出现的版本);④Project(一个应用/服务一个 Project,隔离错误)。
  • 错误去重(fingerprint):默认按 stack trace 的特征(文件+函数+错误类型)算指纹,相同的归为同一 issue——避免「同一个错误刷屏」,开发者只关注 issue 列表的「新错误」「频繁错误」。
  • Source Map:生产前端代码经过压缩/混淆,报错栈是 app.min.js:1:23456 无法定位。Sentry 上传 Source Map 后,自动还原栈到 TS/JSX 原始源码行——直接看到是 src/components/Login.tsx:42 报的错。
  • Release tracking:构建时把版本号(release)注入 SDK + 上传 Source Map 标记 release。Sentry 据此标记「错误首次出现在哪个版本」,关联 commit/PR,并自动检测「回归错误」(某 release 修复后又重现)。
  • 性能监控(Performance):Sentry 扩展的能力——trace 慢请求,记录 span 耗时,与错误关联(同一请求的错误 + 慢链路)。但深度不及专用 APM(SkyWalking/Datadog)。
  • Session Replay:录制用户报错时的 DOM 快照 + 网络 + 控制台,像看视频一样回放现场——是排查「无法复现」错误的利器(仅 SaaS)。
  • 前后端通用:SDK 覆盖 JS/TS、Python、Java、Go、Rust、PHP、Ruby、.NET、Flutter、React Native、Swift、Kotlin 等——一个平台看全栈错误。
  • 与日志/指标的边界:Sentry 只管错误(异常事件),不做日志全文检索(归 ELK/Loki)和时序指标(归 Prometheus)——它专精错误这一件事。

一、Sentry 是什么:错误追踪的事实标准

生产环境应用抛异常是常态——前端 JS 报错、后端 panic、移动端崩溃。传统做法:日志里搜 ERROR、靠用户截图反馈,效率低且漏报。Sentry 解决这个问题:

应用抛异常 → SDK 捕获(stack trace + 环境 + 用户 + 请求上下文)
   → 上报 Sentry 服务端
   → fingerprint 去重归并为 Issue(同源错误一组)
   → 告警通知(新错误/频繁错误/回归错误)
   → 分配责任人 → 跟踪修复状态(unresolved/resolved/ignored)
  • 只存异常事件:Sentry 不存所有日志,只存异常——这让它的存储与检索都为错误聚合优化。
  • 去重的价值:同一个 NullPointerException 一天抛几万次,没有去重就是告警风暴;Sentry 按 fingerprint 归为一组,开发者只看到一条 issue「NullPointerException 出现 50000 次」。
  • 状态跟踪:每个 issue 有状态(unresolved 待修/resolved 已修/ignored 忽略/已分配),像工单系统一样跟踪修复。

二、错误去重:fingerprint 指纹

Sentry 的核心智能是把同源错误归为一组,避免重复:

  • 默认 fingerprint:基于 stack trace 的关键帧(错误类型 + 出错文件 + 函数名 + 出错行)算指纹。栈相同的算同一 issue。
  • issue 概念:一个 issue 代表「一类错误」,下面挂多个 event(具体的每次出现)。issue 页面显示:首次/末次出现、出现次数、影响用户数、stack trace、环境、趋势图。
  • 自定义 fingerprint:某些场景默认分组不准(如动态参数导致栈「看似不同」其实是同源),可用 SDK 的 beforeSend 自定义指纹规则。
  • merging/reprocessing:错误多了可手动合并 issue,或重新分组(reprocessing 重新算指纹)。

三、Source Map:还原压缩代码到源码

生产前端代码经过 Webpack/Vite 压缩混淆,报错栈是 https://cdn.com/app.min.js:1:23456——无法定位是哪个 TS 文件的哪一行。Source Map 解决:

构建产物:
  app.min.js          (压缩混淆后的生产代码)
  app.min.js.map      (Source Map,记录压缩前后行号映射)

流程:
  构建时上传 app.min.js.map 到 Sentry,标记 release: v1.2.0
  用户报错栈:app.min.js:1:23456
  Sentry 查 Source Map:1:23456 → src/components/Login.tsx:42
  展示还原后的栈:Login.tsx:42  handleLogin()
  • 上传时机:CI/CD 构建后用 sentry-cli(或 webpack/vite plugin)上传 Source Map 到 Sentry,标记 release。
  • 安全:Source Map 不要部署到生产 CDN(暴露源码),只上传到 Sentry 内部。
  • 后端也支持:Python/Java/Go 等 Debug Symbol(符号表)类似 Source Map,让 Sentry 能解析二进制栈到源码行。

四、Release tracking:版本关联与回归检测

Sentry 把「版本」作为一等概念:

  • release 标记:构建时定义 release(如 v1.2.0 或 git commit SHA),SDK 初始化时传入,Source Map 上传也带 release。
  • 首次出现版本:Sentry 标记每个错误「首次出现在哪个 release」,关联当时的 commit/PR,知道是哪个版本引入的。
  • 回归检测(regression):某错误在 release A 修复(resolved),在 release B 又出现 → 自动标记为 regression,提醒「修复失效」。
  • 采用率(adoption):统计每个 release 的用户覆盖比例(版本发布后多久覆盖全量用户)。
  • 健康度(health):每个 release 的崩溃率、错误率,衡量版本质量。

五、性能监控与 Session Replay

Sentry 从纯错误追踪扩展出两个能力:

Performance(性能监控)

  • trace 慢请求:SDK 自动埋点(前端 fetch/XHR、后端 DB 查询),记录 span 耗时,组成 trace。
  • 与错误关联:同一请求的错误 + 慢链路放一起看——错误发生在哪个慢 span。
  • 边界:深度不及专用 APM(SkyWalking/Datadog),适合「错误优先、性能附赠」的场景。

Session Replay(会话回放)

  • DOM 录制:录制用户操作时的 DOM 变化(快照序列)+ 网络 + 控制台 + Redux 状态。
  • 回放:像看视频一样重现用户报错前的操作,看到「点了哪个按钮、输入了什么、网络请求是什么」。
  • 价值:排查「无法复现」错误——用户报错但你本地不复现,回放看到完整现场。
  • 隐私:可配置遮罩(mask)敏感输入(密码/手机号),不上传明文。
  • 限制:仅 SaaS 版完整支持(self-hosted 受限)。

六、前后端通用:一个平台看全栈

Sentry SDK 覆盖主流语言:

语言/框架SDK
前端JS/TS、React、Vue、Angular、Svelte、Next.js、Nuxt@sentry/react / @sentry/vue / @sentry/nextjs
后端Python、Java、Go、Rust、PHP、Ruby、.NET、Node.jssentry-python / sentry-go
移动Flutter、React Native、Swift (iOS)、Kotlin (Android)@sentry/react-native / sentry-cocoa / sentry-java
桌面Electron、Tauri@sentry/electron
  • 跨端关联:一个用户的请求从前端到后端,错误可在 Sentry 关联(通过 trace_id)。
  • 统一告警:所有端的错误一个平台告警,按 Project 隔离(前端 Project、后端 Project 分开)。

下一步

理解了 Sentry 的去重与 Source Map 后,下一步深入两个核心维度——错误追踪与 Source Map(fingerprint 去重 + Source Map 上传还原 + Release tracking)与性能监控与 Session Replay(Performance trace + Replay 录制 + 前后端集成)。