Zidium

Разработчикам важно знать, какие ошибки случаются в их приложениях. Однако хранить информацию о каждом случае ошибки неэффективно, представьте, что будет, если в каком-нибудь цикле появилась ошибка, которая происходит 1000 раз в минуту.

Решением является объединение всех случаев ошибки в одно событие вида:
"Ошибка {e} случилась в момент времени {t1}, длилась до времени {t2} и случилась {n} раз."

Событие — это информация о том, когда ошибка началась, когда закончилась и сколько раз случилась.

Сообщение о событии включает:

  • Тип события — любая строка, например: "Ошибка 2379 в методе StartApplication()"
  • Сообщение — любая строка, например: "Не удалось найти файл super.dll"
  • Важность — alarm, warning, success или unknown
  • Время начала — например, 2016.11.23 18:10:00
  • Время завершения — например, 2016.11.23 18:20:00
  • Интервал склейки — например, 1 час
  • Интервал актуальности — например, 5 минут
  • Количество случаев — например, 100
  • Дополнительные свойста (ключ-значение) — например, {user: "admin"}

Приложения передают информацию об ошибках через API или веб-сервис.

Интервал актуальности влияет на время, в течение которого данное событие будет влиять на статус компонента.

События имеют важность:

alarm событие возникает, когда компонент неисправен (ошибка)
например, ошибка 154646 "Не удалось установить соединение с БД"
warning явного дефекта нет, но необходимо обратить внимание
например, ошибка 404 "Не удалось найти страницу"
success событие сообщает, что выполнена какая то полезная работа
например, событие "старт приложения"
unknown событие не влияет на статус компонента

Склейка событий

Допустим, в приложении произошло два сбоя. Каждый сбой длился 1 час, в течение которого происходила одна и таже ошибка 100 000 раз. Первый сбой произошел в 10:00, а второй в 14:00.

Для удобства система мониторинга склеивает 200 000 случаев ошибки в 2 экземпляра события. Чтобы понимать, какие случаи можно склеивать в один экземпляр события, а для каких создавать новый, используется интервал склейки. Если между двумя последними случами события проходит времени больше, чем интервал склейки, то создается новый экземпляр события, иначе продляется последний экземпляр события.

Условия склейки событий:

  • События имеют одинаковый тип;
  • Интервал времени между событиями меньше или равно интервалу склейки;
  • События имеют одинаковый ключ склейки.

Например, приложение отправляет события с интервалом склейки 1 час, интервал актуальности 30 минут.

  • В 10:00 произошел 1-ый случай события "Ошибка 1" , создался экземпляр события (событие 1);
  • В 12:00 произошел 2-ой случай события "Ошибка 1" , создался новый экземпляр события (событие 2), т.к. прошло 2 часа, а интервал кслейки 1 час;
  • В 12:30, 13:00 и 13:30 "Ошибка 1" повторилась, но все случаи этой ошибки склеились (событие 2), т.к. расстояние между ними равно интервалу склейки;
  • В 13:00 произошел 1-ый случай события "Ошибка 2" , создался экземпляр события (событие 3);
  • В 13:30, 14:00 и 14:30 "Ошибка 2" повторилась, но все случаи этой ошибки склеились (событие 3), т.к. расстояние между ними равно интервалу склейки.

Обратите внимание, что событие 1 случилось один раз, но из-за того, что время актуальности события 30 минут, компонент будет в статусе alarm 30 минут.