Ошибки не должны быть безмолвными: Sentry, Firebase Crashlytics и Datadog в одном Flutter-приложении
Глобальный перехват строится на трёх механизмах Flutter: FlutterError.onError для ошибок виджетов, PlatformDispatcher.instance.onError для асинхронных ошибок и изолятов, runZonedGuarded для ошибок внутри зон. При использовании Zones инициализация WidgetsFlutterBinding и запуск runApp должны происходить в одной зоне, иначе Flutter начиная с версии 3.10 выводит предупреждение.
Crashlytics подходит для фатальных и приоритетных non-fatal ошибок, показывает долю затронутых пользователей и позволяет добавлять custom keys с экраном, состоянием корзины или способом оплаты. Sentry дополняет стектрейс цепочкой действий пользователя, сетевыми запросами, тегами и контекстом приложения, поэтому помогает воспроизводить сложные сбои бизнес-логики.
Datadog Real User Monitoring отслеживает загрузку экранов, фризы, FPS и задержки API, связывая их с конкретной пользовательской сессией. Ошибки можно одновременно отправлять во все три системы, но персональные идентификаторы следует анонимизировать, а вместо белого экрана пользователю показывать резервный интерфейс через ErrorWidget.builder.
Коротко
- Non-fatal ошибки в Crashlytics группируются отдельно и не ухудшают показатель пользователей без сбоев.
- Breadcrumbs в Sentry фиксируют навигацию, API-запросы и действия в бизнес-логике перед возникновением ошибки.
- Datadog RUM отслеживает загрузку экранов, фризы интерфейса, FPS и задержки сетевых запросов.
- Идентификаторы пользователей в отчётах об ошибках рекомендуется анонимизировать, например хешировать email.
- ErrorWidget.builder позволяет заменить белый экран понятным сообщением с предложением перезапустить приложение.
FAQ
Зачем подключать Crashlytics, Sentry и Datadog одновременно, если каждый из сервисов уже умеет собирать ошибки приложения?
Crashlytics быстрее показывает масштаб сбоя, Sentry сохраняет подробный контекст, а Datadog связывает ошибки с производительностью и сетевыми запросами.
Как в Flutter перехватить ошибки виджетов, асинхронного кода, изолятов и зон, чтобы они не потерялись между системами мониторинга?
Для этого используют FlutterError.onError, PlatformDispatcher.instance.onError и при необходимости runZonedGuarded. Обработчики могут передавать одну ошибку сразу в несколько сервисов.
Какие данные следует добавлять к отчётам об ошибках и какие ограничения нужно учитывать при работе с пользовательским контекстом?
Полезны экран, версия приложения, состояние сценария, действия пользователя и параметры запроса. Персональные данные и идентификаторы нужно минимизировать или анонимизировать.
Читайте также
OpenAI расширяет ChatGPT Health и заявляет о медицинских рассуждениях выше уровня клиницистов
Как приложение для транскрибации YouTube-видео вышло на $3000+ в месяц
Сколько стоит контроль над ИИ-агентом? Считаем экономику
Как я склеиваю 23 тысячи событий из пяти афиш — и почему дедуп нельзя делать необратимым
Как показывать клиентам документацию из приватного репозитория, не открывая им доступ к репозиторию
- Разделение ролей между Crashlytics, Sentry и Datadog: В гибридной схеме Firebase Crashlytics используют для быстрого выявления массовых сбоев и оценки числа затронутых пользователей. Sentry отвечает за разбор редких ошибок по цепочке действий, а Datadog RUM связывает инциденты с загрузкой экранов, фризами и сетевыми задержками.
[Наблюдаемость]
Зарегистрированные пользователи видят только два тезиса.
Зарегистрироваться
Для Flutter-приложения предлагается гибридная схема мониторинга: Firebase Crashlytics быстро выявляет массовые сбои, Sentry помогает разбирать редкие ошибки по контексту, а Datadog RUM связывает ошибки с производительностью и сетевыми задержками.