EMZETT.
Login

logrotate: Logdateien aufräumen und archivieren

Kurz: Ein Werkzeug, das Logdateien regelmäßig umbenennt, komprimiert und alte löscht, damit sie die Festplatte nicht füllen.

Genauer: Programme schreiben ständig Meldungen in Logdateien, zum Beispiel /var/log/nginx/access.log. Ohne Pflege wachsen sie unbegrenzt, bis die Festplatte voll ist. logrotate „rotiert“ die Dateien: Die aktuelle Datei wird umbenannt (access.log.1), eine neue beginnt, ältere werden komprimiert und nach einer Frist gelöscht.

Im Detail

Wie es läuft

Meist startet ein systemd-Timer oder ein Cron-Job logrotate einmal täglich. Konfiguriert wird in /etc/logrotate.conf und in Dateien unter /etc/logrotate.d/ (eine je Anwendung).

Beispiel

/var/log/meineapp/*.log {
    weekly
    rotate 8
    compress
    delaycompress
    missingok
    notifempty
    create 0640 meineapp adm
    postrotate
        systemctl reload meineapp > /dev/null 2>&1 || true
    endscript
}

weekly rotiert wöchentlich, rotate 8 behält 8 alte Dateien, compress packt sie mit gzip, delaycompress komprimiert erst die vorletzte, missingok ignoriert fehlende Dateien, notifempty überspringt leere. postrotate weist das Programm an, die neue Datei zu öffnen.

copytruncate

Hält ein Programm die Logdatei dauerhaft offen und kennt kein „neu öffnen“, würde es in die umbenannte Datei weiterschreiben. Mit copytruncate kopiert logrotate die Datei und leert das Original. Dabei können wenige Zeilen verloren gehen, es ist ein Notbehelf.

Testen und Alternativen

sudo logrotate -d /etc/logrotate.d/meineapp zeigt im Probelauf, was geschähe; -f erzwingt eine Rotation. Das systemd-Journal begrenzt seine Größe selbst (SystemMaxUse= in journald.conf). Grenzen nach Größe (size 100M) statt Zeit sind möglich. Für die Auswertung großer Logmengen nutzt man zentrale Systeme wie Loki oder eine Elastic-Suite.

Siehe auch: Logs und Zeitsteuerung, Logging und Log-Level, systemd