Skip to content

stacenko-developer/log-analyzer

Repository files navigation

tbank-logo.svg

Академия бэкенда от Т-Банка 2024, 1 семестр, Проект 3: Анализатор логов

Описание

Лог-файлы являются важной частью работы любого сервера, так как они содержат информацию о том, какие запросы были отправлены на сервер, какие ошибки возникли и какие действия были выполнены.

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

На вход программе через аргументы командной строки задаётся:

  • путь к одному или нескольким NGINX лог-файлам в виде локального шаблона или URL
  • необязательные временные параметры from и to в формате ISO8601
  • необязательный параметр формата вывода результата: markdown или adoc

Примеры вызова программы:

analyzer --path logs/2024* --from 2024-08-31 --format markdown

analyzer --path https://raw.githubusercontent.com/elastic/examples/master/Common%20Data%20Formats/nginx_logs/nginx_logs --format adoc

analyzer --path logs/**/2024-08-31.txt

analyzer --path logs/2024* --filter-field method --filter-value GET

Программа должна выполнять следующие задачи:

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

Функциональные требования

  • Программа должна принимать на вход путь к лог-файлам, который может быть шаблоном для локальных файлов или URL.
  • Программа должна поддерживать опциональные параметры: from и to для анализа записей в заданном временном диапазоне; выходной формат данных в виде markdown или adoc документа
  • Подсчет общего количества запросов
  • Опредение наиболее часто запрашиваемых ресурсов
  • Определение наиболее часто встречающихся кодов ответа
  • Определение наиболее часто встречающихся адресов
  • Определение наиболее часто встречающихся методов
  • Рассчет среднего размер ответа сервера
  • Рассчет 95% перцентиля размера ответа сервера
  • Добавить фильтрацию по значению поля

Нефункциональные требования

  • Программа должна обрабатывать лог-файлы эффективно, не загружая весь файл в память.
  • Программа должна иметь четкую и понятную логику обработки ошибок.
  • Результат работы программы должен быть легко интерпретируемым человеком.

Описание входных и выходных данных

Ввод

  • Путь к лог-файлам: локальный путь (с поддержкой glob) или URL
  • Временные параметры: from и to в формате ISO8601 (опционально).
  • Формат вывода: markdown или adoc (опционально).

Вывод

  • Текстовый отчёт в выбранном формате с анализом логов.

Пример вывода

#### Общая информация
|            Метрика             |            Значение            |
|:------------------------------:|:------------------------------:|
|             Файлы              | [src/main/resources/log1.txt]  |
|         Начальная дата         |               -                |
|         Конечная дата          |               -                |
|      Количество запросов       |               50               |
|     Средний размер ответа      |            249.88b             |
|       95p размера ответа       |              951b              |

#### Запрашиваемые ресурсы
|             Ресурс             |           Количество           |
|:------------------------------:|:------------------------------:|
|      /downloads/product_1      |               32               |
|      /downloads/product_2      |               18               |

#### Коды ответа
|              Код               |              Имя               |           Количество           |
|:------------------------------:|:------------------------------:|:------------------------------:|
|              304               |          NOT_MODIFIED          |               34               |
|              404               |           NOT_FOUND            |               9                |
|              200               |               OK               |               7                |

#### IP адреса
|             Адрес              |           Количество           |
|:------------------------------:|:------------------------------:|
|          80.91.33.133          |               10               |
|          93.180.71.3           |               7                |
|          217.168.17.5          |               6                |
|        173.203.139.108         |               4                |
|         91.234.194.89          |               3                |

#### HTTP методы
|             Метод              |           Количество           |
|:------------------------------:|:------------------------------:|
|              GET               |               49               |
|              HEAD              |               1                |

Начало работы

Для того чтобы собрать проект, и проверить, что все работает корректно, можно запустить из модального окна IDEA Run Anything команду:

mvn clean verify

Альтернативно можно в терминале из корня проекта выполнить следующие команды.

Для Unix (Linux, macOS, Cygwin, WSL):

./mvnw clean verify

Для Windows:

mvnw.cmd clean verify

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

Если вы в процессе сборки получили ошибку:

Rule 0: org.apache.maven.enforcer.rules.version.RequireJavaVersion failed with message:
JDK version must be at least 22

Значит, версия вашего JDK ниже 22.

Если же получили ошибку:

Rule 1: org.apache.maven.enforcer.rules.version.RequireMavenVersion failed with message:
Maven version should, at least, be 3.8.8

Значит, у вас используется версия maven ниже 3.8.8. Такого не должно произойти, если вы запускаете сборку из IDEA или через mvnw-скрипты.

Далее будут перечислены другие полезные команды maven.

Запуск только компиляции основных классов:

mvn compile

Запуск тестов:

mvn test

Запуск линтеров:

mvn checkstyle:check modernizer:modernizer spotbugs:check pmd:check pmd:cpd-check

Releases

No releases published

Packages

No packages published

Languages