Protokolle mit Logrotate auf Debian verwalten

So konfigurieren Sie die Log-Rotation richtig, um Ihr System sauber zu halten und einen Disk-Überlauf zu verhindern.

Logrotate ist eines der grundlegenden Werkzeuge für die Linux-Systemadministration. Es rotiert, komprimiert und entfernt automatisch alte Log-Dateien und hilft dabei, Ordnung im System zu bewahren und eine Überfüllung der Festplatte zu verhindern. Beim Betrieb von virtuellen Servern oder dedizierten Servern sorgt eine korrekte Konfiguration der Log-Rotation für Stabilität und Vorhersehbarkeit Ihrer Dienste.

Auf Debian 9 und neueren Versionen ist logrotate standardmäßig installiert und bereits für die meisten Systemdienste konfiguriert.

Installation prüfen

logrotate --version

Erwartete Ausgabe:

logrotate 3.11.0

Konfigurationsstruktur

Logrotate verwendet zwei Hauptspeicherorte:

  • /etc/logrotate.conf — Hauptkonfigurationsdatei mit globalen Standardeinstellungen
  • /etc/logrotate.d/ — Verzeichnis mit einzelnen Konfigurationsdateien für bestimmte Dienste und Anwendungen

Beispielkonfiguration für APT (unter /etc/logrotate.d/apt):

/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

Die Datei enthält zwei Blöcke — für term.log und history.log. Parameter, die in einem Block nicht angegeben sind, werden aus /etc/logrotate.conf übernommen.

Erläuterung der Direktiven:

  • rotate 12 — 12 archivierte Kopien aufbewahren
  • monthly — einmal pro Monat rotieren
  • compress — alte Logs mit gzip komprimieren
  • missingok — keinen Fehler ausgeben, wenn die Log-Datei fehlt
  • notifempty — Rotation überspringen, wenn das Log leer ist

Methode 1: Standardkonfiguration (empfohlen)

Diese Methode eignet sich für die meisten Fälle. Konfigurationsdateien werden in /etc/logrotate.d/ abgelegt und täglich durch Cron ausgeführt.

Beispiel: Konfiguration für eine Anwendung, die Logs nach /var/log/example-app/ schreibt:

sudo nano /etc/logrotate.d/example-app
/var/log/example-app/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload example-app
    endscript
}

Erläuterung der Direktiven:

  • create 0640 www-data www-data — erstellt nach der Rotation eine neue Log-Datei mit den Rechten 0640, Besitzer und Gruppe www-data
  • sharedscripts — das postrotate-Skript wird nur einmal ausgeführt, nachdem alle Dateien verarbeitet wurden, nicht für jede Datei einzeln
  • postrotate ... endscript — Befehle, die nach der Rotation ausgeführt werden; im Beispiel wird die Anwendung neu geladen

Nach der Konfiguration überprüfen Sie die Einstellungen im Debug-Modus:

sudo logrotate /etc/logrotate.conf --debug

Der Befehl gibt detaillierte Informationen darüber aus, welche Dateien logrotate verarbeitet, ohne Änderungen tatsächlich anzuwenden.

Unsere Produkte und Dienste

WebhostingLäuft auf ultraschnellen NVMe-Laufwerken. Geeignet für Websites jeder Komplexität.
Bestellen
VPSFlexible Cloud-Infrastruktur mit vollem Root-Zugriff.
Bestellen
Dedizierte ServerBare-Metal-Server für maximale Leistung.
Bestellen

Methode 2: Benutzerdefinierte Konfiguration mit Cron (für nicht-standardmäßige Zeitpläne)

Verwenden Sie diese Methode, wenn Sie eine stündliche Rotation benötigen oder Logs für einen bestimmten Benutzer verwalten möchten.

Angenommen, die Anwendung läuft unter dem Benutzer testing und schreibt Logs nach /home/testing/logs/. Erstellen Sie eine Konfigurationsdatei:

nano /home/testing/logrotate.conf
/home/testing/logs/*.log {
    hourly
    rotate 24
    compress
    missingok
    create
}

Logrotate-Konfigurationsdatei Logrotate-Konfigurationsdatei

Diese Konfiguration rotiert Dateien stündlich, bewahrt 24 archivierte Kopien auf und erstellt nach jeder Rotation eine neue Log-Datei.

Erstellen Sie eine Test-Log-Datei:

cd ~
mkdir logs
touch logs/access.log

Führen Sie logrotate manuell mit Angabe der State-Datei aus:

logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force

Ausgabe:

reading config file /home/testing/logrotate.conf

Handling 1 logs

rotating pattern: /home/testing/logs/*.log  hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/testing/logs/access.log
  log does not need rotating

--state — legt fest, wo Informationen zur letzten Rotation gespeichert werden. --verbose — gibt ein detailliertes Ausführungsprotokoll aus. --force — erzwingt die Rotation, auch wenn sie laut Zeitplan noch nicht fällig ist.

Prüfen Sie den Inhalt der State-Datei:

cat /home/testing/logrotate-state

Logrotate speichert in dieser Datei, wann und welche Logs zuletzt verarbeitet wurden.

Automatisierung über Cron

Um die Rotation automatisch stündlich auszuführen, fügen Sie einen Cron-Job hinzu:

crontab -e

Fügen Sie am Ende der Datei folgende Zeile hinzu:

14 * * * * /usr/sbin/logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state

Cron-Aufgabe für logrotate Cron-Aufgabe für logrotate

Der Job wird täglich zur 14. Minute jeder Stunde ausgeführt.

Nützliche Tipps

  • Testen Sie Konfigurationsänderungen immer mit --debug, bevor Sie sie anwenden.
  • Verwenden Sie die create-Direktive, um korrekte Berechtigungen für neue Log-Dateien sicherzustellen.
  • Für Dienste mit hohem Traffic empfehlen sich kürzere Rotationsintervalle und Komprimierung.
  • Setzen Sie niemals die Berechtigungen 666 oder 777 für Log-Dateien oder -Verzeichnisse — das stellt ein ernstes Sicherheitsrisiko dar.

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