Как Мы Адаптировали Стек Elk Для Мониторинга И Анализа Ошибок В Java И .Net-Проектах

Больной обращается к врачу с жалобами на боли в животе.

«Срочно на операцию! - отвечает врач.

— Сейчас мы тебя разрежем, обкопаем и попытаемся зашить, как было.

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

А потом мы перешли на ELK. Теперь мы отслеживаем ошибки в моменте, не замедляя работу сервисов.

В этой статье мы расскажем, как мы адаптируем и используем стек ELK в проектах Java и .

Net и находим ошибки онлайн, не открывая и не используя малоинвазивные методы.

Да, мы разобрались и поняли, что не имеет особого значения, сделало ли это решение Microsoft или Open Source — все можно одинаково настроить под свои нужды.



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах



О каких проектах речь?



Жестко и осторожно: реалии Java

Наш Java-продукт — это федеральная система продажи билетов.

Он должен работать бесперебойно, зависания и зависания недопустимы.

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

Здесь ELK работает как онлайн-мониторинг и инструмент для нашей службы поддержки.

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

Ретроспективный анализ ошибок в .

Net-проектах

Проекты .

Net — это в основном услуги по продажам и поддержке клиентов.

Им пользуются более 20 тысяч человек.

Тоже довольно много, но нагрузки не такие большие, как в Java. Мы протоколируем ошибки и информацию, показывающую динамику бизнес-операций.

Например, сколько пользователей зарегистрировалось на сайте.

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

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



Как мы работаем с ELK



Ведение журнала: Serilog + ELK

В проектах .

Net мы также в основном используем Serilog, поскольку он имеет широкий спектр возможностей потока данных.

Здесь нет смысла использовать Beats или Logstash, так как Serilog умеет логировать структурировано: такой-то пользователь зашёл в систему в такое-то время.

Также можно настроить значения нужных фрагментов информации: API, время и т. д. И когда он начнет писать логи в Elastic, это будет не строка, а свойство объекта, по которому можно искать.

То есть мы обходим Filebeat и Logstash, исключая двойную работу.



Прочный режим

Мы используем режим Serilog, называемый режимом Durable — он гарантирует доставку сообщений, даже если Elastic не работает в течение некоторого времени.

Он действует примерно так же, как Filebeat плюс Logstash — сначала складывает всё в файл, потом пытается срочно доставить в Elastic, если это не получается, то Serilog периодически пытается, пока Elastic не поднимется.

Вы можете настроить, как часто он будет связываться с Elastic. Здесь Вы можете прочитать инструкцию по настройке.



Контейнеры для бревен

Пишем много логов по Java-проектам — до 5 ГБ в день.

Мы разрезаем эти файлы на кусочки по 5 МБ, чтобы они занимали меньше места и их было легче хранить.

ELK хранится и поднимается в Docker-контейнерах на наших компьютерах — получается виртуальная машина, просто более лёгкая, которую кто-то уже настроил до вас.

На .

NET-проектах логи не такие большие, как на Java-проектах, поэтому там мы разбиваем файлы не по размеру, а по дням.

А потом анализируем логи, выделяя типы ошибок.



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах



Забфикс мониторинг

Каждая запись имеет Trace ID, а браузер измеряет время начала и окончания операции — мы логируем эти данные на сервере, а затем мониторим их через Zabbix.

Кибана/ Графана

Мы используем Kibana для ежедневного мониторинга ошибок.

В Кибане можно искать по логам.

Мы используем эту функцию на производственных и тестовых серверах.

Ещё у нас есть Grafana — там лучше визуализация, все наши проекты показаны на одном дашборде.

Здесь мы видим все данные.

Все ошибки отмечены красным — это повод залезть в Кибану и посмотреть детали.

Мы видим, где ошибка, ее место в коде, когда она произошла и условия окружающей среды.

У нас есть один идентификатор, который связывает все системы вместе и позволяет отследить полный путь ошибки.

Если ошибка неизвестна, начинаем смотреть внимательнее.

Например, недавно мы выпустили на продажу один бизнес-процесс.

Тестирование на стороне заказчика прошло хорошо, но мы посмотрели логи и увидели, что произошла ошибка.

Мы сразу это исправили, и никто ничего не заметил.

Например, на этом скриншоте показано количество регистраций на одном проекте:

Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах



Анализ ошибок

Ежедневно мы получаем все ошибки от ELK, выявляем среди них новые, классифицируем их и при этом даем человекочитаемое имя.

Мы отслеживаем динамику уже классифицированных ошибок, ловим всплески и разбираемся в причинах.

Инженер технической поддержки запускает задачи по устранению причин.

За день нужно анализировать тысячи и десятки тысяч строк в логах, а на Java-проектах и того больше.

Множество ошибок повторяются каждую минуту.

Мы начали, как и многие другие, с визуального сканирования всех логов.

Но мы быстро поняли, что с нашими объемами так жить нельзя.

И настраиваем таблицу Excel с макросами, которые могут брать ежедневные данные из Kibana, выбирать из них ошибки и распределять их по существующим категориям.

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

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

Что позволяет делать файл:

  • Получайте необходимые сообщения от Elasticsearch в одну таблицу по нужным проектам за необходимый период. Для этого укажите исходные данные в настройках.



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах

  • Присвойте ошибкам «имена».

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

    Тогда этим именем помечаются все ошибки, соответствующие шаблону в исходной таблице.



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах

  • Также назначаются категории ОК и ОШИБКА, указывающие, стоит ли на сообщение обращать внимание или нет. Вы можете фильтровать по этим типам.

    OTHER – показывает общее количество сообщений по проекту (не только об ошибках, но и просто информационных).

    А номера задач присваиваются в TFS, если они уже созданы.



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах

  • Для более удобного анализа построен график с возможностью фильтрации.



Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах

Давайте посмотрим на примере одного из проектов, недавние ошибки за последние пару дней:

Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах

Что мы видим: 1) ошибки вверху, которым присвоены номера задач, не критичны, ждут решения от разработчиков, им присвоены номера задач от TFS. 2) ошибка «Служба ADMS недоступна» возникала 388 раз за сутки — услуга была недоступна в течение нескольких часов, что мы и увидели, обратившись за разъяснениями в Kibana.

Как мы адаптировали стек ELK для мониторинга и анализа ошибок в Java и .
</p><p>
NET-проектах

3) появился новый тип ошибки "Не удалось подключиться к.

" - он связан с предыдущим, просто был записан еще в одном месте.

Мы собираемся «расследовать» эти два типа ошибок, чтобы выяснить причины, вероятность их повторения и способы их предотвращения в будущем.

Им будет присвоено общее обозначение, чтобы эти ошибки «свернулись» в одну строку.



Что мы планируем улучшить

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

Он будет работать быстрее, чем файл Excel, который постоянно растет. Эта система позволит построить график с разной дискретностью, а не только по дням.

Оператор по-прежнему будет анализировать новые ошибки, называть их и реагировать на непредвиденные ситуации.

P.S. Теперь, благодаря ЭЛК, врач сам замечает, что пациент болен, может быстро поставить диагноз и вручить полезную таблетку, а операцию оставить для самых крайних случаев.

Теги: #Системное администрирование #мониторинг #Grafana #elasticsearch #elk #kibana #логи #logstash

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.