Sentry 是一个用于实时跟踪错误和监控应用程序性能的平台,为开发人员提供每次故障的完整上下文。根据 Sentry Documentation, 2025,Sentry 每天处理超过 100 亿个事件,为 iOS、Android、Web 和后台提供与 90+ 语言和框架的集成。
要点
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 是一个集成到应用程序中的库,它捕获异常、收集上下文并通过 JSON/HTTPS 协议将事件发送到 Relay。
Relay 是一个中间服务器,可以部署在公司的基础设施中。它从 SDK 接收事件,根据规则(PII 数据、不必要的事件)进行过滤,缓冲并转发到 Sentry SaaS 或自己的实例。Relay 可确保低发送延迟 — 典型的事件接收时间为 500–1500 毫秒。
Sentry 提供内置过滤器,无需将不需要的事件发送到服务器即可拒绝它们:来自测试环境的错误、来自旧版本应用程序的错误、具有相同指纹的重复事件。Filtering 在典型的生产项目中可节省高达 70% 的数据量,从而降低消费成本和设备通信通道的负载。
为移动平台安装 Sentry SDK 需要 5–10 分钟,需要添加依赖项并使用 DSN 密钥进行初始化。DSN(数据源名称)是 Sentry 中项目的唯一标识符,指示将事件发送到哪里。
对于 Android,Sentry 通过 Gradle 插件提供自动检测。该插件在编译阶段修改字节码,为所有 Activity、Fragment 和网络调用添加包装器。Auto-instrumentation 通过 build.gradle 中的一个选项启用,无需更改代码即可从应用程序生命周期获取 breadcrumbs。
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 SDK 支持 CocoaPods、Swift Package Manager 和 Carthage。安装后,SDK 会自动捕获 NSException、信号(SIGABRT、SIGSEGV)和 Swift 错误。Sentry Cocoa SDK 兼容 iOS 12+ 和 macOS 10.13+,支持 Swift Concurrency(async/await)和 URLSession 的自动检测。
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,之后最旧的记录会自动删除。
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”,从而可以快速定位支付流程中的问题。
Sentry 允许将用户信息附加到事件:ID、用户名、电子邮件。User context 自动与同一会话中的所有事件一起传递,允许按用户对错误进行分组,并确定特定错误影响了多少用户。遵守隐私政策很重要,如果应用程序政策不允许,则不要传输个人数据。
在 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 管道的强制步骤。
从 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 提供更多上下文:breadcrumbs、自定义数据、错误与性能的关联。Firebase Crashlytics 是一个带有基本崩溃报告的免费工具,但没有分布式跟踪,也没有自定义 breadcrumbs 检测的能力。Sentry 适用于需要深入诊断的项目。
Sentry 提供免费套餐,每月 5,000 个事件(错误 + 事务)。付费 Team 套餐每用户每月 26 美元,包含 100,000 个事件。对于大型项目,提供 Business 套餐,具有不限容量和单独定价。
Sentry 提供内置的 Data Scrubbing 机制:在存储之前自动从事件中删除电子邮件、IP 地址、信用卡和其他 PII 数据。擦洗规则在 Web 界面或 Relay 配置中配置,支持正则表达式。建议在 SDK 级别启用擦洗,以便机密数据不会离开用户设备。
可以,Sentry 有完全开源的自托管版本。Self-hosted Sentry 通过 Docker Compose 部署,包含 SaaS 版本的所有功能。需要最低服务器配置:4 vCPU、16 GB RAM、100 GB 磁盘空间用于存储事件。
是的,Sentry SDK 完全支持 SwiftUI(iOS 13+)和 Jetpack Compose(Android)。对于 SwiftUI,SDK 自动为 NavigationView 和 List 创建事务并测量渲染时间。对于 Jetpack Compose,需要通过 CompositionLocalProvider 进行自定义集成,以将 Sentry 上下文传递给 Composables。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。