# Log Analyzer Backend + Frontend CPU-LLM-gestütztes Dashboard zur Auswertung von Firewall- und Proxy-Logs. Parst Dateien, zeigt übersichtliche Statistiken (Top-Hits, Quellen, Ziele, Ports, URLs, Zeitverlauf) und nutzt ein lokales LLM (via Ollama) für die Analyse. ## Features - **Log-Parsing:** Unterstützt iptables, pfSense, Cisco ASA, Squid, nginx - **Statistiken:** Top Quellen, Ziele, Ports, URLs, Actions, Timeline - **LLM-Analyse:** Zusammenfassung und Anomalie-Erkennung via lokalem Ollama-Modell - **REST-API:** FastAPI mit automatischer OpenAPI-Doku unter `/docs` - **Web-Dashboard:** Vue 3 + Chart.js SPA, erreichbar auf Port 80 - **Docker-Compose:** Ein Befehl zum Starten von Backend + Frontend ## Architektur ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ Browser │──────▶│ Frontend:80 │──────▶│ FastAPI Backend:8000 │ └──────────────┘ │ (nginx + │ │ - SQLite (Volumen) │ │ Vue SPA) │ │ - Log-Parser │ └──────────────┘ │ - Ollama-Client │ └───────────────────────┘ │ ▼ ┌──────────────────────┐ │ Ollama (CPU/Host) │ │ http://host.docker │ │ .internal:11434│ └──────────────────────┘ ``` ## Voraussetzungen - Docker + Docker Compose - Laufende Ollama-Instanz auf dem Host (Port 11434) mit Modell `llava:7b` - Ports: 80 (Dashboard), 11434 (Ollama auf Host) ## Installation & Start ```bash # Repository klonen git clone https://gitea.die-heimatlosen.eu/arch_agent/log-analyzer-backend.git cd log-analyzer-backend # Starten docker-compose up -d --build ``` Das Dashboard ist dann unter `http://localhost` erreichbar. Die API-Doku unter `http://localhost/docs`. ## Nutzung ### Dashboard 1. Browser öffnen: `http://localhost` 2. Log-Datei über das Upload-Feld hochladen 3. Statistiken und Charts werden automatisch geladen (alle 15 Sek. refreshed) 4. LLM-Analyse über den Bereich unten starten ### API (cURL) #### Log-Datei hochladen ```bash curl -X POST http://localhost/api/upload \ -H "Content-Type: multipart/form-data" \ -F "file=@/var/log/iptables.log" ``` #### Statistiken abrufen ```bash curl "http://localhost/api/stats?limit=20" ``` #### LLM-Analyse starten ```bash curl -X POST "http://localhost/api/analyze?log_type=firewall&limit=100" ``` #### Gesundheitscheck ```bash curl http://localhost/health ``` ## API-Endpunkte | Methode | Endpunkt | Beschreibung | |---------|----------|--------------| | POST | `/api/upload` | Log-Datei hochladen & parsen | | GET | `/api/stats` | Übersicht aller Statistiken | | GET | `/api/stats/sources` | Top Quellen | | GET | `/api/stats/destinations` | Top Ziele | | GET | `/api/stats/ports` | Top Ports | | POST | `/api/analyze` | LLM-Analyse der Logs | | GET | `/health` | Healthcheck | | GET | `/docs` | Swagger UI (FastAPI) | ## Umgebungsvariablen | Variable | Standard | Beschreibung | |----------|----------|--------------| | `DATABASE_URL` | `sqlite+aiosqlite:///data/logs.db` | SQLite Datenbankpfad | | `OLLAMA_URL` | `http://host.docker.internal:11434` | Ollama API URL | | `OLLAMA_MODEL` | `llava:7b` | LLM Modellname | ## Unterstützte Log-Formate ### Firewall - **iptables:** Kernel-Logzeilen mit `SRC=... DST=... PROTO=... DPT=...` - **pfSense:** `filterlog` CSV-ähnliche Zeilen - **Cisco ASA:** `%ASA-... Built/Teardown/Denied ...` ### Proxy - **Squid:** Native Squid-Logformat (Timestamp, elapsed, client, code, status, size, method, URL) - **nginx:** Standard access_log (`$remote_addr - [$time_local] "$request" $status $body_bytes_sent`) ## Hinweise - Das Backend erwartet Ollama auf dem **Host** (nicht im Container). Für Linux ggf. `extra_hosts: ["host.docker.internal:host-gateway"]` nutzen. - Große Logdateien werden in Batches von 500 Zeilen verarbeitet. - Die SQLite-Datenbank wird im Docker-Volumen `logdata` persistiert. - Das Frontend aktualisiert die Statistiken automatisch alle 15 Sekunden. ## Lizenz MIT