Sentry — بستری برای ردیابی خطاها و نظارت بر عملکرد برنامهها در زمان واقعی است که به توسعهدهندگان زمینه کامل هر خرابی را ارائه میدهد. به گفته Sentry Documentation, 2025، Sentry روزانه بیش از 10 میلیارد رویداد را پردازش میکند و با 90+ زبان و فریمورک برای iOS، Android، وب و بکاند یکپارچه میشود.
نکات اصلی
Sentry — بستری متنباز برای گزارش خرابی و نظارت بر عملکرد است که در سال 2012 تأسیس شد. این بستر به توسعهدهندگان امکان میدهد اعلانهای خطا را در زمان واقعی با زمینه کامل تشخیصی دریافت کنند: stack فراخوانی، مقادیر متغیرها در لحظه خرابی، توالی اقدامات کاربر قبل از خطا و وضعیت محیط.
برخلاف سرویسهای تجمیعی گزارش خرابی (Google Play Console، App Store Connect) که فقط آمار و نمودارهای پایه ارائه میدهند، Sentry هر رویداد را جداگانه با امکان گروهبندی بر اساس نوع خطا و فیلتر بر اساس نسخه برنامه نمایش میدهد. Issue در Sentry — گروهی از رویدادها با 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 فیلترهای داخلی برای رد رویدادهای ناخواسته بدون ارسال به سرور ارائه میدهد: خطاهای محیطهای آزمایشی، خطاهای نسخههای قدیمی برنامه، رویدادهای تکراری با fingerprint یکسان. Filtering تا 70% از حجم داده را در یک پروژه تولیدی معمولی ذخیره میکند و هزینه مصرف و بار کانال ارتباطی دستگاه را کاهش میدهد.
نصب Sentry SDK برای پلتفرمهای موبایل 5–10 دقیقه طول میکشد و نیاز به افزودن وابستگی و مقداردهی اولیه با کلید DSN دارد. DSN (Data Source Name) — شناسه منحصر به فرد پروژه در Sentry است که مشخص میکند رویدادها به کجا ارسال شوند.
Sentry برای Android ابزار دقیق خودکار را از طریق پلاگین Gradle فراهم میکند. پلاگین بایتکد را در مرحله کامپایل تغییر میدهد و برای همه Activity، Fragment و فراخوانیهای شبکه wrapper اضافه میکند. 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
}
}
}
کد SDK Sentry را در برنامه Android مقداردهی اولیه میکند. پارامتر tracesSampleRate = 0.2 ردیابی عملکرد را برای 20% از نشستها فعال میکند، enableAutoSessionTracking به طور خودکار برای هر اجرای برنامه نشست ایجاد میکند.
SDK برای iOS از 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 SDK Sentry را با جمعآوری خودکار معیارهای عملکرد فعال میکند. enableAutoPerformanceTracing نظارت بر زمان بارگذاری صفحه و درخواستهای HTTP را بدون کد اضافی فعال میکند.
Breadcrumbs — توالی زمانی رویدادهایی است که قبل از خطا رخ میدهند. Sentry به طور خودکار breadcrumbs را برای کلیک دکمهها، انتقال بین صفحات، درخواستهای HTTP و اعلانهای سیستمی ثبت میکند. توسعهدهنده میتواند breadcrumbs سفارشی برای منطق کسبوکار اضافه کند.
هر breadcrumb شامل یک برچسب زمانی، نوع رویداد (navigation, http, ui, error)، دستهبندی و دادههای دلخواه است. هنگام وقوع خطا، تمام breadcrumbs 2–5 دقیقه آخر (قابل تنظیم) به رویداد پیوست میشوند. این زمینه اغلب از خود 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 خواهد دید که کاربر روی دکمه «Pay» با مبلغ 19.99 USD کلیک کرده است که امکان بومیسازی سریع مشکل در جریان پرداخت را فراهم میکند.
Sentry به رویدادها اطلاعات مربوط به کاربر را اضافه میکند: ID، نام کاربری، ایمیل. User context به طور خودکار با تمام رویدادهای یک نشست منتقل میشود و امکان گروهبندی خطاها بر اساس کاربران و تعیین تعداد کاربران تحت تأثیر یک باگ خاص را فراهم میکند. رعایت سیاست حریم خصوصی و عدم ارسال دادههای شخصی در صورت عدم مجوز توسط سیاست برنامه مهم است.
در نسخههای تولیدی iOS و Android کد معمولاً مینیفای یا مبهمسازی میشود. بدون پردازش، stack خطا شامل نامهای نامفهومی مانند «a.b()» به جای «UserViewModel.fetchData()» خواهد بود. Source maps (JavaScript) و debug symbols (dSYM برای iOS، ProGuard mapping برای Android) stack قابل خواندن را بازیابی میکنند.
برای Android، Sentry به طور خودکار فایلهای ProGuard mapping را از طریق پلاگین Gradle هنگام ساخت نسخه release بارگذاری میکند. برای iOS نیاز به بارگذاری فایلهای dSYM است — Sentry یک اسکریپت برای بارگذاری خودکار در مرحله بایگانی ارائه میدهد. بدون نمادهای اشکالزدایی، stack خطا در Sentry برای توسعهدهنده بیفایده خواهد بود، بنابراین فرآیند بارگذاری آنها باید یک مرحله اجباری در خط لوله CI/CD باشد.
از نسخه 2020، Sentry شامل نظارت بر عملکرد — جمعآوری معیارهای زمان اجرای تراکنشها با ردیابی توزیعشده است. Transaction در Sentry — واحد کار قابل اندازهگیری است: بارگذاری صفحه، اجرای درخواست API، پردازش وظیفه پسزمینه. هر تراکنش شامل spanهای فرزندی است که نشان میدهند کدام مراحل بیشترین زمان را گرفتهاند.
نظارت بر عملکرد در Sentry با ردیابی خطا یکپارچه شده است: اگر تراکنش با خطا به پایان برسد، span مربوطه با وضعیت «error» علامتگذاری میشود و توسعهدهنده میتواند از معیار عملکرد به جزئیات استثنا برود. Trace ID تمام رویدادها (خطاها، تراکنشها، breadcrumbs) را در یک نشست واحد برای تحلیل سرتاسر پیوند میدهد و انتقال یکپارچه بین برگههای Issues و Performance در داشبورد واحد پلتفرم Sentry را فراهم میکند.
به گفته Sentry Performance Benchmark (2024)، برنامه با نظارت بر عملکرد فعال (نرخ نمونهبرداری 10%) 2–5% ترافیک بیشتر و 1–2% منابع CPU بیشتر در دستگاه مصرف میکند. این بار با کاهش 70% زمان تشخیص عملکرد در مقایسه با پروفایل دستی جبران میشود.
سوالات متداول
Sentry زمینه بیشتری فراهم میکند: breadcrumbs، دادههای سفارشی، ارتباط خطاها با عملکرد. Firebase Crashlytics — ابزاری رایگان با گزارش خرابی پایه است، اما بدون ردیابی توزیعشده و بدون امکان ابزار دقیق سفارشی breadcrumbs. Sentry برای پروژههایی که نیاز به تشخیص عمیق دارند مناسب است.
Sentry یک طرح رایگان برای 5,000 رویداد در ماه (خطاها + تراکنشها) ارائه میدهد. طرح پولی Team برای هر کاربر 26 دلار در ماه هزینه دارد و شامل 100,000 رویداد است. برای پروژههای بزرگ، طرح Business با حجم نامحدود و قیمت فردی در دسترس است.
Sentry یک مکانیزم داخلی Data Scrubbing ارائه میدهد: حذف خودکار ایمیلها، آدرسهای IP، کارتهای اعتباری و سایر دادههای PII از رویدادها قبل از ذخیرهسازی. قوانین پاکسازی در رابط وب یا در پیکربندی 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 را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید