Log-Verwaltung mit Logrotate
So konfigurieren Sie Logrotate für die Verwaltung von System- und Anwendungsprotokollen.
Bei der Arbeit mit VPS oder dedizierten Servern ist die Nachverfolgung von Ereignissen und Fehlern für Monitoring und Diagnose unerlässlich. Große Log-Dateien bereiten echte Probleme: Sie sind schwer zu analysieren, verbrauchen CPU und Arbeitsspeicher und können zu Anwendungsausfällen führen, wenn der Speicherplatz voll ist.
Logrotate löst dieses Problem, indem es aktuelle Logs automatisch archiviert und neue Dateien für eingehende Daten erstellt.
Installation prüfen
Logrotate ist auf den meisten Linux-Distributionen vorinstalliert und wird automatisch über den cron-Scheduler ausgeführt. So prüfen Sie die Version:
logrotate --version
Beispielausgabe:
logrotate 3.21.0
Default mail command: /usr/bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support: yes
SELinux support: yes
Die Ausgabe zeigt, welche Tools Logrotate für Komprimierung und Benachrichtigungen verwendet, sowie den Pfad zur State-Datei, die die Rotationshistorie speichert.
Konfigurationsstruktur
Logrotate verwendet eine hierarchische Konfigurationsstruktur. Globale Standardwerte werden in /etc/logrotate.conf gesetzt, anwendungsspezifische Einstellungen befinden sich in /etc/logrotate.d/.
Beispiel /etc/logrotate.conf unter Ubuntu:
# rotate log files weekly
weekly
# use the adm group by default
su root adm
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
Wichtige Parameter:
weekly— Logs werden einmal pro Woche rotiert.create— Nach der Rotation wird eine neue leere Log-Datei erstellt.rotate 4— Es werden vier archivierte Kopien aufbewahrt.su root adm— Die Rotation läuft als Benutzerrootund Gruppeadm, um Berechtigungsprobleme mit Systemlogs zu vermeiden.compress— Archivkomprimierung (standardmäßig deaktiviert).include /etc/logrotate.d— Lädt anwendungsspezifische Konfigurationsdateien.
Die vollständige Liste der Direktiven:
man logrotate
Anwendungskonfigurationen
Dateien in /etc/logrotate.d/ folgen derselben Struktur wie die globale Konfiguration, gelten aber nur für bestimmte Logs. Einstellungen in diesen Dateien überschreiben die globalen Werte aus /etc/logrotate.conf. Fehlt eine Direktive in der Anwendungskonfiguration, wird der globale Wert verwendet.
Beispiel /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
notifempty
}
Wenn
/etc/logrotate.confden Wertrotate 4setzt und eine Anwendungskonfigurationrotatenicht definiert, werden für diese Anwendung weiterhin vier archivierte Kopien aufbewahrt.
Rotationsintervall
Standardmäßig verwendet Logrotate einen zeitbasierten Ansatz: Logs werden nach einem festen Zeitplan rotiert. Unterstützte Intervalle: hourly, daily, weekly, monthly, yearly.
Logrotate wird in der Regel einmal täglich über /etc/cron.daily/logrotate ausgeführt. Für stündliche Rotation verschieben Sie den Job nach cron.hourly:
sudo mv /etc/cron.daily/logrotate /etc/cron.hourly
Für noch häufigere Ausführungen richten Sie einen eigenen Cron-Job ein.
Größenbasierte Rotation
Für Dienste mit unvorhersehbarem Log-Volumen kann die Rotation anhand der Dateigröße ausgelöst werden.
size — Rotation erfolgt erst, wenn die Datei die angegebene Größe erreicht, unabhängig vom Zeitplan:
/var/log/app/*.log {
size 50M
}
sizeund zeitbasierte Direktiven schließen sich gegenseitig aus — es gilt immer die zuletzt angegebene Option. Wenndailynachsizesteht, werden Logs täglich rotiert und der Größenschwellenwert wird ignoriert.
minsize — Rotation erfolgt nach Zeitplan, aber nur wenn die Datei die Mindestgröße erreicht hat:
/var/log/app/*.log {
daily
minsize 50M
}
maxsize — Rotation erfolgt sofort, sobald die Datei das Größenlimit überschreitet, auch wenn der geplante Zeitpunkt noch nicht erreicht ist:
/var/log/app/*.log {
daily
maxsize 50M
}
Größen können in Bytes (Standard), Kilobytes (k), Megabytes (M) oder Gigabytes (G) angegeben werden.
Rotationsmethoden
Logrotate unterstützt zwei Hauptmethoden für den Umgang mit aktiven Log-Dateien.
create (Standard) — benennt die aktive Datei um (app.log → app.log.1) und erstellt eine neue leere Datei mit dem ursprünglichen Namen. Dies ist die empfohlene Methode und minimiert das Risiko von Log-Datenverlust:
/var/log/app/*.log {
create
# create 644 appuser group — optional Berechtigungen, Eigentümer und Gruppe festlegen
}
copytruncate — kopiert den Inhalt der aktuellen Datei in ein Archiv und leert anschließend das Original. Ermöglicht es Anwendungen, weiterhin in denselben File-Deskriptor zu schreiben. Empfohlen nur für ältere Anwendungen, die Log-Dateien nach der Rotation nicht neu öffnen können:
/var/log/app/*.log {
copytruncate
}
Benennung von Archivdateien
Standardmäßig erhalten rotierte Dateien fortlaufende Nummern: app.log.1, app.log.2 usw. Um Zeitstempel hinzuzufügen, verwenden Sie dateext:
/var/log/app/*.log {
dateext
# Standard: -%Y%m%d für daily, -%Y%m%d%H für hourly
}
Ein am 25. Juni 2025 rotiertes Log würde app.log-20250625 heißen.
Für Logs, die mehrmals täglich rotiert werden, verwenden Sie einen Unix-Timestamp für eindeutige Benennung:
/var/log/app/*.log {
dateformat -%Y%m%d-%s
}
Die Direktive dateyesterday versieht die Datei mit dem Datum des Vortags — nützlich, wenn die Rotation nach Mitternacht erfolgt, die Daten aber zum Vortag gehören.
Komprimierung
Die Direktive compress aktiviert die gzip-Komprimierung:
/var/log/app/*.log {
compress
}
Um ein anderes Komprimierungstool zu verwenden:
/var/log/app/*.log {
compress
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
compressext .bz2
}
delaycompress verhindert, dass die zuletzt rotierte Datei sofort komprimiert wird — nützlich, wenn eine Anwendung nach der Rotation weiterhin in die alte Datei schreibt:
/var/log/app/*.log {
compress
delaycompress
}
compressoptions legt den gzip-Komprimierungsgrad von -1 (schnell, geringe Komprimierung) bis -9 (langsam, maximale Komprimierung) fest:
/var/log/app/*.log {
compress
compressoptions -9
}
Fehlerbehebung
Die Logrotate-State-Datei zeigt, wann jede Log-Datei zuletzt rotiert wurde:
sudo cat /var/lib/logrotate/status
Für eine detaillierte Analyse führen Sie Logrotate im Debug-Modus aus:
sudo logrotate --debug /etc/logrotate.conf
Hilfe
Bei Fragen oder wenn Sie Unterstützung brauchen, erreichen Sie uns jederzeit über das Ticketsystem — wir helfen Ihnen gern weiter!