Как стать автором
Обновить

Ловим баги на клиенте: как мы написали свою систему для сбора клиентских ошибок

Время на прочтение15 мин
Количество просмотров9.7K
Всего голосов 39: ↑39 и ↓0+39
Комментарии8

Комментарии 8

А что именно представляет из себя процессинг данных в скриптовом фреймворке? Только деобфускация, или вы ещё как-то по-умному схлопываете одинаковые отчёты, например, если их в какой-то момент времени начинает поступать слишком много?

По сути да — это вызов сервисов деобфускации/символикации (самая долгая операция), плюс насыщение данных дополнительно информацией. Например, для iOS мы определяем по человечкское название девайса по его модели (что iPhone12,3 это iPhone 11 Pro)

Мы храним все события без схлопывания, даже если их навалило миллионы. Это упрощает систему, хоть и требует дополнительных накладных расходов.

Как обрабатываете ситуацию, когда данных приходит столько, что не успеваете вставлять? Просто обрабатываете в порядке очереди и все ошибки приходят с опозданием, или какую-то более умную схему используете, например начинаете обработку с самых свежих записей, а старые вставляете только если время осталось?

Пока никак не обрабатывается, но опять же это осознанный выбор т.к. в первой версии мы сконцетрировались на реализации MVP, чтобы мы могли полноценно съехать с AppCenter.

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

И ещё вопрос: LSD доставляет тоже в виде файлов на конечные сервера, или вы его используете как транспорт до Кафки?

Пока все работает на базе LSD «as is» т.е. доезжает на конечные тачки в облаке и этого более чем хватает. Сейчас мы сконцентрировались на улучшении UI/UX и интеграции с внутренними системами. Переход на Кафку пока лишь пока в виде идеи т.к. у нее тоже свои особенности.

Можно подробнее про "немного магии" в группировке на Android?

На самом деле это я назвал это «магией» потому, что вся логика скрыта в сервисе, который разрабатывали наши android разработчики, а я лишь вызываю его из кода.

Я посмотрел исходный код и логика примерно следующая:
— разбиваем стек трейсы на фреймы
— отфильтровываем все системные фреймы (например, то что начинается с com.android)
— дальше если у нас остались НЕ системные фрейсы, то беремся N из них, в противном случае берем в прицнипе первые N фреймов

Сейчас используется 3 фрейма, но я так понимаю это подбиралось эмпирически
Зарегистрируйтесь на Хабре, чтобы оставить комментарий