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