An open API service indexing awesome lists of open source software.

https://github.com/stacenko-developer/log-analyzer


https://github.com/stacenko-developer/log-analyzer

Last synced: 11 months ago
JSON representation

Awesome Lists containing this project

README

          

![tbank-logo.svg](img/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](https://www.jetbrains.com/help/idea/running-anything.html)
команду:

```shell
mvn clean verify
```

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

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

```shell
./mvnw clean verify
```

Для Windows:

```shell
mvnw.cmd clean verify
```

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

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

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

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

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

```shell
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.

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

```shell
mvn compile
```

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

```shell
mvn test
```

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

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