Настройка 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 анализа в автоматических pipelines:
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 дня. Стоимость рассчитывается индивидуально.







