- 🎯 Popis projektu
- 📂 Obsah repozitáře
- 🛠 Požadavky
- 🚀 Jak sestavit a spustit aplikaci
- 📂 Soubory a konfigurace
- 📋 Přehled příkazů
Tento projekt je jednoduchý analyzátor Nginx logů, který vystavuje Prometheus metriky. Aplikace běží na Java 21 a je možné ji spustit jak lokálně, tak v Docker kontejneru. Metriky jsou dostupné na: http://localhost:9400/metrics
Tento projekt nebyl vytvořen od základu mnou. Výchozí implementace byla poskytnuta jako součást úlohy v rámci výběrového řízení na DevOps roli. Moje práce spočívala v implementaci požadovaných úprav:
- Úprava zpracování metrik – agregace HTTP kódů do skupin 2xx, 3xx, 4xx, 5xx
- Vytvoření Docker image s kompilací a spuštěním aplikace
- Psaní dokumentace a příprava repozitáře pro snadné sestavení a spuštění
java-nginx-analyzer/
├── .dockerignore
├── .gitattributes
├── .gitignore
├── Dockerfile
├── README.md
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
└── src/
└── main/
└── java/
├── Main.java
├── NginxDataReader.java
└── NginxLogEntry.java
Před spuštěním projektu je nutné mít nainstalované:
- Java 21 (např. OpenJDK / Temurin)
- Docker Engine (např. Docker Desktop)
Otevři terminál v kořenovém adresáři projektu a postupuj následovně:
./gradlew build
java -cp "build/libs/*" Main
Pokud je spuštění úspěšné, v terminálu se zobrazí:
Application is running. Press 'e' to stop.
HTTPServer listening on http://localhost:9400/metrics
Linux/macOS:
wget -q -O - http://localhost:9400/metrics | grep nginxlog_status_group_total
Windows (PowerShell):
(Invoke-WebRequest -Uri "http://localhost:9400/metrics" -UseBasicParsing).Content -split "`n" | Where-Object {$_ -match "nginxlog_status_group_total" -and $_ -notmatch "# "}
👉 Alternativně můžeš metriky zobrazit i přímo v prohlížeči: http://localhost:9400/metrics
Aplikaci je možné zabalit do Docker image a spustit v kontejneru.
V hlavním adresáři projektu spusť:
docker build -t java-nginx-analyzer .
Pozn.: Build může pár minut trvat, protože Gradle musí stáhnout závislosti a sestavit projekt.
Po úspěšném buildu spusť kontejner na portu 9400:
docker run -p 9400:9400 java-nginx-analyzer
V terminálu by se mělo zobrazit:
Application is running. Press 'e' to stop.
HTTPServer listening on http://localhost:9400/metrics
Zkontroluj, zda metriky běží:
Linux/macOS:
wget -q -O - http://localhost:9400/metrics | grep nginxlog_status_group_total
Windows (PowerShell):
(Invoke-WebRequest -Uri "http://localhost:9400/metrics" -UseBasicParsing).Content -split "`n" | Where-Object {$_ -match "nginxlog_status_group_total" -and $_ -notmatch "# "}
👉 Alternativně můžeš metriky zobrazit i přímo v prohlížeči: http://localhost:9400/metrics
Obsahuje instrukce pro sestavení Docker image:
- Použití Eclipse Temurin JDK 21
- Kopírování zdrojového kódu
- Sestavení aplikace pomocí Gradle
- Spuštění aplikace
Aby se minimalizovala velikost image, ignorují se:
.git # Nebude kopírován Git repozitář
build/ # Nebude kopírována složka se zkompilovanými soubory
.gradle/ # Nebude kopírována cache Gradlu
.DS_Store # Skryté soubory od Finderu (MacOS) nebudou kopírovány
- Aplikace je distribuována jako Fat JAR, tzn. všechny závislosti jsou zabaleny do jednoho .jar souboru
- Pro sestavení tohoto Fat JAR souboru se používá Shadow plugin
- Konfigurace Main-Class atributu v manifestu umožňuje spustit aplikaci jednoduše pomocí
java -jar
- Výsledný soubor se nachází v
build/libs/java-nginx-analyzer-1.0-SNAPSHOT.jar
- Prometheus Metrics – knihovny pro sběr metrik
- SLF4J + Log4J – logging frameworky
- JUnit + Mockito – testovací závislosti
Akce | Příkaz |
---|---|
Sestavení projektu | ./gradlew build |
Spuštění lokálně | java -cp "build/libs/*" Main |
Build Docker image | docker build -t java-nginx-analyzer . |
Spuštění v Dockeru | docker run -p 9400:9400 java-nginx-analyzer |
Ověření metrik (Linux/macOS) | wget -q -O - http://localhost:9400/metrics | grep nginxlog_status_group_total |
Ověření metrik (Windows) | (Invoke-WebRequest -Uri "http://localhost:9400/metrics" -UseBasicParsing).Content -split "`n" | Where-Object {$_ -match "nginxlog_status_group_total" -and $_ -notmatch "# "} |