Skripte nach bin/ und lib/ umstrukturiert + WSL-Log-Analyse

Alle .bat-Skripte liegen jetzt in bin/, alle .py in lib/, .env(.example)
in bin/. setenv.bat setzt IWZ_* (inkl. IWZ_ENV) und PYTHONPATH; die
Launcher rufen setenv, aktivieren die .venv falls vorhanden und starten
das zugehoerige lib/-Skript. Die Python-Skripte lesen die .env ueber
IWZ_ENV (Fallback bin/.env).

Neu: Nutzungsanalyse per GoAccess (analyze.py/.bat) - laedt die
IONOS-Access-Logs per SFTP (paramiko) und erzeugt einen HTML-Report.
GoAccess laeuft ueber WSL (GOACCESS_MODE=wsl, Pfad-Uebersetzung nach
/mnt/c). install_py.bat prueft WSL+GoAccess und zeigt sonst den
Installationsweg. Doku in doc/analyse.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
This commit is contained in:
Michael Stangl
2026-08-28 16:44:56 +02:00
parent 025e68b3b9
commit 2379f4ac9f
21 changed files with 760 additions and 59 deletions
+146
View File
@@ -0,0 +1,146 @@
# Nutzungsanalyse der Website (Server-Logs + GoAccess)
Die neue Hugo-Seite verzichtet bewusst auf JavaScript-Tracking (kein Google
Analytics, keine Cookies, kein Consent-Banner nötig). Stattdessen werten wir
die **Apache-Access-Logs** aus, die IONOS ohnehin auf dem Server schreibt.
Ablauf des Skripts `analyze.py`:
1. Verbindet sich per **SFTP** mit IONOS und lädt alle `access.log*`-Dateien
aus dem `/logs`-Ordner nach `./logs/` herunter.
2. Entpackt die rotierten `.gz`-Logs und fügt alles zu einer Datei zusammen.
3. Lässt **GoAccess** darüberlaufen und erzeugt einen HTML-Report unter
`./results/report_JJJJ-MM-TT.html`, der automatisch im Browser geöffnet wird.
`logs/` und `results/` stehen in `.gitignore` und werden nicht eingecheckt.
---
## Einmalige Einrichtung
### 1. Python-Abhängigkeit (paramiko)
```powershell
pip install -r requirements.txt
```
### 2. GoAccess (über WSL – empfohlen)
GoAccess wird offiziell nur für Linux/macOS gebaut und ist in keinem
Windows-Paketmanager verfügbar. Unter Windows ist der zuverlässigste Weg die
**WSL** (Windows Subsystem for Linux). `bin\install_py.bat` prüft automatisch,
ob WSL und GoAccess vorhanden sind, und zeigt sonst die passenden Befehle.
**WSL installieren** (falls noch nicht vorhanden, PowerShell als Administrator):
```powershell
wsl --install
```
Danach Windows neu starten und die Ubuntu-Ersteinrichtung (Benutzer/Passwort)
durchlaufen.
**GoAccess in der WSL installieren:**
```powershell
wsl -e sudo apt update
wsl -e sudo apt install -y goaccess
```
In der `.env` steht dafür (Standard):
```text
GOACCESS_MODE=wsl
```
Das Skript ruft GoAccess dann per `wsl goaccess ...` auf und übersetzt die
Windows-Pfade automatisch nach `/mnt/c/...`.
> **Alternative – nativer Windows-Build:** Falls du kein WSL nutzen willst,
> lade den Cygwin-Build von <https://goaccess.io/download>, entpacke ihn (z. B.
> nach `C:\tools\goaccess\`) und setze in der `.env`:
>
> ```text
> GOACCESS_MODE=exe
> GOACCESS_EXE=C:\tools\goaccess\goaccess.exe
> ```
### 3. IONOS-SFTP-Zugang in `.env` eintragen
Die Zugangsdaten stehen im IONOS-Kundenbereich unter **Hosting → SFTP/SSH**.
Es sind dieselben, mit denen der `/logs`-Ordner erreichbar ist.
```text
IONOS_SFTP_HOST=<z.B. home123456789.1and1-data.host oder access-5000000000.webspace-host.com>
IONOS_SFTP_PORT=22
IONOS_SFTP_USER=<SFTP-Benutzer>
IONOS_SFTP_PASSWORD=<SFTP-Passwort>
IONOS_LOGS_DIR=/logs
```
> Die `.env` steht in `.gitignore` und wird **nicht** eingecheckt.
---
## Nutzung
```powershell
# Logs neu laden, Report bauen und im Browser öffnen:
analyze.bat
# oder:
python analyze.py
# Nur neu auswerten (ohne erneuten Download der schon geladenen Logs):
python analyze.py --no-download
```
Beim wiederholten Lauf werden bereits geladene, rotierte Logs übersprungen
(gleiche Dateigröße) – nur das aktuell wachsende Log wird neu geholt.
---
## Was im Report steht
GoAccess zeigt u. a.:
- **Eindeutige Besucher** und Seitenaufrufe pro Tag
- **Meistbesuchte Seiten** (welche Ferienwohnung interessiert am meisten?)
- **Referrer** (woher kommen die Besucher – Google, direkte Eingabe, Links)
- **Länder / Sprachen**, Browser, Betriebssysteme, Geräte
- **HTTP-Statuscodes** (404-Fehler = tote Links finden)
- **Traffic-Volumen**
Aufrufe von Suchmaschinen-Bots werden herausgefiltert (`--ignore-crawlers`),
IP-Adressen im Report anonymisiert (`--anonymize-ip`).
---
## DSGVO-Hinweis
Diese Auswertung passiert **nur lokal auf deinem Rechner** aus den ohnehin
anfallenden Server-Logs. Es wird nichts an Dritte übertragen und kein
Tracking-Code beim Besucher ausgeführt. Server-Logs mit IP-Adressen dürfen zu
Sicherheits-/Betriebszwecken vorübergehend gespeichert werden; im GoAccess-
Report sind die IPs zusätzlich anonymisiert. Ein Cookie-Consent-Banner ist für
diese Art der Auswertung **nicht** erforderlich.
---
## Fehlerbehebung
**Report bleibt leer / „No data".**
Dann passt das Log-Format nicht. IONOS nutzt meist das *Combined Log Format*
(`LOG_FORMAT=COMBINED`). Wirf einen Blick in die erste Zeile von
`logs/access.log.current`:
- Beginnt sie mit einer IP und enthält am Ende `"...Referrer" "...User-Agent"`
→ `COMBINED` ist korrekt.
- Fehlen Referrer/User-Agent → `LOG_FORMAT=COMMON`.
- Steht der Vhost-Name vor der IP → `LOG_FORMAT=VCOMBINED`.
Alternativ ein eigenes Format als GoAccess-`--log-format`-String in `.env`
hinterlegen (siehe <https://goaccess.io/man#custom-log>).
**`paramiko`-Authentifizierungsfehler.**
SFTP-Host/-User/-Passwort im IONOS-Kundenbereich gegenprüfen. Der SFTP-Benutzer
ist nicht zwingend identisch mit dem Login des Kundenbereichs.