Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Небольшое предисловие от команды ОК: Последний пост на Хабре от Одноклассников был написан ещё в декабре прошлого года. Мы пропали отсюда на 8 месяцев, но это не означает, что за это время с Одноклассниками ничего не происходило. Нами по-прежнему пользуется несколько десятков миллионов человек ежемесячно, мы по-прежнему один из самых высоконагруженных сервисов на Java в мире. Мы обновили позиционирование, отсняли десятки эпизодов собственных шоу, отказались от оценок под фото :)
Мы решили вернуться на Хабр после долгого отсутствия и сразу с рассказом о своем проекте, который назвали Tracer. О том, что это, рассказывает руководитель направления Android-разработки в проекте ОК Кирилл Попов.
Ошибки и сбои в работе мобильного приложения — беда для любого разработчика, которая непременно тянет за собой ворох проблем в виде ухудшения UI, потери лояльности и оттока аудитории, а также смещения фокуса с написания продуктового кода на исправление багов. Вместе с тем, часто полностью исключить проблемы невозможно. Поэтому, чтобы обеспечить предсказуемую работу прода и свести ущерб от сбоев к минимуму, важно своевременно проводить аналитику ошибок. Но есть кейсы, когда классических решений со стектрейсами ошибок не достаточно, чтобы понять что и, главное, почему идет не так. В таких и многих других сценариях поможет Tracer — модульный инструмент для аналитики ошибок в мобильных приложениях от OK.Tech, технической команды ОК, который можно настроить под определенную задачу и который может решать конкретные проблемы.
Who are you, Mr. Tracer
Tracer — инструмент для аналитики ошибок в мобильных приложениях. Решение собирает данные о крешах и зависаниях приложений, помогает находить утечки памяти в приложении и на диске. Более того, Tracer умеет профилировать приложения в продакшене для поиска критических мест в производительности.
Одна из фишек Tracer — модульность. Возможность использовать только отдельные компоненты по выбору позволяет гибко настраивать инструмент под конкретные задачи, чтобы наиболее эффективно решать возникающие проблемы в каждом отдельном случае.
Инструмент мультиплатформенный и позволяет работать с приложениями на базе:
Android;
iOS (в бете);
JS (во внутренней альфе).
Зачем: предпосылки к созданию
ОК — большая социальная сеть с высоконагруженными приложениями на всех платформах. Отказоустойчивость и доступность софта для нас — критические параметры. Чтобы обеспечить их, мы обязаны постоянно проводить аналитику ошибок в мобильных приложениях. Изначально мы опирались в этом на популярные решения, вроде Firebase Crashlytics, но со временем начали понимать, что все из них не лишены недостатков. Например:
В популярных решениях отсутствует полнотекстовый поиск по ошибкам или их анализ. Ответ на запрос часто неполный, из-за чего часть ошибок можно просто упустить из виду. Более того, тяжело найти ошибки, связанные с конкретным разделом. Даже минорные ошибки в разделе сообщений в силу трафика в будут находиться выше, чем ошибки в разделе регистрации.
Стандартные инструменты помогают не во всех случаях. В мире нет публичных инструментов для поиска утечек памяти, профилирования и утечек файлов в продакшене. Например, StackTrace с ООМ зачастую не показывает причину утечки, а ANR не всегда помогают в поиске фризов и подлагиваний. Не говоря уже о проблемах с производительностью в фоновых потоках — часто разработчики не уделяют этому внимания и раздел грузится 5-10 секунд вместо 500 мс просто из-за неправильно написанного кода или плохой архитектуры.
Зависимость от Google и других зарубежных вендоров. Это ограничивает с точки зрения рисков vendor lock-in, скорости реагирования на запросы и доступности техподдержки, а также интеграции с внутренними сервисами. Более того, нам было важно хранить данные в РФ, что невозможно при работе с зарубежным продуктом.
Доступные решения покрывают не все платформы. Например, мы не нашли под свои критерии решение для аналитики ошибок для ОК на вебе — Crashlytics работает только для Android, iOS, Flutter и Unity.
Crashlytics и его аналоги имеют перегруженный UI и работают относительно медленно на наших объемах.
В результате в 2021 году одновременно с использованием Firebase Crashlytics мы начали разработку своего решения, в котором постарались закрыть видимые нам изъяны аналогов и добавить нужные фичи.
Немного «внутрянки»
При разработке Tracer мы отталкивались от необходимости не просто показывать абстрактную статистику и её изменение, а позволить разработчику понять, почему так произошло и где именно возникла проблема. Например:
не просто показать, что приложение стало падать чаще на 1 %, а сказать, что, начиная с версии 1.2, приложение стало падать в методе А на строчке 10;
не просто сообщить, что приложение стало запускаться медленнее на 2 %, а показать, что метод Б стал работать медленно из-за вызовов системного метода С.
Следование философии предметного информирования пользователей определяет весь процесс разработки и влияет на то, как, когда и что мы добавляем в Tracer — мы стараемся давать весь массив информации о проблеме, чтобы разработчику осталось только исправить ее.
В Tracer реализованы критические по нашему мнению функции. Например: полнотекстовый поиск по крешам и метаинформации, возможности «изучать», какие стектрейсы попали в одну группу, прикреплять не критические ошибки (NON_FATAL) к месту их логирования в коде и другие.
Пример: Tracer нашел ошибки в регистрации, даже не смотря на то, что title и subtitle никак с ней не связаны.
Пример: Ошибки загрузки ленты объединены одним issueKey. Это позволяет видеть все ошибки загрузки ленты в одном месте и избежать «засорения» системы аналитики, поскольку понятно, кто отвечает за данную ошибку и где она собирается.
Креши. Tracer показывает место падения и дополнительную информацию, которая поможет в устранении ошибки.
ANR. Инструмент чётко идентифицирует место зависания приложения.
Утечки памяти. Решение показывает критическую утечку оперативной памяти в приложении.
Профайлер 1. Tracer позволяет увидеть, какие методы в приложении работают медленно и почему.
Профайлер 2. Показывает, как приложение запускалось у пользователя в динамике и из-за чего запуск был медленный.
Утечки памяти на диске. Tracer показывает, из-за чего приложение занимает определённый объём на диске пользователя.
Преимущества Tracer
Среди решений для аналитики ошибок в мобильных приложениях у Tracer есть два основных конкурента — Firebase Crashlytics (от компании Google) и Sentry.io (частичное open source решение). Но, например, Firebase Crashlytics умеет искать только креши и зависания и медленно работает, а в Sentry.io плагины платны и проприетарны, а развёртывание бэкенда внутри компании очень сложное.
На фоне аналогов у Tracer есть несколько фундаментальных преимуществ.
Локализация. Tracer — продукт OK.Tech, технической команды ОК. Он ориентирован на внутренних пользователей и риск его ухода с российского рынка минимален, чего в текущих условиях нельзя сказать, например, о Firebase Crashlytics. То есть, работа с Tracer гарантирует, что процессы аналитики ошибок в приложениях не будут нарушены, что критически важно.
Расширенная функциональность. Tracer создан с учетом нашего опыта и реальных запросов команд мобильной разработки, поэтому он охватывает больше рабочих сценариев. Например, некоторые ошибки практически невозможно обнаружить и исправить без наших инструментов или на порядок сложнее и дольше.
Мультиплатформенность. Tracer уже полностью совместим с Android-приложениям. Вместе с тем, в бете уже версия под iOS, а Web JS — во внутренней альфе. Таким образом, инструмент закроет все варианты мобильной разработки.
Адаптированность к высоким нагрузкам. Tracer уже используют практически все крупные бизнес-юниты ВК: OK, Облако Mail.ru, Дзен, ВКонтакте. Уже сейчас инструмент стабильно и без просадки производительности обслуживает приложения, суммарная месячная аудитория (MAU) которых в мире составляет около 100 млн пользователей.
Хранение данных в РФ. Серверы, на которых развернут Tracer, расположены на территории РФ. Благодаря этому, статистика не передается за рубеж, что для многих приложений важно не только с точки зрения требований Роскомнадзора и законодательства, но и корпоративных правил компаний-разработчиков продукта.
Техподдержка 24/7. Мы не только даём оперативный ответ на любые запросы, но и в ряде случаем можем доработать инструмент с учетом потребностей реальных пользователей.
Что дальше
Сейчас инструмент активно развивается, обрастает новыми фичами, получает дополнительные возможности. Например, в наших планах добавление:
новых платформ — например, desktop и игры, а также расширение инструментария них;
анализа популярных ошибок — планируем внедрить автоматическую помощь с исправлением популярных ошибок;
новых сервисов — например, для анализа сетевого трафика, потребления батарейки, использования БД и других;
новых решений в UI для улучшения профайлеров, повышения удобства и точности выявления проблем с производительностью.
Вместе с тем, Tracer уже можно пользоваться. Более того, мы открыты к предложениям по интеграции и взаимодействию — у нас есть канал с новостями и changelog, и группа для отзывов, вопросов и feature request, в которых можно оставить свои отзывы.