Анализатор и отчётный сервис для логов Nginx:
– сбор метрик и выявление аномалий,
– детекция подозрительных IP,
– генерация отчётов в формате PDF и Markdown,
– визуализация временных рядов.
- Описание
- Ключевые возможности
- Архитектура
- Технологии
- Установка и запуск
- Конфигурация
- REST API
- Примеры использования
- Тестирование
- Contributing
- Лицензия
Проект реализует конвейер обработки логов Nginx:
- Чтение
– локального файла или из Kafka (batch/stream). - Парсинг
– получение домена, HTTP-метода, URL, кода ответа, размера и времени. - Агрегация
– разбиение на окна фиксированной длительности, вычисление метрик. - Аномалия-детект
– Z-score и EWMA-анализ по размеру и количеству запросов. - Подозрительные IP
– выявление IP с непривычно высоким трафиком. - Отчёты
– REST-сервис: JSON, PDF-генератор, Markdown-финал. - Визуализация
– временные ряды запросов и error-rate в виде PNG-графика.
- Поддержка batch- и streaming-режимов чтения логов
- Парсинг формата Nginx Combined Log
- Расчёт:
- общего количества запросов
- среднего размера ответа
- 95-го перцентиля
- Две методики детекции аномалий: Z-score и EWMA
- Детекция подозрительных IP по частоте
- Генерация:
- JSON результата
- PDF отчёта с таблицей и графиком
- Markdown отчёта
- Лёгкий Spring Boot API с тестовым ping-endpoint
┌────────────┐ ┌───────────┐ ┌───────────────┐
│ Reader │─────▶│ Parser │────▶│ Aggregator │
│(File/Kafka)│ │ (NginxLog)│ │ (Metrics) │
└────────────┘ └───────────┘ └───────────────┘
│ │
▼ ▼
┌───────────┐ ┌───────────────┐ ┌───────────┐
│ Anomaly │◀─────│ AnomalySvc │ │ Suspicious│
│ Detectors │ │ (ZScore+EWMA) │ │ IpDetector│
└───────────┘ └───────────────┘ └───────────┘
│ │
└──────────┬──────────┘
▼
┌────────────┐
│ Report │
│ Generator │
│ PDF/MD/JSON│
└────────────┘
- Java 12
- Spring Boot 3
- Apache Kafka (Reader)
- XChart (PNG-график)
- OpenPDF (iText 2.1.7 API)
- JUnit 5 + AssertJ + MockMVC
- Maven
- Клонировать репозиторий
git clone https://github.com/Therad445/NginxLogAnalyzerJava.git cd nginx-log-analyzer
- Собрать проект
mvn clean package
- Запустить приложение
или
java -jar target/nginx-log-analyzer-1.0.0.jar
mvn spring-boot:run
- По умолчанию REST-сервис слушает порт 8080
В application.yml
(или через API-конфиг new Config()
) можно задать:
app:
source: file # или kafka
streaming-mode: false
path: /path/to/log
format: json # json | markdown
kafka:
bootstrap-servers: 127.0.0.1:9092
group-id: gid
topic: nginx-logs
aggregation:
window-seconds: 60
chart-windows: 5
anomaly:
z-threshold: 3.0
ewma:
alpha: 0.3
k: 3.0
suspicious:
threshold-per-window: 10
Проверка доступности.
Ответ:
NginxLogAnalyzer API работает
- Параметр:
file
– multipart-upload лог-файла - Возвращает:
200 OK
+ JSON →LogResult
{
"totalRequests": 1234,
"averageResponseSize": 456.78,
"resourceCounts": { "/": 400, "/api": 300, … },
"statusCodeCounts": { "200": 1100, "404": 100, … },
"percentile": 1024.0,
"anomalies": { "reqsPerWindow": [ … ], "errorRate": [ … ] },
"suspiciousIps": [ "1.2.3.4", "5.6.7.8" ]
}
- Параметр:
file
- Возвращает:
application/pdf
+ бинарный PDF отчёт - Заголовки:
Content-Disposition: attachment; filename="report.pdf"
- Параметр:
file
- Возвращает:
text/markdown
+ Markdown-отчёт
# JSON-отчёт в терминал
curl -F file=@path/to/example.log http://localhost:8080/analyze
# Сохранить PDF-отчёт
curl -F file=@path/to/example.log http://localhost:8080/analyze/pdf > report.pdf
# Сохранить Markdown-отчёт
curl -F file=@path/to/example.log http://localhost:8080/analyze/markdown > report.md
mvn test
MIT License
См. файл LICENSE.