Показать уникальные записи журнала

Вопрос или проблема

У меня есть список ошибок из лога, и я хотел бы сократить его до списка уникальных ошибок. Есть ли софт, который может это сделать?

В логах приложений одно и то же сообщение часто выводится много раз, так как это событие происходит много раз или эта часть кода выполняется многократно. У утверждений будут разные значения времени, имена потоков и т.д. Я хотел бы получить по одному экземпляру каждой строки из лога. Строки не имеют одинакового формата, поэтому создание правил для сопоставления экземпляров одного и того же утверждения вручную займет много времени. Программное обеспечение должно определить, какие строки являются одним и тем же утверждением, и удалить дубликаты.

Я предпочел бы программное обеспечение с открытым исходным кодом для Linux или Windows, но мне было бы интересно узнать о любом программном обеспечении. Возможно, я буду готов потратить до 1000 долларов в будущем, и мне интересно узнать, что доступно за эту сумму.

Обычно дата, время, поток и т.д. находятся в начале строки лога. Часто это фиксированное количество символов или они разделены каким-то символом, например, запятой или двоеточием.

Просто возьмите свой лог-файл и используйте комбинацию cut sort и uniq. Например, вот строка из лога веб-сервера Apache2

172.16.130.165 - - [10/Jun/2019:08:13:00 -0400] "GET /favicon.ico HTTP/1.1" 200 324 "-" "Safari/14607.2.6.1.1 CFNetwork/978.0.7 Darwin/18.6.0 (x86_64)"
66.249.88.24 - - [10/Jun/2019:08:41:19 -0400] "GET /merges/ HTTP/1.1" 200 3930 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon"
66.249.88.28 - - [10/Jun/2019:08:41:20 -0400] "GET /favicon.ico HTTP/1.1" 200 3583 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon"

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

cat /var/log/apache2/myserver-access.log | cut -f 6- -d " " | sort | uniq -c

Не совсем то же самое, но Flowgger выполняет подобную задачу. Он печатает одно сообщение лога для полного пути.

FLOW [2025-03-10T03:51:17.361Z] 1741578677360-z0ivkoo [Binary Search] 0.0.1 1:0>2:0>4:10>9:01:0>2:0>4:8>6:2 0 1   

Однако для работы с Flowgger вам необходимо заранее определить поток вашего кода.

Отказ от ответственности: я автор Flowgger.

Ответ или решение

Уникальные отчетные сообщения в журналах логов и способов их выявления

Теория

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

Пример

Рассмотрим пример на основе журнала веб-сервера Apache. Типичная строка может выглядеть следующим образом:

172.16.130.165 - - [10/Jun/2019:08:13:00 -0400] "GET /favicon.ico HTTP/1.1" 200 324 "-" "Safari/14607.2.6.1.1 CFNetwork/978.0.7 Darwin/18.6.0 (x86_64)"

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

На операционной системе Linux можно использовать комбинацию утилит cut, sort и uniq, чтобы добиться этого результата:

cat /var/log/apache2/myserver-access.log | cut -f 6- -d " " | sort | uniq -c

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

Применение

Для более сложных случаев существует специализированное программное обеспечение. Одним из примеров является Flowgger. Это программное обеспечение предназначено для обработки и нормализации логов, чтобы обеспечить единое появление уникальных записей. Однако, чтобы оптимально использовать Flowgger, требуется заранее определить поток выполнения вашего кода, что может быть сложным процессом. Этот подход подходит для крупных систем, где автоматическая обработка журналов логов способна сэкономить значительное время и ресурсы.

Пользователи, предпочитающие операционные системы Windows, могут обратить внимание на такие инструменты, как Elastic Stack (ранее известный как ELK Stack), состоящий из ElasticSearch, Logstash и Kibana. Эта система предоставляет возможность не только обработки и нормализации строк с журналами, но и их визуализации.

Еще одним экспериментальным решением может стать использование языков программирования для создания кастомизированных скриптов для анализа и сортировки записей из журналов. Языки Python или Perl, с их мощными библиотеками для работы с текстом и файлами, идеально подходят для написания таких решений.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...