Zum Inhalt springen
Alle Artikel
LogrotateLinux-AdministrationLog-Management

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.

18. März 20266 Min. Lesezeit

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:

  1. Logrotate prüft, ob eine Rotation nötig ist (Größe, Alter, Zeitintervall)
  2. Die aktuelle Logdatei wird umbenannt (z. B. access.logaccess.log.1)
  3. Eine neue, leere Logdatei wird erstellt
  4. Alte Logdateien werden optional komprimiert oder gelöscht
  5. 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 *.log matchen nur existierende Dateien. Prüfe die Pfade mit ls.
# 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 -d im 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.