Модуль

Сотни тысяч серверных ошибок и то, что из них действительно горит

Сбор без агента, группировка по подписи и оценка, которая говорит, что вперёд.

Живой продовый сервер сыплет ошибками непрерывно. Большая часть повторяется, часть вообще не ваша, и в списке все они выглядят одинаково. Вопрос не "сколько было ошибок", а "что чинить сегодня".

Собирается, не трогая код заказчика

Ошибки тянутся из фида самой системы раз в пять минут, с курсором, от которого продолжают. Подключённые трекеры ошибок (Sentry, Rollbar, Bugsnag, Application Insights) опрашиваются раз в час. Агента ставить не надо, библиотеку в код добавлять не надо: собирается то, о чём система и так сообщает.

Порядок величин с одного живого проекта, как пример масштаба, а не как обещание: 348 628 событий собрано за два месяца.

Одна подпись, одна группа

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

Порядок величин: 348 628 событий сжались в 902 группы. Самая крупная из них насчитала 1 425 190 всплытий, и это число в одиночку утопило бы любой список.

Не всякая ошибка является вашим багом

Каждая группа раскладывается на три вида: настоящая ошибка, внешняя служба (SMS, почта) и шум: боты, сканеры, проверки несуществующих адресов. Раскладка сделана явными правилами, а не догадкой, и умолчание тут "настоящая": то, что мы не опознали, не прячется.

Порядок величин: 881 настоящая, 19 шума, 2 внешние.

Оценка, которая говорит, что вперёд

Каждой группе считается серьёзность по тому, сколько раз она всплыла за последние семь дней: сто всплытий и больше дают критическую, от пятнадцати высокую, от пяти среднюю, меньше пяти низкую. Шум остаётся низким всегда; внешняя служба упирается в потолок "средне"; группа, вернувшаяся после закрытия, поднимается на ступень, пока продолжает всплывать. Замолчавшая группа опускается сама: её всплытия выходят из окна, а пересчёт идёт каждую ночь.

Слагаемое "рост частоты" намеренно не введено: у накопленной истории не хватает глубины, а показатель, который нельзя посчитать честно, выглядел бы как измерение.

Порядок величин на 24.10.2026: 1136 низких, 11 средних, 8 высоких, 1 критическая. Так это и должно выглядеть: горят единицы, а не сотня.

Письмо о новой и отдельное письмо о вернувшейся

О новой группе письмо уходит один раз. Если закрытая группа вернулась, уходит другое письмо, которое говорит об этом словами, а не значком: "появилась" и "вернулась" требуют разного, а одинаковая тема научила бы не читать ни ту ни другую.

Текст ошибки и в письме, и на экране проходит маскирование идентификаторов. В сообщении об ошибке лежит то, что ввёл пользователь (номер удостоверения в параметре, телефон из формы), а ушедшее письмо уже не отозвать.

Откуда в коде это пришло

Из стека вызовов достаётся имя класса, в котором ошибка упала. Работает это не всегда: стек приходит не с каждой ошибкой, и в нём не всегда есть наш собственный кадр.

Порядок величин, намеренно не округлённый красиво: 399 групп из 902 с распознанным классом.

Области, чтобы спросить "что у нас сломано в платежах"

Группам можно проставить метку области (платежи, регистрация, админка), и тогда вопрос перестаёт быть "какая ошибка чаще всех" и становится "что не в порядке вот в этой части системы". Сейчас заведено 8 таких меток.

Первый прогон не заваливает письмами обо всём, что было

Когда подключают фид, работающий годами, всё, что в нём есть, для нас "новое", и без отдельного правила первый прогон отправил бы сотни писем разом, а их все удалили бы не читая.

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

Отсюда открывается задача

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

И честно: на живом проекте такая задача заведена одна, а решение записано у нуля групп из 902. Механизм есть, материала в нём пока нет.

Что видит заказчик

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

Частые вопросы

Из каких источников собираются ошибки?
Из Sentry, Rollbar, Bugsnag и Application Insights, из упавших прогонов GitHub Actions и GitLab CI, а также из собственной ленты ошибок системы, без установки агента и без добавления библиотеки в код. Сбор продолжается с того места, где остановился. Все источники идут в один поток, где ошибки группируются по сигнатуре, сортируются и получают оценку серьёзности.
Не завалит ли нас письмами первое подключение старой системы?
Нет. Группы, которые существовали до подключения, тихо отмечаются как известные, и остаётся лишь узкое окно для того, что действительно появилось в это время. Дальше на каждую новую группу уходит одно письмо, а когда закрытая группа возвращается, уходит другое письмо, где это прямо сказано. Текст ошибки маскируется по идентификаторам и в письме, и на экране.
Как определяется серьёзность группы ошибок?
По трём признакам: сколько раз группа появилась за последние семь дней, её вид и возврат после закрытия. Сто появлений и больше дают критическую, от пятнадцати высокую, от пяти среднюю. Шум, например боты и сканеры, всегда остаётся низким. Ошибка внешнего сервиса, например SMS или почты, не поднимается выше средней. Вернувшаяся группа поднимается на ступень, пока продолжает появляться, а замолчавшая опускается сама: пересчёт идёт каждую ночь. Сортировка идёт по явным правилам, и если ничего не совпало, группа по умолчанию считается настоящей ошибкой.
Видит ли заказчик список ошибок?
Нет. Экраны ошибок доступны только исполнителю. До заказчика доходит то, что стало работой: задача, открытая из группы ошибок и помнящая, откуда она взялась, и часы по ней в месячном отчёте. Так заказчик видит, что исправляют и сколько времени это заняло, и не получает сырой список из тысяч событий, часть которых является шумом, а часть вообще к нему не относится.

Хотите посмотреть это на своих данных? Можно начать с пробного периода, без карты.

Начать бесплатно