Einführung
Logrotate ist ein Systemdienstprogramm, das die automatische Rotation und Komprimierung von Protokolldateien verwaltet. Wenn Protokolldateien nicht rotiert, komprimiert und regelmäßig bereinigt würden, könnten sie irgendwann den gesamten verfügbaren Festplattenspeicher auf einem System verbrauchen.
Logrotate ist standardmäßig auf Ubuntu 22.04 installiert und ist so eingerichtet, dass es die Rotationsanforderungen aller installierten Pakete, einschließlich rsyslog
, dem standardmäßigen Systemprotokollprozessor, verwaltet.
In diesem Artikel werden wir die Standard-Logrotate-Konfiguration erkunden und anschließend die Protokollrotation für eine fiktive benutzerdefinierte Anwendung konfigurieren.
Voraussetzungen
Dieses Tutorial setzt voraus, dass Sie einen Ubuntu 22.04-Server mit einem nicht-root-Sudo-fähigen Benutzer haben, wie im Ersten Server-Setup mit Ubuntu 22.04 beschrieben.
Logrotate ist auch auf vielen anderen Linux-Distributionen verfügbar, aber die Standardkonfiguration kann sehr unterschiedlich sein. Andere Abschnitte dieses Tutorials sind weiterhin anwendbar, solange Ihre Version von Logrotate ähnlich wie die von Ubuntu 22.04 ist. Befolgen Sie Schritt 1, um Ihre Logrotate-Version zu bestimmen.
Melden Sie sich als Ihr sudo-fähiger Benutzer auf Ihrem Server an, um zu beginnen.
Schritt 1 — Bestätigung Ihrer Logrotate-Version
Logrotate ist standardmäßig auf Ubuntu installiert. Wenn Sie es jedoch installieren müssen, führen Sie die folgenden Befehle aus, um Ihre Paketliste zu aktualisieren und das Paket abzurufen:
Wenn Sie einen nicht-Ubuntu-Server verwenden, stellen Sie zunächst sicher, dass Logrotate installiert ist, indem Sie nach seiner Versionsinformation fragen:
Outputlogrotate 3.19.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
Wenn Logrotate installiert ist, aber die Versionsnummer signifikant unterschiedlich ist, können Probleme mit einigen der in diesem Tutorial behandelten Konfigurationsoptionen auftreten. Lesen Sie die Dokumentation für Ihre spezifische Version von Logrotate, indem Sie ihre Handbuchseite (man
-Seite) lesen:
Sie können auch die Online-Version der Logrotate-Dokumentation konsultieren. Als nächstes betrachten wir die Standardkonfigurationsstruktur von Logrotate auf Ubuntu.
Schritt 2 — Erkunden der Logrotate-Konfiguration
Die Konfigurationsinformationen von Logrotate finden sich im Allgemeinen an zwei Stellen auf Ubuntu:
/etc/logrotate.conf
: Diese Datei enthält einige Standard-Einstellungen und richtet die Rotation für einige Protokolle ein, die keiner Systempakete gehören. Sie verwendet auch eineinclude
-Anweisung, um Konfigurationen aus jeder Datei im Verzeichnis/etc/logrotate.d
einzubinden./etc/logrotate.d/
: Hier platziert jede von Ihnen installierte Paket, die Unterstützung bei der Protokollrotation benötigen, ihre Logrotate-Konfigurationen. Bei einer Standardinstallation sollten bereits Dateien für wichtige Systemwerkzeuge wieapt
,dpkg
,rsyslog
usw. vorhanden sein.
Standardmäßig konfiguriert logrotate.conf
wöchentliche Protokollrotationen, mit Protokolldateien, die dem Benutzer root und der Gruppe syslog gehören, wobei vier Protokolldateien auf einmal aufbewahrt werden (rotate 4
), und neue leere Protokolldateien werden erstellt, nachdem die aktuelle rotiert wurde (create
).
Lassen Sie uns die Logrotate-Konfigurationsdatei eines Pakets im Verzeichnis /etc/logrotate.d
betrachten. Lesen Sie die Datei für das Paket-Dienstprogramm apt
mit cat
:
Output/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Diese Datei enthält Konfigurationsblöcke für zwei verschiedene Protokolldateien im Verzeichnis /var/log/apt/
: term.log
und history.log
. Beide haben die gleichen Optionen. Alle Optionen, die nicht in diesen Konfigurationsblöcken festgelegt sind, erben die Standardwerte oder die in /etc/logrotate.conf
festgelegten Werte. Jede Einstellung in einer Logrotate-Datei überschreibt die Standardwerte von Logrotate, die in /etc/logrotate.conf
konfiguriert sind. Die für die apt
-Protokolle festgelegten Optionen sind:
rotate 12
: Behalte zwölf alte Protokolldateien. Dies überschreibt die Standardoptionrotate 4
.monatlich
: Rotiere einmal im Monat. Dies überschreibt die Standardoptionwöchentlich
.komprimieren
: Komprimiere die rotierten Dateien. Dies verwendet standardmäßiggzip
und führt zu Dateien mit der Endung.gz
. Der Komprimierungsbefehl kann mit der Optioncompresscmd
geändert werden.missingok
: Schreibe keine Fehlermeldung, wenn die Protokolldatei fehlt.notifempty
: Rotiere die Protokolldatei nicht, wenn sie leer ist.
Diese Konfigurationsdateien erben auch das Standardverhalten create
, das Logrotate anweist, nach der Rotation neue Protokolle zu erstellen. Dies könnte mit nocreate
überschrieben werden, obwohl dies effektiv die meisten anderen Funktionen deaktivieren würde.
Es gibt viele weitere Konfigurationsoptionen. Sie können alles darüber lesen, indem Sie man logrotate
in der Befehlszeile eingeben, um die Handbuchseite von Logrotate aufzurufen.
Als nächstes richten wir eine Konfigurationsdatei ein, um Protokolle für einen fiktiven Dienst namens Ihr-Dienst
zu verarbeiten.
Schritt 3 — Ein Beispielkonfigurationsdatei einrichten
Um Protokolldateien außerhalb der vorverpackten und vorconfigurierten Systemdienste mit logrotate zu verwalten, haben wir zwei Möglichkeiten:
- Erstellen Sie eine neue Logrotate-Konfigurationsdatei und platzieren Sie sie in
/etc/logrotate.d/
. Diese wird täglich als Benutzer root zusammen mit allen anderen Standard-Logrotate-Jobs ausgeführt. - Erstellen Sie eine neue Konfigurationsdatei und führen Sie sie außerhalb des standardmäßigen Logrotate-Setups von Ubuntu aus. Dies ist nur wirklich notwendig, wenn Sie Logrotate als nicht-root-Benutzer ausführen müssen oder wenn Sie Protokolle häufiger als täglich rotieren möchten (eine
hourly
-Konfiguration in/etc/logrotate.d/
wäre ineffektiv, da das Logrotate-Setup des Systems nur einmal täglich ausgeführt wird).
Lassen Sie uns diese beiden Optionen anhand einiger Beispielaufstellungen durchgehen.
Hinzufügen von Konfiguration zu /etc/logrotate.d/
Wir möchten die Protokollrotation für einen fiktiven Webserver konfigurieren, der eine access.log
und error.log
in /var/log/your-app/
ablegt. Er wird als Benutzer und Gruppe www-data
ausgeführt.
Fügen Sie eine Konfiguration für die Protokolldateien von your-app
zu /etc/logrotate.d/
hinzu, indem Sie zunächst eine neue Datei im Verzeichnis /etc/logrotate.d
mit nano
oder Ihrem bevorzugten Editor öffnen:
Fügen Sie die folgenden Zeilen zu Ihrer neuen Konfigurationsdatei hinzu:
/var/log/your-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app
endscript
}
Einige der neuen Konfigurationsanweisungen in dieser Datei sind:
create 0640 www-data www-data
: Dies erstellt eine neue leere Protokolldatei nach der Rotation mit den angegebenen Berechtigungen (0640
), dem Besitzer (www-data
) und der Gruppe (auchwww-data
).sharedscripts
: Dieses Flag bedeutet, dass Skripte, die zur Konfiguration hinzugefügt werden, nur einmal pro Durchlauf ausgeführt werden, anstatt für jede rotierte Datei. Da der Pfad/var/log/your-app/*.log
ein Platzhalter*
enthält, würde diese Konfiguration eine beliebige Anzahl von Protokolldateien im Verzeichnisyour-app
übereinstimmen. Ohne die Optionsharedscripts
würde das impostrotate
angegebene Skript jedes Mal ausgeführt, wenn logrotate eine Protokolldatei ohne diese Option verarbeitet.postrotate
zuendscript
: Dieser Block enthält ein Skript, das nach der Rotation der Protokolldatei ausgeführt wird. In diesem Fall laden wir unsere Beispielanwendung neu. Dies ist manchmal erforderlich, um Ihre Anwendung auf die neu erstellte Protokolldatei umzuschalten.
Beachten Sie, dasspostrotate
vor der Komprimierung von Protokollen ausgeführt wird. Die Komprimierung kann lange dauern, und Ihre Software sollte sofort zur neuen Protokolldatei wechseln. Für Aufgaben, die ausgeführt werden müssen nach der Komprimierung von Protokollen, verwenden Sie stattdessen denlastaction
-Block.
Um zu speichern und nano
zu beenden, drücken Sie Strg+X
und geben dann Y
und anschließend Eingabetaste
ein. Sie können die Konfigurationsdatei testen, indem Sie eine Trockenlauf durchführen:
Dieser Befehl ruft logrotate
auf, zeigt auf die Standardkonfigurationsdatei und schaltet den Debug-Modus ein.
Informationen werden darüber ausgegeben, welche Protokolldateien Logrotate bearbeitet und was es mit ihnen getan hätte. Wenn alles gut aussieht, bist du fertig. Der Standard-Logrotate-Job wird einmal täglich ausgeführt und deine neue Konfiguration einschließen.
Als nächstes werden wir eine Einrichtung versuchen, die die Standardkonfiguration von Ubuntu überhaupt nicht verwendet.
Schritt 4 — Erstellen einer unabhängigen Logrotate-Konfiguration
In diesem Beispiel haben wir eine App, die unter unserem Benutzer sammy
läuft und Protokolle generiert, die in /home/sammy/logs/
gespeichert sind. Wir möchten diese Protokolle stündlich rotieren, daher müssen wir dies außerhalb der von Ubuntu bereitgestellten Struktur /etc/logrotate.d
einrichten.
Zuerst erstellen wir eine Konfigurationsdatei in unserem Home-Verzeichnis. Öffne sie in einem Texteditor:
Dann füge die folgende Konfiguration ein:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Speichere und schließe die Datei. Wir sind all diese Optionen bereits in früheren Schritten begegnet, aber lassen uns zusammenfassen: Diese Konfiguration wird die Dateien stündlich rotieren, sie komprimieren und vierundzwanzig alte Protokolle behalten und eine neue Protokolldatei erstellen, um die rotierte zu ersetzen.
Du musst die Konfiguration an deine Anwendung anpassen, aber das ist ein guter Anfang.
Um zu testen, ob die Konfiguration funktioniert, erstellen wir eine Protokolldatei. Gehen Sie zunächst mit dem Befehl cd ~
zum Home-Verzeichnis Ihres Benutzers. Erstellen Sie dann mit dem Befehl mkdir
ein Verzeichnis für die Protokolle. Erstellen Sie schließlich eine leere Datei im Verzeichnis logs
mit dem Befehl touch
. Führen Sie die folgenden Befehle aus, um diese Schritte abzuschließen:
Jetzt, da wir eine leere Protokolldatei am richtigen Ort haben, führen wir den Befehl logrotate
aus.
Da die Protokolle im Besitz von sammy
sind, müssen wir kein sudo
verwenden. Wir müssen jedoch eine Zustands-Datei angeben. Diese Datei protokolliert, was logrotate
gefunden hat und welche Aktionen es beim letzten Ausführen ausgeführt hat, damit es beim nächsten Mal weiß, was zu tun ist. Diese Zustandsverfolgung wird für uns behandelt, wenn die Standardkonfiguration /etc/logrotate.conf
verwendet wird. Die Zustandsdatei wird in /var/lib/logrotate/status
gespeichert. Da wir die Standardkonfiguration nicht verwenden, müssen wir den Speicherort der Zustandsdatei manuell konfigurieren.
Wir lassen Logrotate die Zustandsdatei für dieses Beispiel direkt in unserem Home-Verzeichnis platzieren. Es kann überall platziert werden, wo es zugänglich und bequem ist. Führen Sie den folgenden Befehl aus, um die von Ihnen erstellte /home/sammy/logrotate.conf
zu verwenden und den Zustand zu protokollieren, den logrotate findet:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Outputreading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
Die --verbose
-Flagge gibt detaillierte Informationen darüber aus, was Logrotate tut. In diesem Fall wurde nichts rotiert. Das ist das erste Mal, dass Logrotate diese Protokolldatei findet, und sie ist null Stunden alt, also sollte sie nicht rotiert werden.
Wenn wir die Zustandsdatei mit dem cat
-Dienstprogramm untersuchen, werden wir feststellen, dass Logrotate einige Informationen über den Durchlauf aufgezeichnet hat:
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2022-07-2-19:0:0
Logrotate hat die Protokolle notiert, die es gesehen hat, und wann es sie zuletzt zur Rotation in Betracht gezogen hat. Wenn wir diesen Befehl eine Stunde später ausführen, wird das Protokoll wie erwartet rotiert werden.
Wenn Sie Logrotate zwingen möchten, das Protokolldatei zu rotieren, wenn es es sonst nicht getan hätte, verwenden Sie das --force
-Flag:
Dies ist nützlich beim Testen von postrotate
und anderen Skripten.
Zuletzt müssen wir einen Cron-Job einrichten, um Logrotate jede Stunde auszuführen. Öffnen Sie die Crontab Ihres Benutzers:
Dies öffnet eine Textdatei. Wenn es das erste Mal ist, dass Sie cron verwenden, werden Sie möglicherweise aufgefordert, einen Standard-Texteditor auszuwählen. Wenn Sie keine Präferenz haben, empfehlen wir nano
für neue Benutzer. Es können bereits einige Kommentare in der Datei vorhanden sein, die die Cron-Syntax erklären. Bewegen Sie den Cursor nach unten zu einer neuen leeren Zeile am Ende der Datei und fügen Sie Folgendes hinzu:
crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
Diese Aufgabe wird um die 14. Minute jeder Stunde, jeden Tag ausgeführt. Es führt nahezu denselben logrotate
-Befehl aus, den wir zuvor ausgeführt haben, obwohl wir logrotate
auf seinen vollständigen Pfad /usr/sbin/logrotate
erweitert haben, um sicher zu gehen. Es ist eine gute Praxis, vollständige Pfade zu verwenden, wenn Sie Cron-Jobs schreiben. Um mehr über Cron zu erfahren, können Sie unsere anderen Tutorials überprüfen.
Speichern Sie die Datei und verlassen Sie sie. Dadurch wird die Crontab installiert und unsere Aufgabe wird gemäß dem festgelegten Zeitplan ausgeführt.
Wenn wir unser Protokollverzeichnis in etwa einer Stunde erneut überprüfen, sollten wir die rotierte und komprimierte Protokolldatei access.log.1.gz
finden (oder .2.gz
, wenn Sie Logrotate mit der --force
-Flag ausgeführt haben).
Fazit
In diesem Tutorial haben wir unsere Logrotate-Version überprüft, die Standardkonfiguration von Ubuntu Logrotate erkundet und zwei verschiedene Arten von benutzerdefinierten Konfigurationen eingerichtet. Um mehr über die Befehlszeile und Konfigurationsoptionen zu erfahren, die für Logrotate verfügbar sind, können Sie seine Handbuchseite aufrufen, indem Sie man logrotate
in Ihrem Terminal ausführen oder die Online-Dokumentation besuchen.