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> @
147 lines
4.6 KiB
Markdown
147 lines
4.6 KiB
Markdown
# 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.
|