Protokolle mit logrotate unter Ubuntu 16.04 verwalten
Einrichtung von logrotate zur Verwaltung von System- und Anwendungsprotokollen.
Logrotate ist ein Systemwerkzeug für die automatische Rotation, Komprimierung und Bereinigung von Log-Dateien. Ohne eine entsprechende Verwaltung können Logs auf einem dauerhaft laufenden Server nach und nach den gesamten verfügbaren Speicherplatz belegen — logrotate verhindert genau das.
Auf Ubuntu 16.04 ist logrotate vorinstalliert und bereits so konfiguriert, dass es die Log-Rotation für alle Systempakete und Anwendungen übernimmt.
Installation prüfen
logrotate --version
Die Ausgabe sollte in etwa so aussehen:
logrotate 3.8.7
Struktur der Konfiguration
Die Konfiguration von logrotate ist auf zwei Orte verteilt:
/etc/logrotate.conf— die zentrale Konfigurationsdatei mit globalen Standardwerten und Vorlagen für Nicht-Systemdateien/etc/logrotate.d/— ein Verzeichnis mit dienstspezifischen Konfigurationsdateien, die die globalen Standardwerte ergänzen oder überschreiben
Als Beispiel schauen wir uns die eingebaute Konfiguration für apt an:
cat /etc/logrotate.d/apt
Ausgabe:
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Diese Datei definiert Rotationsregeln für term.log und history.log. Alle hier nicht angegebenen Direktiven fallen auf die globalen Standardwerte in /etc/logrotate.conf zurück.
Bedeutung der einzelnen Direktiven:
rotate 12— 12 archivierte Kopien aufbewahren, bevor alte gelöscht werdenmonthly— einmal im Monat rotierencompress— archivierte Logs komprimieren (standardmäßig gzip)missingok— keinen Fehler ausgeben, wenn die Log-Datei nicht vorhanden istnotifempty— Rotation überspringen, wenn die Log-Datei leer ist
Methode 1 — Konfiguration in /etc/logrotate.d/ ablegen
Dies ist der Standardansatz für die meisten Anwendungen. Die Konfiguration wird täglich als root zusammen mit allen anderen logrotate-Jobs ausgeführt.
Hier ein Beispiel für eine Anwendung, die access.log und error.log nach /var/log/example-app/ schreibt:
sudo nano /etc/logrotate.d/example-app
/var/log/example-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
Bedeutung der einzelnen Direktiven:
create 0640 www-data www-data— nach der Rotation eine neue leere Log-Datei mit den Berechtigungen0640anlegen, Eigentümer und Gruppe:www-datasharedscripts— daspostrotate-Skript nur einmal ausführen, nachdem alle passenden Dateien verarbeitet wurden, und nicht einmal pro Dateipostrotate ... endscript— Befehle, die nach der Rotation ausgeführt werden; in diesem Beispiel wird die Anwendung neu geladen, damit sie die neue Log-Datei verwendet
Nach der Konfiguration lässt sich alles im Trockenlauf testen, ohne Änderungen vorzunehmen:
sudo logrotate /etc/logrotate.conf --debug
Dieser Modus gibt eine detaillierte Übersicht darüber aus, was logrotate tun würde — es wird nichts verändert.
Unsere Produkte und Dienste
Methode 2 — Eigene Konfiguration mit cron-Zeitplanung
Wenn eine nicht standardmäßige Rotation benötigt wird — etwa stündlich — empfiehlt es sich, eine Konfiguration außerhalb von /etc/logrotate.d/ anzulegen und sie manuell per cron auszulösen.
In diesem Beispiel läuft die Anwendung als Benutzer newuser und schreibt Logs nach /home/newuser/logs/. Erstellen Sie eine lokale Konfigurationsdatei:
nano /home/newuser/logrotate.conf
/home/newuser/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Diese Konfiguration rotiert Logs stündlich, bewahrt 24 komprimierte Archive auf und legt jedes Mal eine neue Log-Datei an.
Erstellen Sie das Log-Verzeichnis und eine Testdatei:
cd ~
mkdir logs
touch logs/access.log
Führen Sie logrotate manuell aus und geben Sie dabei eine eigene Status-Datei an:
logrotate /home/newuser/logrotate.conf --state /home/newuser/logrotate-state --verbose --force
Ausgabe:
reading config file /home/newuser/logrotate.conf
Handling 1 logs
rotating pattern: /home/newuser/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/newuser/logs/access.log
log does not need rotating
--verbosegibt eine detaillierte Übersicht über alle Aktionen von logrotate aus.--forceerzwingt die Rotation unabhängig davon, ob sie fällig ist.--statelegt fest, wo logrotate die Aufzeichnung des letzten Laufs speichert.
Prüfen Sie den Inhalt der Status-Datei:
cat /home/newuser/logrotate-state
Ausgabe:
logrotate state -- version 2
"/home/newuser/logs/access.log" 2020-05-18-16:0:0
So verfolgt logrotate, welche Logs es wann zuletzt verarbeitet hat — damit weiß es beim nächsten Lauf genau, was zu tun ist. Führen Sie denselben Befehl eine Stunde später aus, und die Log-Datei wird wie erwartet rotiert.
Automatisierung mit cron
Um logrotate automatisch jede Stunde auszuführen, fügen Sie einen cron-Job hinzu:
crontab -e
Hängen Sie am Ende der Datei folgende Zeile an:
14 * * * * /usr/sbin/logrotate /home/newuser/logrotate.conf --state /home/newuser/logrotate-state
Dieser Job wird täglich zur 14. Minute jeder Stunde ausgeführt.
Hilfe
Bei Fragen oder wenn Sie Unterstützung brauchen, erreichen Sie uns jederzeit über das Ticketsystem — wir helfen Ihnen gern weiter!