Crashlytics vs Sentry: как выбрать инструмент для мониторинга ошибок в мобильных приложениях
апр, 9 2026
Представьте: вы выпускаете обновление, которое ждали тысячи пользователей. Через час в App Store и Google Play начинают сыпаться гневные отзывы: «Приложение вылетает при нажатии на кнопку оплаты!». Вы открываете консоль, но там пусто. Вы пытаетесь воспроизвести баг на своем iPhone 15, но всё работает идеально. В этот момент вы понимаете, что разработка без системы мониторинга крашей - это как полет вслепую в густом тумане. Вы знаете, что упали, но понятия не имеете, где именно и почему.
Чтобы не гадать на кофейной гуще, в мобильной разработке используют специализированные системы. Сегодня стандартом индустрии стали Crashlytics и Sentry. Эти инструменты позволяют не просто узнать о факте падения приложения, а получить детальный «посмертный» отчет: от модели устройства до конкретной строки кода, которая привела к катастрофе.
Что такое Crashlytics и как он работает
Firebase Crashlytics - это бесплатный инструмент от Google, который в реальном времени собирает данные о сбоях в iOS и Android приложениях. В отличие от стандартных логов Xcode Organizer, Crashlytics работает на реальных устройствах пользователей, а данные в консоль прилетают практически мгновенно.
Когда приложение «падает», Crashlytics формирует отчет, где главной частью является Stack trace (стек вызовов). Это иерархический список методов, которые выполнялись в момент сбоя. Глядя на него, разработчик видит точный путь ошибки: например, метод calculatePrice() вызвал ошибку в строке 42, потому что получил null вместо числа.
Помимо стека, система собирает контекстные данные, которые критически важны для воспроизведения бага:
- Event summary: версия ОС, модель телефона, точное время сбоя.
- Data: объем свободной оперативной памяти, ориентация экрана и даже наличие джейлбрейка.
- Keys: пользовательские метки. Вы можете передать в отчет ID текущего экрана или статус авторизации пользователя, чтобы понять, случаются ли краши только у незалогиненных юзеров.
- Rollouts: данные о том, какие A/B тесты или настройки из Remote Config были активны у пользователя.
Sentry: когда возможностей Firebase недостаточно
Sentry - это мощная альтернатива, которая часто выбирается командами, которым нужен более глубокий контроль над данными и поддержка нескольких платформ (фронтенд, бэкенд и мобилки) в одном окне. Если Crashlytics больше сфокусирован на фатальных ошибках, то Sentry предоставляет продвинутые возможности по отслеживанию нефатальных исключений и производительности.
Ключевое отличие Sentry заключается в его подходе к «наблюдаемости» (observability). Он позволяет строить более сложные цепочки событий, которые привели к ошибке, и лучше интегрируется с CI/CD процессами. Однако, как и в случае с Google-решением, эффективность Sentry напрямую зависит от того, насколько правильно вы настроили передачу символьных файлов для деобфускации.
| Критерий | Firebase Crashlytics | Sentry |
|---|---|---|
| Стоимость | Бесплатно | Есть бесплатный план, далее платная подписка |
| Экосистема | Полная интеграция с Firebase/Google Cloud | Универсальный инструмент для всего стека (JS, Python, Go, Mobile) |
| Сбор данных | Фокус на крашах и стабильности | Глубокий мониторинг ошибок + Performance monitoring |
| Сложность настройки | Простая (если уже есть Firebase) | Средняя, больше гибкости в конфигурации |
Как измерять стабильность: считаем Crash Rate
Просто видеть список ошибок недостаточно. Бизнесу и менеджменту нужны цифры. Самый важный показатель здесь - Crash-free users. Это процент людей, которые вообще не увидели «черного экрана» или внезапного закрытия приложения за определенный период.
Для более точного технического анализа используется метрика Crash Rate. Она показывает долю сессий, завершившихся аварийно. Формула простая:
Crash Rate = (Количество сессий с крашами / Общее количество сессий) × 100%
Например, если ваше приложение запустили 10 000 раз, и в 500 случаях оно вылетело, ваш Crash Rate составит 5%. Для топовых приложений этот показатель должен быть ниже 0.1%. Если он растет, значит, последнее обновление принесло критические баги, и нужно срочно делать откат или выпускать хотфикс.
Проблема обфускации: почему вы видите «странные» имена методов
Если вы разрабатываете на Android, вы наверняка используете ProGuard или R8. Эти инструменты обфусцируют код - заменяют понятные названия методов вроде processPayment() на короткие a(), b(). Это нужно для защиты кода и уменьшения размера APK.
Проблема в том, что когда приложение падает, в логах Crashlytics или Sentry вы тоже увидите a.b.c(Unknown Source). Чтобы превратить этот «шифр» обратно в читаемый код, системе нужен файл mapping.txt. Этот файл создается в момент сборки проекта в Android Studio.
Если вы забыли загрузить mapping-файл в консоль мониторинга, вы никогда не найдете причину падения. Правильный порядок действий такой: сборка проекта → генерация mapping-файла → автоматическая или ручная загрузка в Sentry/Crashlytics → анализ стектрейса. Современные плагины для Gradle делают это автоматически, но если вы используете сторонние протекторы кода, проверьте, не блокируют ли они передачу этих данных.
Настройка алертов: как не пропустить пожар
Мониторить дашборд вручную каждый час - путь к выгоранию. Поэтому важно настроить автоматические уведомления. В Crashlytics это делается через раздел «колокольчика» или в настройках проекта (Project Settings → Alerts).
Здесь есть два критических параметра:
- Порог срабатывания (Threshold): когда считать ошибку важной.
- Min. # of users: минимальное количество уникальных пользователей. По умолчанию в Firebase стоит 25 человек. Это сделано специально, чтобы вы не получали алерт каждый раз, когда ваш тестировщик намеренно «роняет» приложение 10 раз подряд, пытаясь проверить крайний случай.
Рекомендую настроить разные каналы связи: критические ошибки (Crash Rate > 1%) должны лететь в Slack или PagerDuty, а менее значимые - в почту. Также в 2026 году хорошим тоном считается разделение алертов на «фатальные» и «события безопасности» (например, подозрительные попытки обхода авторизации).
Стратегия внедрения: когда начинать мониторинг
Самая большая ошибка начинающих команд - внедрять Crashlytics или Sentry после релиза. Когда пользователи начнут жаловаться, вы обнаружите, что многие проблемы специфичны для конкретных версий ОС или моделей устройств (например, только на старых Samsung с Android 10), и без логов вы их никогда не воспроизведете в офисе.
Правильный подход к поддержке выглядит так:
- Этап разработки: интеграция SDK мониторинга с первого дня.
- Тестирование: проверка, что краши с симуляторов и реальных устройств долетают до консоли.
- Релиз: отслеживание Crash-free users в первые 48 часов после обновления.
- Поддержка: использование APM-инструментов (например, Datadog или New Relic) в связке с Sentry для анализа общей производительности системы.
Что лучше выбрать: Crashlytics или Sentry?
Если вам нужно бесплатное, надежное решение, которое идеально работает с экосистемой Google и Firebase - выбирайте Crashlytics. Если же ваш проект сложный, включает в себя и веб-часть, и бэкенд, и вам нужен глубокий мониторинг производительности (Performance) и гибкая настройка уведомлений, Sentry будет лучшим выбором, несмотря на стоимость.
Влияет ли SDK мониторинга ошибок на производительность приложения?
Влияние минимально. Современные SDK работают в фоновом режиме и отправляют отчеты только после перезапуска приложения или при наличии стабильного интернета, чтобы не тормозить основной поток (Main Thread) и не тратить заряд батареи пользователя.
Можно ли использовать оба инструмента одновременно?
Технически - да, но практически это избыточно. Вы получите дублирование данных и увеличите размер итогового бинарного файла приложения. Лучше выбрать один основной инструмент и настроить его максимально детально.
Почему я вижу в логах "Unknown Source" вместо кода?
Это происходит из-за обфускации кода. Чтобы это исправить, вам нужно загрузить dSYM-файлы (для iOS) или mapping.txt (для Android) в консоль мониторинга. Без этих файлов система не может сопоставить обфусцированный адрес в памяти с вашей строчкой кода.
Как бороться с «шумными» ошибками, которые не влияют на работу?
Используйте функцию группировки (Issue Grouping) и помечайте такие ошибки как "Ignored" или "Resolved". В Sentry можно настраивать фильтры, чтобы определенные типы исключений (например, ошибки сети при плохом соединении) не создавали новые инциденты и не присылали уведомления.