Налаштування Release Health мониторингу (Sentry) для мобільних додатків
Release Health у Sentry — це не просто лічильник крахів для версії. Це автоматичне порівняння кожного нового релізу з попереднім: adoption rate, crash-free rate, error rate в динаміці. Якщо виробіть версію з регресією — Sentry позначить її як Unhealthy до того, як це помітять користувачі в відгуках.
Як працює Session Tracking
Sentry будує Release Health на основі сесій — не подій. Сесія починається при запуску додатку та закінчується при переході у background (> 30 секунд) або явному завершенні.
// iOS — сесії Sentry управляються автоматично при enableAutoSessionTracking = true
SentrySDK.start { options in
options.dsn = "https://[email protected]/project"
options.releaseName = "MyApp@\(Bundle.main.releaseVersionNumber)+\(Bundle.main.buildNumber)"
options.environment = "production"
options.enableAutoSessionTracking = true
options.sessionTrackingIntervalMillis = 30_000 // 30 сек у background = нова сесія
}
// Android
SentryAndroid.init(this) { options ->
options.dsn = "https://[email protected]/project"
options.release = "myapp@${BuildConfig.VERSION_NAME}+${BuildConfig.VERSION_CODE}"
options.environment = "production"
options.enableAutoSessionTracking = true
options.sessionTrackingIntervalMillis = 30_000L
}
Параметр releaseName має збігатися з тим, що передається при завантаженні dSYM/ProGuard mapping у Sentry — інакше Release Health та символізовані трейси будуть в різних «версіях» у UI.
Автоматизація через Sentry CLI
Файли dSYM для iOS потрібно завантажувати у Sentry при кожному релізі. У Fastlane:
# Fastfile
lane :upload_dsyms_to_sentry do
sentry_upload_dsym(
auth_token: ENV["SENTRY_AUTH_TOKEN"],
org_slug: "your-org",
project_slug: "ios-app",
dsym_path: "./build/MyApp.app.dSYM"
)
end
Або через sentry-cli у CI/CD:
sentry-cli releases new "[email protected]+456"
sentry-cli releases set-commits "[email protected]+456" --auto
sentry-cli upload-dsyms ./build/MyApp.app.dSYM
sentry-cli releases finalize "[email protected]+456"
set-commits --auto прив'язує git commits до релізу — у Issue-трекері Sentry буде видно, який коміт привів до проблеми.
Читання Release Health у UI
У Sentry → Releases кожна версія показує:
| Метрика | Опис |
|---|---|
| Crash Free Rate | % сесій без крахів |
| Adoption | % користувачів на цій версії від усіх |
| Sessions | Загальна кількість сесій |
| Issues | Нові помилки, вперше з'явилися у цій версії |
Статус Unhealthy встановлюється автоматично, якщо Crash Free Rate упав більше ніж на 5% порівняно з попереднім релізом.
Алерти на деградацію
# Sentry API — створити Alert Rule
import requests
rule = {
"name": "Release Health Degradation",
"environment": "production",
"actionMatch": "all",
"conditions": [
{
"id": "sentry.rules.conditions.regression_event.RegressionEventCondition"
}
],
"filters": [
{"id": "sentry.rules.filters.latest_release.LatestReleaseFilter"}
],
"actions": [
{
"id": "sentry.integrations.slack.notify_action.SlackNotifyServiceAction",
"workspace": "SLACK_WORKSPACE_ID",
"channel": "#mobile-releases"
}
],
"frequency": 60
}
requests.post(
f"https://sentry.io/api/0/projects/YOUR_ORG/ios-app/rules/",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json=rule
)
Порівняння двох релізів через API
Корисно для post-release аналізу в автоматичних pipeline:
import requests
def get_release_crash_free_rate(release: str) -> float:
resp = requests.get(
"https://sentry.io/api/0/organizations/YOUR_ORG/sessions/",
headers={"Authorization": "Bearer YOUR_TOKEN"},
params={
"field": ["crash_free_rate(session)"],
"groupBy": "release",
"query": f"release:{release}",
"statsPeriod": "7d",
"interval": "1d",
"project": ["PROJECT_ID"]
}
)
groups = resp.json().get("groups", [])
if groups:
return groups[0]["totals"].get("crash_free_rate(session)", 0)
return 0.0
current = get_release_crash_free_rate("[email protected]+456")
previous = get_release_crash_free_rate("[email protected]+455")
print(f"Delta: {current - previous:.2f}%")
Що ми робимо
- Налаштовуємо
enableAutoSessionTrackingз правильним форматомreleaseName - Інтегруємо Sentry CLI у CI/CD для автозавантаження dSYM (iOS) та ProGuard mapping (Android)
- Налаштовуємо git commit tracking через
set-commits - Налаштовуємо алерти на Regression Event з сповіщеннями у Slack
- Створюємо скрипт post-deploy перевірки Crash Free Rate для gate у pipeline
Часові оцінки
Базова настройка Release Health: 4–8 годин. Інтеграція у CI/CD з автозавантаженням символів: 1–2 дні. Ціна розраховується індивідуально.







