Лог-файлы являются важной частью работы любого сервера, так как они содержат информацию о том, какие запросы были отправлены на сервер, какие ошибки возникли и какие действия были выполнены.
Однако, обрабатывать и анализировать эти логи вручную может быть очень трудоемким процессом. Для решения этой проблемы напишем программу-анализатор логов.
На вход программе через аргументы командной строки задаётся:
- путь к одному или нескольким 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