Logs sind die erste Anlaufstelle wenn etwas schiefläuft – und eine wertvolle Datenquelle wenn man versteht wie man sie strukturiert, sammelt und durchsucht. Gutes Logging ist der Unterschied zwischen Raten und Wissen.
journalctlLokistructured logsRotationPromtail
Wo Logs auf Linux leben – und wie man sie liest
Linux-Logs haben mehrere Heimaten:
systemd Journal: Der zentrale Log-Speicher für systemd-Services. journalctl -u nginx -f für Live-Logs, journalctl --since "1 hour ago" für Zeiträume, journalctl -p err für Fehler.
/var/log/: Klassische Textdateien – syslog, auth.log, kern.log. Mit tail -f oder grep durchsuchen.
Docker Logs:docker compose logs -f servicename. Container schreiben nach stdout/stderr, Docker leitet in JSON-Dateien unter /var/lib/docker/containers/.
Anwendungslogs: Jede App nach eigenem Schema – JSON ist deutlich besser als Freitext für maschinelle Verarbeitung.
Freitext-Logs sind für Menschen lesbar aber schwer maschinell zu verarbeiten. Strukturierte Logs lösen das:
JSON-Format: Jede Log-Zeile als JSON-Objekt mit konsistenten Feldern: {"level": "error", "msg": "...", "timestamp": "...", "request_id": "..."}
Pflichtfelder: Timestamp (ISO 8601), Level (debug/info/warn/error), Message, Service-Name. Optional: Request-ID für Trace-Verfolgung über mehrere Services
Python: `structlog` Library für strukturierte Logs. FastAPI und Django haben eingebaut JSON-Logging-Optionen.
Systemd-Journal: in `/etc/systemd/journald.conf` `SystemMaxUse=500M` setzen. Docker: in compose.yml Logging-Options mit max-size und max-file. Nginx/Apache: logrotate konfiguriert automatisch tägliche Rotation und hält eine Woche vor. `df -h /var/log` regelmäßig prüfen.
Systemd: `journalctl -b -1` zeigt Logs des letzten Boots (vor dem Crash). Mit `-p err` auf Fehler einschränken. Docker: `docker inspect container_name` zeigt Exit-Code. Danach `docker logs container_name 2>&1 | tail -50` für letzte Ausgaben vor dem Stop.
Loki für Self-Hosting: günstiger (kein Index), einfacher zu betreiben, gut integriert mit Grafana. Elasticsearch für: Volltext-Suche in Log-Inhalten, komplexe Analysen, wenn schon ELK-Stack vorhanden. Für die meisten Heimserver-Projekte ist Loki deutlich die bessere Wahl.
Für Debugging: 7–30 Tage reichen für die meisten Fälle. Security-Logs (Auth, SSH-Zugriffe): 90 Tage empfohlen, bei DSGVO-relevanten Systemen rechtliche Anforderungen prüfen. In Loki: per Stream-Retention-Policy unterschiedliche Aufbewahrung für verschiedene Log-Typen konfigurierbar.