Небольшое предисловие от команды ОК: Последний пост на Хабре от Одноклассников был написан ещё в декабре прошлого года. Мы пропали отсюда на 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.

Комментарии (3)


  1. Firsto
    29.08.2023 16:20

    Планируется ли открыть доступ без использования VK ID? Или ещё лучше какой-нибудь SSO с поддержкой SAML или LDAP, например.

    Как в организации его использовать?)


    1. novoselov
      29.08.2023 16:20
      +1

      Так может просто ссылку на GitHub ? :)


    1. Sk1talec Автор
      29.08.2023 16:20
      +1

      Добавление и удаление пользователей сейчас происходит в ручном режиме.

      У нас планируется внедрение отдельной фичи для корпоративных аккаунтов, но, к сожалению, пока не могу раскрыть подробности.