Logrotate Masterclass: Disk Space Hygiene (Artikel 340)
Beherrschung der Log-Rotation unter Linux. Erfahren Sie alles über die Konfiguration von logrotate, effiziente Kompression und die Vermeidung voller Festplatten durch unkontrolliertes Logging.
# Logrotate Deep Dive: Ordnung in der Datenflut
TL;DR / Management Summary Nichts bringt einen Server schneller zum Stillstand als eine volle Partition durch unkontrolliert wachsende Logdateien. logrotate ist der Standard-Dienst, um Logs periodisch zu archivieren, zu komprimieren und nach einer bestimmten Zeit zu löschen. Ein Senior Admin nutzt logrotate, um sicherzustellen, dass das System auch bei massiven Fehlermeldungen stabil bleibt, und triggert nach der Rotation automatisierte Re-Inits von Diensten (postrotate).
# 1. Einführung & Architektur
Der Zyklus der Daten.
Logrotate ist kein Dämon, sondern wird meist einmal täglich via Cron oder Systemd-Timer gestartet. Es liest die Konfiguration und prüft für jede Datei, ob ein Rotations-Kriterium (Zeit oder Größe) erreicht ist.
# Der Rotations-Workflow (Mermaid)
graph LR
A[Active Log: app.log] -->|Threshold reached| B[Rotation: Rename]
B --> C[Archived: app.log.1]
C -->|Next Cycle| D[Compressed: app.log.2.gz]
D -->|Retention limit| E[Deleted: Clear Space]
subgraph "Triggers"
F[Time: daily / weekly]
G[Size: > 100MB]
end
F/G --> B
# 2. Die Konfiguration
Regeln für die Hygiene.
Die globale Konfig liegt in /etc/logrotate.conf. Applikations-spezifische Regeln legen wir unter /etc/logrotate.d/ ab.
# Beispiel: Ein sicheres Setup für Nginx
Datei: /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 14
missingok
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
# 3. Die wichtigsten Parameter (Enterprise)
Präzision statt Zufall.
compress: Archivierte Logs werden sofort mit gzip verkleinert.delaycompress: Das Komprimieren erfolgt erst beim nächsten Zyklus (hilfreich, wenn Prozesse die alte Log-Datei noch kurzzeitig offen halten).copytruncate: Für Applikationen, die das Logfile nicht schließen können. Es kopiert den Inhalt und leert dann die Originaldatei (Vorsicht: Minimaler Datenverlust möglich!).create: Erstellt sofort eine neue, leere Datei mit spezifischen Rechten (Artikel 283).
# 4. Day-2 Operations: Manuelle Ausführung
Eingreifen, wenn es brennt.
Wenn eine Partition zu 99% voll ist, warten wir nicht auf den nächsten Cronjob.
# Erzwingt die Rotation aller konfigurierten Logs sofort
sudo logrotate -f /etc/logrotate.conf
# Nur eine spezifische Konfig testen (Debug-Modus)
sudo logrotate -d /etc/logrotate.d/myapp
# 5. Troubleshooting & “War Stories”
Wenn die Rotation das System bricht.
# Story 1: “Der hängende Dienst nach Rotation”
Symptom: Die Logdatei wird rotiert, ist danach aber leer, obwohl die Applikation weiterläuft.
Ursache: Die Applikation schreibt weiterhin in den alten File-Descriptor (der nun app.log.1 heißt). Sie hat nicht bemerkt, dass die Datei umbenannt wurde.
Lösung: Nutzen Sie postrotate, um dem Dienst ein Signal (SIGHUP oder USR1) zu senden, oder nutzen Sie copytruncate.
# Story 2: “Die Permission-Denied Falle”
Symptom: Logs werden rotiert, aber die neue Datei hat die Rechte 600 für root. Der Webserver kann nicht mehr reinschreiben und stürzt ab.
Ursache: Fehlende create Anweisung in der logrotate-Konfig.
Lösung: Definieren Sie immer explizit User und Gruppe:
create 0640 myuser mygroup.
# 6. Fazit & Empfehlung
- Standard: Nutzen Sie für jeden Dienst, den Sie manuell installieren, eine eigene logrotate-Datei.
- Platz: Überwachen Sie
/var/logmit einer eigenen Partition (Artikel 019), damit volle Logs niemals das Root-Dateisystem blockieren. - Wahl: Nutzen Sie
dailyfür High-Traffic Dienste undsize 50Mfür Dienste, die unvorhersehbare Mengen an Daten produzieren.
# Anhang: Cheatsheet
| Aufgabe | Parameter / Befehl |
|---|---|
| Status der Rotation | cat /var/lib/logrotate/status |
| Debugging (Simulation) | logrotate -d <file> |
| Force Rotation | logrotate -f <file> |
| Logs täglich rotieren | daily |
| 30 Tage aufheben | rotate 30 |
| Nur rotieren wenn > X | size 100M |
| Logs komprimieren | compress |
| Skripte ausführen | postrotate ... endscript |
| Verwaiste Configs | ls /etc/logrotate.d/ |