sentry: сбор и анализ ошибок
TL;DR open-source программа Sentry очень помогает собирать, группировать и анализировать ошибки в веб-приложениях и прочих программах
не знаю, как вы, а я до недавнего времени использовал только самые примитивные методы для отслеживания ошибок. Самым первым было «исключение-на-емейл», и наши почтовые ящики нередко взрывались. В нокии мы складывали ошибки в серверные логи и пытались потом их анализировать при помощи Splunk (кстати, для своей задачи это отличный инструмент, рекомендую). А уж сама идея, что можно поймать яваскрипт-исключение в браузере и отправить его на сервер, казалась откровением
по вполне очевидным причинам эти методы работали плохо. Разобраться в списке из пары сотен объектов — сложная задача, а когда ошибок в логах популярного сервиса тысячи и десятки тысяч, руки просто опускаются. К счастью, многие программисты решили, что так быть не должно
в результате сейчас есть больше десятка сервисов, которые выполняют за вас всю рутинную работу и дают удобные инструменты для работы над ошибками. Самый первый и важный этап при этом — группировка одинаковых ошибок — в буквальном смысле уменьшает количество объектов для анализа на десятичные порядки. Например, со ста тысяч событий до ста групп ошибок, и это ещё тяжёлый случай. Из группировки естественно следует и подсчёт размера каждой группы, что даёт некоторое представление о важности каждой ошибки
уже такая группировка может показаться подарком богов, но разработчики не останавливаются на этом, и предоставляют дополнительные удобства. Например, оповещать по почте только о новых группах ошибок. Или автоматически создавать новую задачу в багтрекере. Или отмечать группу ошибок как исправленную, чтобы она не маячила перед глазами, и чтобы список групп можно было напрямую использовать как TODO. Или показывать исторические тренды проявления ошибки. Или фильтровать по разным параметрам типа платформы, браузера, сервера, кластера, или предоставленного самим приложением тега. И всё это почти для любого языка!
а у яваскрипт-приложений есть своя специфика, которая практически блокирует возможность решить проблему с наскока. Например, разные браузеры имеют разный формат сообщений об ошибках. И стек вызовов в них часто выдаётся по-разному. А у эксплорера текст сообщения об ошибке переводится на язык системы. Ну и минификация кода добивает любую возможность анализа
однако всё это — решаемые проблемы. Для единообразного вида стека вызовов есть библиотеки. Межбраузерная и межязыковая группировка тоже вполне достижима. С минификацией же успешно борются source maps
и вот тут поджидает засада. Нам кровь из носу нужна де-минификация. Для неё нужно предоставить source map, а это равносильно предоставлению исходного кода. Не всякий проект согласен открыто выложить свои исходники. А из десятка сервисов только RollBar согласен не требовать source map в открытом доступе, а получить её другим способом. Впрочем, есть ещё один вариант…
конечно, удобно, когда кто-то другой решает за тебя твои проблемы и берёт за это умеренную плату. Но в погоне за сохранностью исходников вполне можно взять на себя часть работы по установке локального сервиса. К счастью, такой сервис есть, и называется он Sentry. Его разработчик не только предоставляет Sentry как готовое SaaS-решение для анализа ошибок, но и делится исходниками с самыми параноидальными
поднять Sentry локально довольно просто, я управился за час. Подключить к коду плагины для отправки сообщений (под общим названием Raven) тоже дело простое. Остаётся только складывать в локальное хранилище source maps для разных билдов и включать в них собственно исходники (в поле sourcesContent). А потом можно откинуться на спинку кресла и наслаждаться : )
впрочем, у других сервисов часто бывают бесплатные тарифы с ограниченным количеством ошибок, которые могут кому-то подойти, так что вот вам список: ErrorCeption, JSLogger, QBaka, Muscula, TrackJS, BugSense, RayGun, BugSnag, RollBar, Errorify, AirBrake