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 Benutzer root und Gruppe adm, 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.conf den Wert rotate 4 setzt und eine Anwendungskonfiguration rotate nicht 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
}

size und zeitbasierte Direktiven schließen sich gegenseitig aus — es gilt immer die zuletzt angegebene Option. Wenn daily nach size steht, 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.logapp.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!

Hilfe benötigt?Unsere Ingenieure helfen Ihnen kostenlos bei jeder Frage in wenigen MinutenKontaktieren Sie uns