Logrotate einrichten: Linux-Logs richtig verwalten
Logrotate konfigurieren und Linux-Logdateien automatisch rotieren, komprimieren und aufräumen. Praxis-Guide mit Beispielen für Nginx, Docker und Systemlogs.
Wer einen Linux-Server betreibt, kennt das Problem: Logdateien wachsen still und heimlich, bis irgendwann die Festplatte voll ist und kritische Dienste ausfallen. Logrotate ist das Standardwerkzeug unter Linux, um genau das zu verhindern. Es rotiert, komprimiert und löscht Logdateien automatisch nach festgelegten Regeln. In diesem Praxis-Guide richtest du Logrotate Schritt für Schritt ein – mit konkreten Beispielen für Nginx, Docker und Systemlogs.
Was ist Logrotate und wie funktioniert es?
Logrotate ist ein Systemdienst, der auf praktisch jeder Linux-Distribution vorinstalliert ist. Er wird in der Regel einmal täglich über einen Cron-Job oder einen systemd-Timer ausgeführt und verarbeitet Logdateien anhand definierter Konfigurationsregeln.
Der grundlegende Ablauf sieht so aus:
- Logrotate prüft, ob eine Rotation nötig ist (Größe, Alter, Zeitintervall)
- Die aktuelle Logdatei wird umbenannt (z. B.
access.log→access.log.1) - Eine neue, leere Logdatei wird erstellt
- Alte Logdateien werden optional komprimiert oder gelöscht
- Betroffene Dienste werden benachrichtigt, damit sie in die neue Datei schreiben
Prüfe zunächst, ob Logrotate auf deinem System installiert ist:
logrotate --version
Falls nicht vorhanden, installierst du es mit:
# Debian/Ubuntu
sudo apt install logrotate
# RHEL/CentOS/Fedora
sudo dnf install logrotate
Die Konfigurationsstruktur verstehen
Logrotate verwendet zwei zentrale Orte für seine Konfiguration:
/etc/logrotate.conf– Die globale Hauptkonfiguration/etc/logrotate.d/– Verzeichnis für dienstspezifische Konfigurationen
Die Hauptkonfiguration enthält sinnvolle Standardwerte. Eigene Regeln legst du als separate Dateien in /etc/logrotate.d/ ab. So bleibt alles modular und übersichtlich.
Ein Blick in die Standardkonfiguration:
cat /etc/logrotate.conf
weekly
rotate 4
create
dateext
compress
include /etc/logrotate.d
Diese Defaults bedeuten: Logs werden wöchentlich rotiert, 4 alte Versionen behalten, neue Dateien automatisch erstellt, ein Datumssuffix angehängt und alte Dateien komprimiert.
Die wichtigsten Logrotate-Direktiven
Bevor du eigene Konfigurationen erstellst, solltest du die zentralen Direktiven kennen:
| Direktive | Beschreibung |
|---|---|
daily / weekly / monthly |
Rotationsintervall |
rotate N |
Anzahl der aufbewahrten Logdateien |
compress |
Alte Logs mit gzip komprimieren |
delaycompress |
Erst ab der zweiten Rotation komprimieren |
missingok |
Kein Fehler, wenn die Logdatei fehlt |
notifempty |
Leere Dateien nicht rotieren |
create MODE OWNER GROUP |
Neue Logdatei mit bestimmten Rechten erstellen |
postrotate / endscript |
Befehle nach der Rotation ausführen |
size N |
Rotation ab einer bestimmten Dateigröße |
maxage N |
Logs nach N Tagen löschen |
copytruncate |
Datei kopieren und leeren statt umbenennen |
Praxisbeispiel: Nginx-Logs rotieren
Nginx schreibt standardmäßig in /var/log/nginx/. Eine saubere Logrotate-Konfiguration für Nginx sieht so aus:
sudo nano /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid)
fi
endscript
}
Was passiert hier im Detail?
- daily: Rotation findet täglich statt
- rotate 14: Die letzten 14 Logdateien werden aufbewahrt
- delaycompress: Die zuletzt rotierte Datei bleibt zunächst unkomprimiert – nützlich, wenn ein Prozess noch darauf zugreift
- sharedscripts: Das
postrotate-Skript wird nur einmal ausgeführt, auch wenn mehrere Dateien matchen - kill -USR1: Signalisiert Nginx, seine Logdateien neu zu öffnen, ohne den Dienst neuzustarten
Praxisbeispiel: Docker-Container-Logs verwalten
Docker schreibt Container-Logs standardmäßig als JSON-Dateien nach /var/lib/docker/containers/. Diese können schnell mehrere Gigabyte groß werden. Hier ist Logrotate eine effektive Lösung:
sudo nano /etc/logrotate.d/docker-containers
/var/lib/docker/containers/*/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
size 100M
maxage 30
}
Die Direktive copytruncate ist bei Docker besonders wichtig: Da der Docker-Daemon den Datei-Handle offen hält, kann die Datei nicht einfach umbenannt werden. Stattdessen wird der Inhalt kopiert und die Originaldatei geleert.
Ergänzung: Docker-eigene Log-Rotation
Alternativ kannst du die Log-Rotation direkt in der Docker-Daemon-Konfiguration festlegen:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "5"
}
}
Speichere dies in /etc/docker/daemon.json und starte Docker neu. Diese Methode und Logrotate ergänzen sich gut – die Docker-eigene Rotation begrenzt die maximale Größe, während Logrotate für zusätzliche Aufräumarbeiten sorgt.
Praxisbeispiel: Eigene Anwendungslogs rotieren
Für eine eigene Anwendung, die nach /var/log/myapp/ schreibt, erstellst du folgende Konfiguration:
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
weekly
rotate 8
compress
delaycompress
missingok
notifempty
create 0644 appuser appgroup
dateext
dateformat -%Y%m%d
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
Mit dateext und dateformat erhalten die rotierten Dateien sprechende Namen wie app.log-20250117.gz statt app.log.1.gz. Das erleichtert die spätere Analyse erheblich.
Konfiguration testen und debuggen
Bevor eine neue Logrotate-Konfiguration produktiv läuft, solltest du sie unbedingt testen. Der Debug-Modus simuliert die Rotation, ohne tatsächlich Dateien zu verändern:
# Trockenlauf mit Debug-Ausgabe
sudo logrotate -d /etc/logrotate.d/nginx
Wenn alles korrekt aussieht, kannst du die Rotation einmalig manuell erzwingen:
# Rotation erzwingen
sudo logrotate -f /etc/logrotate.d/nginx
Um den kompletten Logrotate-Durchlauf mit Verbose-Output zu testen:
sudo logrotate -v /etc/logrotate.conf
Häufige Fehlerquellen
Falls Logrotate nicht wie erwartet funktioniert, prüfe diese Punkte:
- Berechtigungen: Die Konfigurationsdateien in
/etc/logrotate.d/dürfen nicht von jedermann beschreibbar sein. Logrotate ignoriert Dateien mit zu offenen Rechten. - Statusdatei: Logrotate speichert den letzten Rotationszeitpunkt in
/var/lib/logrotate/status. Lösche diese Datei testweise, um eine Rotation zu erzwingen. - Pfade: Wildcards wie
*.logmatchen nur existierende Dateien. Prüfe die Pfade mitls.
# Berechtigungen prüfen
ls -la /etc/logrotate.d/
# Statusdatei einsehen
cat /var/lib/logrotate/status
Logrotate-Timer unter systemd prüfen
Auf modernen Distributionen wird Logrotate nicht mehr über Cron, sondern über einen systemd-Timer gesteuert. So prüfst du den Status:
# Timer-Status anzeigen
systemctl status logrotate.timer
# Nächste geplante Ausführung
systemctl list-timers | grep logrotate
Falls der Timer nicht aktiv ist, aktivierst du ihn mit:
sudo systemctl enable --now logrotate.timer
Fortgeschrittene Tipps
Logs an einen externen Speicher senden
Du kannst im postrotate-Block rotierte Logs automatisch auf einen externen Server kopieren:
postrotate
rsync -az /var/log/nginx/access.log.1 backup@storage:/logs/nginx/
endscript
Größenbasierte Rotation für schnell wachsende Logs
Für Logs, die unvorhersehbar schnell wachsen, kombinierst du size mit einem häufigeren Aufruf:
/var/log/hightraffic/*.log {
size 200M
rotate 10
compress
copytruncate
missingok
}
Dazu richtest du einen zusätzlichen Cron-Job ein, der Logrotate stündlich ausführt:
echo "0 * * * * root /usr/sbin/logrotate /etc/logrotate.d/hightraffic" | sudo tee /etc/cron.d/logrotate-hightraffic
Fazit
Logrotate ist ein unverzichtbares Werkzeug für jede Linux-Administration. Einmal richtig konfiguriert, verhindert es vollgelaufene Festplatten, hält Logdateien übersichtlich und läuft zuverlässig im Hintergrund. Die wichtigsten Punkte zusammengefasst:
- Nutze das Verzeichnis
/etc/logrotate.d/für modulare, dienstspezifische Konfigurationen - Teste jede neue Konfiguration mit
logrotate -dim Debug-Modus, bevor sie produktiv geht - Verwende copytruncate für Anwendungen, die ihren Datei-Handle nicht neu öffnen (wie Docker)
- Kombiniere compress und delaycompress für eine effiziente Speichernutzung
- Vergiss nicht das postrotate-Skript, damit Dienste wie Nginx ihre Logdateien neu öffnen
Mit den Beispielen aus diesem Guide hast du eine solide Grundlage, um das Log-Management auf deinen Linux-Servern professionell aufzusetzen. Passe die Werte für Rotationsintervall, Aufbewahrungsdauer und Komprimierung an deine individuellen Anforderungen an – und kontrolliere regelmäßig, ob die Rotation wie gewünscht funktioniert.