Tracer спустя год: новые фичи и возможности инструмента для аналитики ошибок в мобильных приложениях

от автора

Tracer — модульный инструмент для аналитики ошибок в мобильных приложениях от OK.Tech, который мы представили год назад. За это время в Tracer зарегистрировалось более 1500 организаций и 5000 пользователей. Сейчас решение обрабатывает более 1 млрд событий в день и обслуживает приложения, которые имеют суммарный DAU в 20 млн пользователей. Опыт наших клиентов показывает, что Tracer успешно справляется с поставленными задачами, но мы всё равно не останавливаемся на достигнутом.

Меня зовут Кирилл Попов. Я руководитель направления Android-разработки в ОК. В этой статье я расскажу, какие возможности получил инструмент за последний год, и что мы планируем реализовывать в перспективе.

Немного о Tracer

Tracer — инструмент для аналитики ошибок в мобильных приложениях. С его помощью можно собирать данные о крешах и зависаниях приложений, находить утечки памяти в приложении и на диске. Tracer также умеет профилировать приложения в проде для поиска критических мест в производительности. Причем Tracer ориентирован не только на выявление проблем, но и на обнаружение их причин. То есть, показывает не просто, что есть ошибка, но и где она локализуется и как ее можно исправить.

Примечательно, что Tracer — модульный инструмент. То есть можно по выбору использовать его конкретные компоненты, чтобы наиболее эффективно решать каждую возникающую проблему с ее особенностями.

При этом, инструмент — мультиплатформенный:

  • в паблике уже доступны версии для Android и iOS;

  • для внутренних задач ОК и бизнес-юнитов VK уже используются версии под Java, JS и С/С++ (Windows, Linux, Mac);

В части функциональности Tracer закрывает все основные сценарии аналитики ошибок в мобильных приложениях.

Креши

Инструмент показывает место падения и дополнительную информацию, которая помогает в устранении ошибки. При этом Tracer значительно быстрее и функциональнее конкурентов в части поиска, анализа, агрегации, группировки ошибок.

Утечки памяти

Решение помогает обнаруживать критические утечки оперативной памяти в приложении.

Причем в инструменте реализована аналитика двух видов:

  • можем с помощью Leak Canary показывать конкретные утечки, приводящие к крешам у пользователей;

  • умеем собирать дамп памяти с конечных устройств пользователя, удалять приватную информацию и формировать граф объекта для дальнейшего анализа.

Профилирование

В Tracer также есть два вида профайлеров.

  • В первом случае это классический профайлер у пользователя. То есть, возможность подключения к конкретному устройству для поиска проблем с производительностью.

  • Второй вид — сэмплирующий профайлер, с помощью которого можно даже анализировать и отображать методы, которые работают в приложении медленнее остальных.

Утечки файлов

Помимо прочего, Tracer умеет находить утечки файлов. Это особенно полезно, если в процессе разработки команда забывает «чистить лишние» файлы, из-за которых неоправданно растет размер приложения на пользовательских устройствах.

Важно, что это далеко не весь функционал Tracer, но основная и наиболее востребованная его часть, которой клиенты могли пользоваться с момента первого релиза.

Теперь же перейдем к тому, что появилось в Tracer в течение прошедшего года.

Что нового в Tracer

В процессе развития Tracer мы определяли приоритеты, исходя из запросов реальных пользователей инструмента. Поэтому каждая добавленная функция сделана не «для галочки», а имеет прикладное значение.

Поддержка A/B-экспериментов

Теперь в Tracer реализована поддержка A/B-экспериментов. Так, можно указать через инструмент название экспериментов, пользователей и группы, к которым они относятся, а дальше сравнить ошибки в тестовой и контрольной группе.

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

Фильтры по ключ/значение

Tracer получил обновленный алгоритм фильтрации по ключ/значению. Он был изначально, еще в момент первого релиза, но пользоваться механизмом было неудобно — нужно было писать запросы с помощью специфического синтаксиса.

Теперь механика изменилась — мы изначально показываем все ключи, значения и проперти, которые есть в приложении, и позволяем отфильтровывать их в соответствии с задачей.

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

Модификатор «В фоне»

Зачастую ошибки ANR (Application Not Responding) фиксируются при старте приложения, когда стартует объект application. Это обусловлено тем, что application стартует при любом обращении системы к приложению. И, так как приложение запускается в фоне, ему дают меньше ресурсов CPU и ограниченный квант времени. В результате, если приложение не успело запуститься — оно получает ANR.

Изначально Tracer и аналогичные решения умели отлавливать все ANR. Но никто не умел отделять некритичные зависания «В фоне» от критичных, видимых юзеру. Теперь Tracer это умеет.

Для этого в Tracer был добавлен отдельный фильтр «В фоне», с помощью которого можно показать только те ANR, которые видел пользователь.

Причем фильтр работает в обе стороны:

  • значение «В фоне: True» — показываются ANR в фоне;

  • значение «В фоне: False» — показываются ANR в видимых пользователю экранах.

Примечательно, что эта функция помогла нам самим выявить несколько довольно существенных для наших пользователей проблем и заблаговременно устранить их.

Stack-графики

Также мы прокачали графики. Теперь они рисуются в виде стека — то есть каждый последующий «накладывается» поверх предыдущего. Это упрощает отслеживание динамики изменения показателей на каждом из этапов.

Помимо этого, в инструменте появилась группировка — можно смотреть не только на версии приложений, которые аффектят ошибку, но и на другие срезы. Например, на срезы по вендорам и версиям операционной системы. Причем поддерживаются даже кастомные поля, которые нужны в конкретном проекте.

Поиск по userID

Среди прочего мы прокачали и поиск по userID. Так, раньше (с момента первого релиза) можно было указывать фильтр по пользователю и отображать на главном экране ошибки, которые относятся к нему. Но мы решили пойти дальше.

Теперь у нас появился отдельный экран как из главного приложения, так и из списка данных конкретного креша.

Из этой «точки входа» можно попасть в специальный экран, где ошибки расположены в хронологическом порядке.

Стоит отметить, что в отличие от конкурентных решений, Tracer отображает не только креши, но и ошибки любого типа, связанные с конкретным пользователем. Благодаря этому можно отследить, с какими ошибками и когда сталкивался пользователь, что очень полезно, например, для расследования инцидентов.

Crash variants

Изначально в Tracer не была реализована функциональность для работы с crash variants — мы считали, что предоставленного анализа ошибок будет достаточно. Но на практике оказалось, что иногда даже обнаружение ошибки не позволяет определить ее первопричину — для этого надо «откатываться» в стек-трейсе на предыдущие шаги и перебирать множество вариантов «реальных виновников» креша.

Соответственно, для этого нужна фича crash variants, которую мы и реализовали в Tracer. Теперь пользователям доступны подробные отчеты по каждой ошибке.

Для наглядности в каждую ошибку можно зайти и подробно изучить все варианты первопричин ее появления.

Советы от LLM

Помимо непосредственно технических доработок и новых функций, пользователям Tracer стал доступен встроенный «интеллектуальный помощник» с нейросетями «под капотом». К нему можно обратиться за разъяснением по поводу сути обнаруженной проблемы и даже вариантов ее устранения.

Причем помощник понимает вопросы и может давать ответы как на русском, так и на английском языке. Безусловно, полностью полагаться на ответы помощника не стоит, но это отличный способ сократить время на поиск нужной информации.

Примечание: Из-за разной скорости обучения нейросети, ответы на русском и английском языке могут отличаться — это не баг, а особенность машинного обучения.

Поддержка TraceProcessor

В рамках расширения возможностей Tracer мы научились выгружать внутренние представления в формате, который понимает утилита TraceProcessor от Google, чем обеспечили совместимость с инструментом.

Поскольку TraceProcessor позволяет делать SQL-запросы к выбранному дампу профилирования, теперь по данным из Tracer легко отслеживать все проблемы и зависания — например, методы и секции, которые работали дольше установленного времени.

Примечательно, что набор методов в TraceProcessor довольно большой, поэтому возможности анализа выгруженных из Tracer данных практически не ограничены.

Сервисные аккаунты

Среди новых опций Tracer, пока еще не выгруженных в публичный доступ, — возможность создания сервисных аккаунтов (ботов), через которые можно напрямую общаться с нашим API.

Что это дает? Например, в Firebase Crashlytics, чтобы делать сложные запросы для поиска по данным, нужно настроить выгрузку ошибок в Google Cloud, а после еще и платить за Cloud Functions. Это избыточно сложно и не всегда дешево.

С внедрением поддержки сервисных аккаунтов в Tracer необходимость выгрузки ошибок «вовне» отпадает — инструмент позволяет сразу делать практически любые поисковые запросы, независимо от их сложности.

Примечание: Формат внедрения фичи и доступа к ней (платный или бесплатный) пока не определен — пользователи Tracer будут уведомлены об этом дополнительно.

Единый раздел пользователей

Среди новых опций инструмент также получил единый раздел пользователей. Так, раньше человека надо было приглашать в каждый конкретный проект, что не всегда удобно и быстро. Сейчас алгоритм изменился — теперь у администратора есть отдельная вкладка, где можно посмотреть всех пользователей и, при необходимости пригласить их во все нужные приложения или вообще во всю организацию.

Это значительно упрощает администрирование и коллективную работу с инструментом.

Краткие итоги и планы на будущее

Tracer динамично развивается на протяжении всего года — в этот процесс активно вовлечена вся команда продукта. И это дает результаты — инструмент уже использует большинство бизнес-юнитов VK и множество внешних клиентов.

Сейчас мы продолжаем работать над расширением возможностей Tracer. Приоритетными задачами для нас являются:

  • поддержка новых языков и платформ (в первую очередь, Python, Go и Flutter);

  • внедрение новых инструментов аналитики ошибок (например, для анализа работы с базой, аккумулятором, сетью и другими);

  • добавление новых методов аналитики производительности и не только;

  • разработка on-premise-версии Tracer, которую компании смогут разворачивать на своем железе (если хотите поучаствовать в закрытой бете — пишите мне в телеге @sk1talec). 

О том, как мы будем справляться с поставленными задачами и что еще привнесем в Tracer, обязательно напишем отдельно — следите за нашими публикациями.

Если ты хочешь стать частью нашей команды и внести вклад в разработку Tracer — милости просим. Все актуальные вакансии можно найти здесь.


ссылка на оригинал статьи https://habr.com/ru/articles/861044/