Linux-Logs mit Logrotate archivieren: Der komplette Leitfaden

Linux-Logs mit Logrotate archivieren: Der komplette Leitfaden
  • Logrotate automatisiert die Rotation, Komprimierung und Löschung von Logdateien – ohne manuelles Eingreifen.
  • Die Hauptkonfiguration liegt in /etc/logrotate.conf, individuelle Regeln in /etc/logrotate.d/.
  • Mit Parametern wie daily, rotate 7 oder compress steuern Sie Häufigkeit, Aufbewahrung und Komprimierung.
  • Testen Sie Änderungen immer im Debug-Modus: sudo logrotate -d /etc/logrotate.conf.
  • Vergessen Sie nicht postrotate-Skripte, um Dienste wie Nginx oder Apache nach der Rotation neu zu laden.

Warum ist die Logrotation mit Logrotate so wichtig?

Logrotation ist unverzichtbar, um Speicherplatz zu sparen und die Systemleistung stabil zu halten. Ohne sie füllen Logdateien schnell die Festplatte – ein Server, der nicht mehr schreiben kann, stürzt ab oder blockiert Dienste. Ich habe selbst erlebt, wie eine unkontrollierte /var/log-Partition einen Produktionsserver zum Stillstand brachte. (Glauben Sie mir, das will niemand um 3 Uhr nachts.)

Kurz gesagt :

  • Logrotate automatisiert Rotation, Komprimierung und Löschung von Logdateien ohne manuelles Eingreifen.
  • Hauptkonfiguration in /etc/logrotate.conf, individuelle Regeln in /etc/logrotate.d/.
  • Wichtige Parameter: daily/weekly/monthly, rotate N, compress, delaycompress, missingok, notifempty, create, size.
  • Änderungen im Debug-Modus testen: sudo logrotate -d /etc/logrotate.conf.

Logrotate löst dieses Problem elegant: Es rotiert, komprimiert und löscht Logs automatisch nach festgelegten Regeln. Dabei bleibt die aktuelle Logdatei immer erhalten, während alte Versionen archiviert werden. Das Tool läuft als Cron-Job und benötigt keinerlei manuelle Eingriffe – einmal konfiguriert, arbeitet es zuverlässig im Hintergrund.

Wie funktioniert Logrotate im Detail?

Logrotate liest Konfigurationsdateien, die festlegen, wann und wie Logs rotiert werden. Die zentrale Steuerung erfolgt über /etc/logrotate.conf, die globalen Einstellungen und den Include-Ordner /etc/logrotate.d/ für dienstspezifische Regeln. Die Statusdatei /var/lib/logrotate/status protokolliert, welche Dateien bereits rotiert wurden.

Der Ablauf ist simpel: Logrotate prüft für jede definierte Logdatei, ob die Bedingungen (z.B. tägliche Rotation oder Größenlimit) erfüllt sind. Wenn ja, wird die bestehende Datei umbenannt oder kopiert, eine neue leere Datei erstellt, und optional werden alte Archive komprimiert oder gelöscht. Die genauen Schritte hängen von den Parametern ab, die Sie setzen.

Welche Parameter sind die wichtigsten?

Die wichtigsten Parameter sind daily, weekly, monthly, rotate, compress, delaycompress, missingok, notifempty, create und size. Diese steuern Zeitpunkt, Anzahl der Archive, Komprimierung und Verhalten bei Fehlern. Ich empfehle, sich diese Parameter gut einzuprägen – sie sind das Fundament jeder Logrotate-Konfiguration.

  • daily | weekly | monthly: Rotationsintervall.
  • rotate N: Anzahl der aufbewahrten Archive (z.B. rotate 7 für 7 Tage).
  • compress: Komprimiert alte Logs mit gzip.
  • delaycompress: Komprimiert erst bei der nächsten Rotation (nützlich für Dienste, die noch schreiben).
  • missingok: Ignoriert fehlende Logdateien ohne Fehlermeldung.
  • notifempty: Rotiert nicht, wenn die Logdatei leer ist.
  • create MODE USER GROUP: Erstellt eine neue Logdatei mit bestimmten Rechten.
  • size SIZE: Rotiert bei Erreichen einer Größe (z.B. size 100M).

Wie erstelle ich eine eigene Logrotate-Konfiguration?

Um eine eigene Konfiguration zu erstellen, legen Sie eine Datei in /etc/logrotate.d/ an und definieren die Regeln für Ihre Logdateien. Hier ein Beispiel für eine Anwendung, die täglich rotiert und 7 Archive behält:

sudo nano /etc/logrotate.d/meine-anwendung

Inhalt:

/var/log/meine-anwendung/*.log { daily rotate 7 compress delaycompress missingok notifempty create 640 www-data www-data
}

Erklärung der Zeilen: Der Pfad definiert, welche Dateien betroffen sind. daily sorgt für tägliche Rotation, rotate 7 behält 7 Archive, compress und delaycompress aktivieren die Komprimierung, missingok und notifempty verhindern Fehler bei fehlenden oder leeren Dateien, create setzt die Rechte der neuen Datei.

Speichern Sie die Datei und testen Sie die Konfiguration mit sudo logrotate -d /etc/logrotate.d/meine-anwendung. Der Debug-Modus zeigt, was passieren würde, ohne Änderungen vorzunehmen. Erst wenn alles korrekt aussieht, führen Sie die Rotation mit sudo logrotate -f /etc/logrotate.d/meine-anwendung aus.

Wie teste ich die Logrotation sicher?

Der sicherste Weg ist der Debug-Modus: sudo logrotate -d /etc/logrotate.conf. Er zeigt detailliert, welche Dateien rotiert würden, ohne tatsächlich etwas zu ändern. So können Sie Fehler in der Konfiguration erkennen, bevor sie produktiv wirken. Ich rate Ihnen, diesen Befehl nach jeder Änderung auszuführen.

Zusätzlich können Sie die Rotation erzwingen: sudo logrotate -f /etc/logrotate.d/meine-anwendung. Das ist nützlich, um den Ablauf sofort zu testen. Prüfen Sie danach die Statusdatei mit cat /var/lib/logrotate/status und kontrollieren Sie, ob die Logdateien korrekt rotiert und komprimiert wurden.

Welche Fehler sollte ich vermeiden?

Die häufigsten Fehler bei der Logrotation sind falsche Dateiberechtigungen, fehlende postrotate-Skripte, zu kurze Aufbewahrungszeiten und fehlende Überwachung. Diese Fehler führen zu Speicherplatzproblemen, leeren Logs oder Diensten, die nicht richtig schreiben. Ich habe in meiner Beratungspraxis – über 15 Jahre – immer wieder dieselben Stolperfallen gesehen.

  • Falsche Dateiberechtigungen: Logrotate kann die Logs nicht lesen oder die neue Datei nicht erstellen. Verwenden Sie create mit passenden Rechten.
  • Vergessene Reload-Befehle: Dienste wie Nginx oder Apache schreiben in die alte Datei weiter, wenn Sie kein postrotate-Skript einrichten. Das führt zu unvollständigen Logs.
  • Zu kurze Aufbewahrungsfrist: Für Compliance-Anforderungen sind oft 90 Tage oder mehr nötig. Prüfen Sie Ihre gesetzlichen Pflichten – in Deutschland gelten je nach Branche unterschiedliche Fristen.
  • Fehlende Überwachung: Wenn der Cron-Job ausfällt, merken Sie es oft zu spät. Richten Sie ein Monitoring ein, das den Status von Logrotate überwacht.
  • Race Conditions bei sharedscripts: Wenn mehrere Logdateien gleichzeitig rotiert werden, kann sharedscripts Probleme verursachen. Testen Sie das Verhalten genau.

Wie konfiguriere ich Logrotate für Nginx oder Apache?

Für Webserver wie Nginx oder Apache ist die Rotation besonders wichtig, da sie viele Logs erzeugen. Hier ein Beispiel für Nginx:

/var/log/nginx/*.log { weekly rotate 12 compress delaycompress missingok notifempty create 644 www-data adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid` fi endscript
}

Der postrotate-Block sendet das Signal USR1 an Nginx, damit dieser seine Logdateien neu öffnet. Ohne dieses Signal schreibt Nginx weiter in die rotierte Datei – ein klassischer Fehler. Für Apache verwenden Sie apache2ctl graceful oder kill -USR1 $(cat /var/run/apache2.pid).

Was ist der Unterschied zwischen copytruncate und create?

copytruncate kopiert die Logdatei und schneidet das Original ab, während create eine neue leere Datei erstellt. copytruncate ist nützlich für Anwendungen, die ihre Logdatei dauerhaft offen halten, wie Docker-Container. create ist die Standardmethode und funktioniert bei den meisten Diensten. Ich bevorzuge create, weil es sauberer ist und die Datei neu mit korrekten Rechten erstellt wird.

Ein Beispiel für copytruncate:

/var/log/mein-dienst/app.log { copytruncate daily rotate 30 compress
}

Hier wird die Datei täglich kopiert und das Original auf 0 Bytes abgeschnitten. Das verhindert, dass der Dienst die Datei neu öffnen muss – ideal für Anwendungen, die das nicht unterstützen.

Wie kann ich die Aufbewahrungsdauer optimal wählen?

Die optimale Aufbewahrungsdauer hängt von Ihrem Speicherplatz und den gesetzlichen Anforderungen ab. Für allgemeine System-Logs sind 30 bis 90 Tage üblich, für sicherheitsrelevante Logs empfehle ich mindestens 180 Tage. In Deutschland gelten je nach Branche unterschiedliche Aufbewahrungspflichten – prüfen Sie diese unbedingt.

Ein guter Ansatz ist, die Loggröße zu überwachen und die Rotation so einzustellen, dass Sie im Notfall noch genügend Daten haben. Ich habe Kunden, die 365 Tage aufbewahren – das benötigt natürlich entsprechend Speicherplatz. Rechnen Sie mit etwa 10-20% des Logvolumens für komprimierte Archive, je nach Komprimierungsrate.

Welche Rolle spielt Cron bei Logrotate?

Logrotate wird normalerweise als Cron-Job ausgeführt, standardmäßig täglich über /etc/cron.daily/logrotate. Sie können das Intervall anpassen, indem Sie den Cron-Eintrag ändern oder eigene Cron-Jobs erstellen. Die meisten Systeme haben bereits einen Cron-Eintrag, der Logrotate täglich aufruft – prüfen Sie das mit crontab -l.

Wenn Sie eine häufigere Rotation benötigen, z.B. stündlich, erstellen Sie einen eigenen Cron-Job:

0 * * * * /usr/sbin/logrotate /etc/logrotate.conf

Das führt Logrotate jede Stunde aus. Achten Sie darauf, dass die Konfigurationen die Intervalle entsprechend setzen (z.B. hourly).

Wie überwache ich die Logrotation?

Die Überwachung ist entscheidend, um Ausfälle früh zu erkennen. Ich empfehle, die Statusdatei regelmäßig zu prüfen und Alarme einzurichten, wenn Logs nicht rotiert wurden. Sie können auch Logrotate in Ihr Monitoring-Tool integrieren, z.B. mit Nagios oder Prometheus.

Ein einfacher Check ist, die Dateigröße der Logs zu beobachten. Wenn eine Logdatei ungewöhnlich groß wird, stimmt etwas nicht. Zusätzlich können Sie die Ausgabe von logrotate -d in ein Logfile umleiten und auf Fehler prüfen.

Wie gehe ich mit Logs in Docker-Containern um?

Docker-Container schreiben ihre Logs normalerweise nach stdout/stderr, die Docker selbst verwaltet. Für Logrotate müssen Sie die Logs auf dem Host verfügbar machen, z.B. über Volumes. Dann können Sie Logrotate auf dem Host konfigurieren, um diese Dateien zu rotieren. Alternativ nutzen Sie einen Logging-Treiber wie json-file mit begrenzter Größe.

Ein Beispiel: Mounten Sie das Log-Verzeichnis des Containers auf den Host und definieren Sie eine Logrotate-Regel für diesen Pfad. Das funktioniert gut, solange der Container die Dateien nicht selbst rotiert.

Welche Best Practices sollte ich beachten?

Die besten Praktiken umfassen: Testen Sie jede Änderung im Debug-Modus, verwenden Sie postrotate-Skripte für Dienste, überwachen Sie die Rotation, und dokumentieren Sie Ihre Konfigurationen. Ich rate auch, die Konfigurationen versioniert abzulegen, z.B. in Git, um Änderungen nachvollziehen zu können.

Ein weiterer Tipp: Nutzen Sie sharedscripts nur, wenn Sie sicher sind, dass alle Logdateien in einem Block rotiert werden. Sonst kann es zu unerwartetem Verhalten kommen. Und vergessen Sie nicht, die Berechtigungen der Logdateien zu prüfen – Sicherheitslücken entstehen oft durch zu lockere Rechte.

Häufig gestellte Fragen (FAQ)

Wie oft sollte ich Logs rotieren?

Die Häufigkeit hängt vom Logvolumen ab. Für System-Logs ist täglich oder wöchentlich üblich, für sehr aktive Anwendungen kann stündlich sinnvoll sein. Ich empfehle, das Logvolumen zu beobachten und die Rotation entsprechend anzupassen.

Wie lange sollte ich Logs aufbewahren?

Für allgemeine Logs reichen 30 bis 90 Tage, für sicherheitsrelevante Logs mindestens 180 Tage. Prüfen Sie die gesetzlichen Aufbewahrungspflichten in Ihrer Branche – in Deutschland sind das oft 6 Monate bis 10 Jahre.

Was passiert, wenn die Festplatte voll ist?

Logrotate kann dann keine neuen Archive erstellen. Überwachen Sie den Speicherplatz und richten Sie Alarme ein. Ich habe schon erlebt, dass ein voller Datenträger zu Datenverlust führte – vermeidbar mit rechtzeitiger Überwachung.

Kann ich Logrotate für Anwendungs-Logs in Docker-Containern verwenden?

Ja, wenn Sie die Logs auf dem Host verfügbar machen. Verwenden Sie Volumes und konfigurieren Sie Logrotate auf dem Host. Alternativ nutzen Sie die nativen Docker-Logging-Optionen.

Wie teste ich die Rotation für einen bestimmten Dienst sofort?

Verwenden Sie sudo logrotate -vf /etc/logrotate.d/ihre-konfiguration. Das -v zeigt detaillierte Ausgaben, -f erzwingt die Rotation. So sehen Sie sofort, ob alles funktioniert.

Ein Blick auf die Zukunft der Logverwaltung

Mit der zunehmenden Verbreitung von Containern und Microservices wird die Logverwaltung komplexer. Tools wie Loki oder ELK Stack ergänzen Logrotate, ersetzen es aber nicht. Logrotate bleibt das grundlegende Werkzeug für die Dateiarchivierung, während zentrale Logging-Systeme für die Analyse und Aggregation sorgen. Ich sehe Logrotate auch in Zukunft als unverzichtbaren Bestandteil einer robusten Systemarchitektur.

Insgesamt ist Logrotate ein mächtiges, aber unterschätztes Werkzeug. Mit den hier vorgestellten Techniken können Sie Ihre Logs effizient archivieren, Speicherplatz sparen und die Systemstabilität gewährleisten. Beginnen Sie mit einer einfachen Konfiguration, testen Sie sie gründlich, und erweitern Sie sie schrittweise. Ihr System wird es Ihnen danken – und Ihre Festplatte auch.

Anna Berger
Anna Berger
IT-Sicherheitsanalystin und Tech-Journalistin

Schon als Kind war ich fasziniert von der Logik hinter Computern und der unendlichen Welt der Daten. Was als spielerische Neugier mit dem Zerlegen alter PCs begann, entwickelte sich schnell zu einer tiefen Leidenschaft für die Informatik. Heute sehe ich es als meine Berufung, komplexe digitale Themen greifbar zu …

Tous les articles de Anna Berger →

Laisser un commentaire