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 aufbewahrenmonthly— einmal pro Monat rotierencompress— alte Logs mit gzip komprimierenmissingok— keinen Fehler ausgeben, wenn die Log-Datei fehltnotifempty— 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 Rechten0640, Besitzer und Gruppewww-datasharedscripts— daspostrotate-Skript wird nur einmal ausgeführt, nachdem alle Dateien verarbeitet wurden, nicht für jede Datei einzelnpostrotate ... 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
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
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
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
666oder777fü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!