Sentry — 这是什么,原理及错误收集

作者: IT Sectr 发布日期: 2026-05-29 阅读时间: 8 分钟

Sentry 是一个用于实时跟踪错误和监控应用程序性能的平台,为开发人员提供每次故障的完整上下文。根据 Sentry Documentation, 2025Sentry 每天处理超过 100 亿个事件,为 iOS、Android、Web 和后台提供与 90+ 语言和框架的集成。

要点

  • Sentry — 开源错误跟踪和性能监控平台,支持 90+ 语言和平台。
  • Error events — 自动收集带有完整 stacktrace、变量值和设备状态的异常。
  • Breadcrumbs — 错误之前的用户操作和系统事件的顺序。
  • Source maps — 对压缩代码进行反混淆以在生产中恢复可读的调用堆栈。
  • Performance Tracing — 通过所有服务的分布式跟踪监控事务执行时间。

开发中的 Sentry 是什么

Sentry 是一个开源崩溃报告和性能监控平台,成立于 2012 年。它使开发人员能够实时接收带有完整诊断上下文的错误通知:调用堆栈、崩溃时的变量值、错误前的用户操作顺序和环境状态。

与仅提供统计数据和基本图表的聚合崩溃报告服务(Google Play Console、App Store Connect)不同,Sentry 单独显示每个事件,可以按错误类型进行分组并按应用程序版本进行过滤。Sentry 中的 Issue 是具有相同 stacktrace 的事件组,这使您可以在数千个相同的崩溃中不被淹没,而是专注于在完整上下文中消除根本原因。

根据 Sentry (2025),实施 Sentry SDK 后,平均错误检测时间从 30 分钟减少到 30 秒,诊断时间由于自动 breadcrumbs 和环境上下文而减少 60%。该平台被全球超过 100,000 个组织使用,包括 Airbnb、Microsoft、Instagram 和 PayPal,每天处理数十亿个事件。

Sentry 架构:SDK、Relay 和事件处理

Sentry 系统由三个主要组件组成:应用程序端的 SDK、Relay(代理服务器)和事件处理后端。Sentry SDK 是一个集成到应用程序中的库,它捕获异常、收集上下文并通过 JSON/HTTPS 协议将事件发送到 Relay。

Sentry Relay

Relay 是一个中间服务器,可以部署在公司的基础设施中。它从 SDK 接收事件,根据规则(PII 数据、不必要的事件)进行过滤,缓冲并转发到 Sentry SaaS 或自己的实例。Relay 可确保低发送延迟 — 典型的事件接收时间为 500–1500 毫秒。

Inbound Data Filter

Sentry 提供内置过滤器,无需将不需要的事件发送到服务器即可拒绝它们:来自测试环境的错误、来自旧版本应用程序的错误、具有相同指纹的重复事件。Filtering 在典型的生产项目中可节省高达 70% 的数据量,从而降低消费成本和设备通信通道的负载。

为 iOS 和 Android 配置 Sentry SDK

为移动平台安装 Sentry SDK 需要 5–10 分钟,需要添加依赖项并使用 DSN 密钥进行初始化。DSN(数据源名称)是 Sentry 中项目的唯一标识符,指示将事件发送到哪里。

在 Android 上配置

对于 Android,Sentry 通过 Gradle 插件提供自动检测。该插件在编译阶段修改字节码,为所有 Activity、Fragment 和网络调用添加包装器。Auto-instrumentation 通过 build.gradle 中的一个选项启用,无需更改代码即可从应用程序生命周期获取 breadcrumbs。

kotlin
import io.sentry.Sentry

class App : Application() {
    override fun onCreate() {
        super.onCreate()
        Sentry.init { options ->
            options.dsn = "https://example@sentry.io/project"
            options.tracesSampleRate = 0.2
            options.enableAutoSessionTracking = true
        }
    }
}

代码初始化 Android 应用程序中的 Sentry SDK。参数 tracesSampleRate = 0.2 为 20% 的会话启用性能跟踪,enableAutoSessionTracking 自动为每次应用程序启动创建会话。

在 iOS 上配置

iOS SDK 支持 CocoaPods、Swift Package Manager 和 Carthage。安装后,SDK 会自动捕获 NSException、信号(SIGABRT、SIGSEGV)和 Swift 错误。Sentry Cocoa SDK 兼容 iOS 12+ 和 macOS 10.13+,支持 Swift Concurrency(async/await)和 URLSession 的自动检测。

swift
import Sentry

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        SentrySDK.start { options in
            options.dsn = "https://example@sentry.io/project"
            options.enableAutoPerformanceTracing = true
        }
        return true
    }
}

Swift 中的代码激活 Sentry SDK,自动收集性能指标。enableAutoPerformanceTracing 无需额外代码即可启用屏幕加载时间和 HTTP 请求的监控。

Breadcrumbs 是错误之前事件的时间顺序。Sentry 自动记录按钮点击、屏幕切换、HTTP 请求和系统通知的 breadcrumbs。开发人员可以为业务逻辑添加自定义 breadcrumbs。

每个 breadcrumb 包含时间戳、事件类型(navigation、http、ui、error)、类别和任意数据。发生错误时,过去 2-5 分钟(可配置)的所有 breadcrumbs 都会附加到事件中。这个上下文通常比 stacktrace 本身更重要:开发人员看到用户在选择产品后点击了“支付”,然后才发生崩溃。默认情况下,最大 breadcrumbs 数量为 200,之后最旧的记录会自动删除。

kotlin
Sentry.addBreadcrumb(
    Breadcrumb().apply {
        category = "payment"
        message = "User tapped Pay button"
        type = "user"
        level = BreadcrumbLevel.INFO
        data["amount"] = "19.99"
        data["currency"] = "USD"
    }
)

代码为支付场景中的用户操作添加了自定义 breadcrumb。如果此操作后发生错误,开发人员将在 Sentry 中看到用户点击了金额为 19.99 USD 的“Pay”,从而可以快速定位支付流程中的问题。

User context

Sentry 允许将用户信息附加到事件:ID、用户名、电子邮件。User context 自动与同一会话中的所有事件一起传递,允许按用户对错误进行分组,并确定特定错误影响了多少用户。遵守隐私政策很重要,如果应用程序政策不允许,则不要传输个人数据。

Source maps 和调试符号

在 iOS 和 Android 的生产版本中,代码通常被压缩或混淆。未经处理,错误堆栈将包含难以理解的名称,例如“a.b()”而不是“UserViewModel.fetchData()”。Source maps(JavaScript)和 debug symbols(iOS 的 dSYM,Android 的 ProGuard mapping)可恢复可读的堆栈。

对于 Android,Sentry 在构建发布版本时通过 Gradle 插件自动上传 ProGuard mapping 文件。对于 iOS,需要上传 dSYM 文件 — Sentry 提供了一个脚本,可在归档阶段自动上传。没有调试符号,Sentry 中的错误堆栈对开发人员将毫无用处,因此上传过程应该成为 CI/CD 管道的强制步骤。

通过 Sentry 进行性能监控

从 2020 版本开始,Sentry 包含性能监控 — 通过分布式跟踪收集事务执行时间的指标。Sentry 中的 Transaction 是可测量的工作单元:加载屏幕、执行 API 请求、处理后台任务。每个事务包含子跨度,显示哪些步骤花费了最多时间。

Sentry 中的性能监控与错误跟踪集成:如果事务以错误结束,相应的跨度将标记为“error”状态,开发人员可以从性能指标切换到异常详细信息。Trace ID 将所有事件(错误、事务、breadcrumbs)连接到一个会话中进行全面分析,确保在 Sentry 平台的统一仪表板中在 Issues 和 Performance 选项卡之间无缝切换。

根据 Sentry Performance Benchmark (2024),启用了性能监控(采样频率 10%)的应用程序在设备上消耗的流量增加 2-5%,CPU 资源增加 1-2%。与手动分析相比,性能诊断时间减少 70%,从而抵消了这种负载。

常见问题

Sentry 和 Firebase Crashlytics 有什么区别?

Sentry 提供更多上下文:breadcrumbs、自定义数据、错误与性能的关联。Firebase Crashlytics 是一个带有基本崩溃报告的免费工具,但没有分布式跟踪,也没有自定义 breadcrumbs 检测的能力。Sentry 适用于需要深入诊断的项目。

Sentry 对移动应用程序的费用是多少?

Sentry 提供免费套餐,每月 5,000 个事件(错误 + 事务)。付费 Team 套餐每用户每月 26 美元,包含 100,000 个事件。对于大型项目,提供 Business 套餐,具有不限容量和单独定价。

Sentry 如何处理错误中的个人数据?

Sentry 提供内置的 Data Scrubbing 机制:在存储之前自动从事件中删除电子邮件、IP 地址、信用卡和其他 PII 数据。擦洗规则在 Web 界面或 Relay 配置中配置,支持正则表达式。建议在 SDK 级别启用擦洗,以便机密数据不会离开用户设备。

可以在自己的服务器上运行 Sentry 吗?

可以,Sentry 有完全开源的自托管版本。Self-hosted Sentry 通过 Docker Compose 部署,包含 SaaS 版本的所有功能。需要最低服务器配置:4 vCPU、16 GB RAM、100 GB 磁盘空间用于存储事件。

Sentry 是否支持 SwiftUI 和 Jetpack Compose?

是的,Sentry SDK 完全支持 SwiftUI(iOS 13+)和 Jetpack Compose(Android)。对于 SwiftUI,SDK 自动为 NavigationView 和 List 创建事务并测量渲染时间。对于 Jetpack Compose,需要通过 CompositionLocalProvider 进行自定义集成,以将 Sentry 上下文传递给 Composables。

总结

  • Sentry 是一个开源错误跟踪和性能监控平台,被超过 100,000 个组织使用。
  • 架构包括设备上的 SDK、Relay 代理和事件处理后端,支持自托管和 SaaS 部署。
  • Breadcrumbs 提供错误前的用户操作时间线,对于诊断复杂错误至关重要。
  • Source maps 和 dSYM 从混淆的生产代码中恢复可读的调用堆栈。
  • Performance Tracing 与错误跟踪集成,允许通过统一的 trace ID 从时间指标导航到错误详细信息。
  • Auto-instrumentation 无需手动代码即可覆盖 Activity、ViewController、HTTP 请求和应用程序生命周期。
  • 建议为每个生产应用程序实施 Sentry:免费套餐每月覆盖 5,000 个事件,足以满足中小型项目的需求。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读