Модуль

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

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

Что на этой странице
  1. Собирается, не трогая код заказчика
  2. Одна подпись, одна группа
  3. Не всякая ошибка является вашим багом
  4. Оценка, которая говорит, что вперёд
  5. Письмо о новой и отдельное письмо о вернувшейся
  6. Откуда в коде это пришло
  7. Области, чтобы спросить «что у нас сломано в платежах»
  8. Первый прогон не заваливает письмами обо всём, что было
  9. Отсюда открывается задача
  10. Что видит заказчик

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

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

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

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

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

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

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

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

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

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

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

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

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

Порядок величин: 823 низких, 50 средних, 14 высоких, 14 критических. Так это и должно выглядеть: горит десяток, а не сотня.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ничего. Экраны ошибок принадлежат исполнителю. До заказчика доходит то, что стало задачей или отчётом, а не сам список.

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

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