Einführung
Logrotate ist ein Systemdienstprogramm, das die automatische Rotation und Komprimierung von Protokolldateien verwaltet. Wenn Protokolldateien nicht gedreht, komprimiert und regelmäßig gelöscht würden, könnten sie möglicherweise den gesamten verfügbaren Speicherplatz auf einem System belegen.
Logrotate wird standardmäßig unter Ubuntu 16.04 installiert und ist so eingerichtet, dass es die Protokollrotationsanforderungen aller installierten Pakete erfüllt, einschließlichrsyslog
, dem Standard-Systemprotokollprozessor.
In diesem Artikel untersuchen wir die Standard-Logrotate-Konfiguration und konfigurieren dann die Protokollrotation für eine fiktive benutzerdefinierte Anwendung.
Voraussetzungen
In diesem Tutorial wird davon ausgegangen, dass Sie einen Ubuntu 16.04-Server mit einem nicht root-fähigen sudo-fähigen Benutzer haben, wie inInitial Server Setup with Ubuntu 16.04 beschrieben.
Logrotate ist auch auf vielen anderen Linux-Distributionen verfügbar, die Standardkonfiguration kann jedoch sehr unterschiedlich sein. Andere Abschnitte dieses Tutorials gelten weiterhin, solange Ihre Version von Logrotate Ubuntu 16.04 ähnelt. Befolgen Sie Schritt 1, um Ihre Logrotate-Version zu bestimmen.
Melden Sie sich als sudo-fähiger Benutzer bei Ihrem Server an, um zu beginnen.
Bestätigen Sie Ihre Logrotate-Version
Wenn Sie einen Nicht-Ubuntu-Server verwenden, stellen Sie zunächst sicher, dass Logrotate installiert ist, indem Sie nach den Versionsinformationen fragen:
logrotate --version
Outputlogrotate 3.8.7
Wenn Logrotate nicht installiert ist, wird eine Fehlermeldung angezeigt. Bitte installieren Sie die Software mit dem Paket-Manager Ihrer Linux-Distribution.
Wenn Logrotate installiert ist, die Versionsnummer sich jedoch erheblich unterscheidet, können Probleme mit einigen der in diesem Lernprogramm beschriebenen Konfigurationen auftreten. Lesen Sie die Dokumentation zu Ihrer spezifischen Version von Logrotate, indem Sie die Seiteman
lesen:
man logrotate
Als nächstes schauen wir uns die Standardkonfigurationsstruktur von Logrotate unter Ubuntu an.
Erkundung der Logrotate-Konfiguration
Die Konfigurationsinformationen von Logrotate finden Sie unter Ubuntu in der Regel an zwei Stellen:
-
/etc/logrotate.conf
: Diese Datei enthält einige Standardeinstellungen und richtet die Rotation für einige Protokolle ein, die keinem Systempaket gehören. Außerdem wird die Anweisunginclude
verwendet, um die Konfiguration aus einer beliebigen Datei im Verzeichnis/etc/logrotate.d
abzurufen. -
/etc/logrotate.d/
: Hier platzieren alle von Ihnen installierten Pakete, die Hilfe bei der Protokollrotation benötigen, ihre Logrotate-Konfiguration. Bei einer Standardinstallation sollten hier bereits Dateien für grundlegende Systemtools wieapt
,dpkg
,rsyslog
usw. vorhanden sein.
Standardmäßig konfiguriertlogrotate.conf
wöchentliche Protokollrotationen (weekly
) mit Protokolldateien, die dem Benutzerrootund der Gruppesyslog (su root syslog
) gehören Es werden vier Protokolldateien aufbewahrt (rotate 4
) und neue leere Protokolldateien erstellt, nachdem die aktuelle gedreht wurde (create
).
Schauen wir uns die Logrotate-Konfigurationsdatei eines Pakets in/etc/logrotate.d
an. cat
ist die Datei für das Paketdienstprogrammapt
:
cat /etc/logrotate.d/apt
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
undhistory.log
. Sie haben beide die gleichen Optionen. Alle Optionen, die nicht in diesen Konfigurationsblöcken festgelegt sind, erben die Standardwerte oder die in/etc/logrotate.conf
festgelegten. Die für dieapt
-Protokolle festgelegten Optionen sind:
-
rotate 12
: Bewahren Sie zwölf alte Protokolldateien auf. -
monthly
: einmal im Monat drehen. -
compress
: Komprimiert die gedrehten Dateien. Dies verwendet standardmäßiggzip
und führt zu Dateien, die mit.gz
enden. Der Komprimierungsbefehl kann mit der Optioncompresscmd
geändert werden. -
missingok
: Schreiben Sie keine Fehlermeldung, wenn die Protokolldatei fehlt. -
notifempty
: Drehen Sie die Protokolldatei nicht, wenn sie leer ist.
Es stehen viele weitere Konfigurationsoptionen zur Verfügung. Sie können über alle Informationen lesen, indem Sie in der Befehlszeileman logrotate
eingeben, um die Handbuchseite von Logrotate aufzurufen.
Als Nächstes richten wir eine Konfigurationsdatei ein, die Protokolle für einen fiktiven Service verarbeitet.
Einrichten einer Beispielkonfiguration
Für die Verwaltung von Protokolldateien für Anwendungen außerhalb der vorkonfigurierten und vorkonfigurierten Systemdienste stehen zwei Optionen zur Verfügung:
-
Erstellen Sie eine neue Logrotate-Konfigurationsdatei und platzieren Sie sie in
/etc/logrotate.d/
. Dies wird täglich als Benutzer vonrootzusammen mit allen anderen Standard-Logrotate-Jobs ausgeführt. -
Erstellen Sie eine neue Konfigurationsdatei und führen Sie sie außerhalb von Ubuntus Standard-Logrotate-Setup aus. Dies ist nur dann wirklich erforderlich, wenn Sie Logrotate als Nicht-root-Benutzer ausführen müssen oder wenn Sie Protokolle häufiger als täglich drehen möchten (eine
hourly
-Konfiguration in/etc/logrotate.d/
wäre unwirksam , da das Logrotate-Setup des Systems nur einmal am Tag ausgeführt wird).
Lassen Sie uns diese beiden Optionen anhand einiger Beispielkonfigurationen durchgehen.
Hinzufügen von Konfiguration zu/etc/logrotate.d/
Wir möchten die Protokollrotation für einen fiktiven Webserver konfigurieren, deraccess.log
underror.log
in/var/log/example-app/
setzt. Es wird als Benutzer und Gruppe vonwww-data
ausgeführt.
Um/etc/logrotate.d/
eine Konfiguration hinzuzufügen, öffnen Sie dort zunächst eine neue Datei:
sudo nano /etc/logrotate.d/example-app
Hier ist eine Beispielkonfigurationsdatei, die diese Protokolle verarbeiten kann:
/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
}
Einige der neuen Konfigurationsanweisungen in dieser Datei sind:
-
create 0640 www-data www-data
: Hiermit wird nach der Drehung eine neue leere Protokolldatei mit den angegebenen Berechtigungen (0640
), dem Eigentümer (www-data
) und der Gruppe (auchwww-data
) erstellt. -
sharedscripts
: Dieses Flag bedeutet, dass alle zur Konfiguration hinzugefügten Skripte nur einmal pro Lauf ausgeführt werden, anstatt für jede gedrehte Datei. Da diese Konfiguration mit zwei Protokolldateien im Verzeichnisexample-app
übereinstimmt, wird das inpostrotate
angegebene Skript ohne diese Option zweimal ausgeführt. -
postrotate
bisendscript
: Dieser Block enthält ein Skript, das ausgeführt wird, nachdem die Protokolldatei gedreht wurde. In diesem Fall laden wir unsere Beispiel-App neu. Dies ist manchmal erforderlich, damit Ihre Anwendung auf die neu erstellte Protokolldatei umschaltet. Beachten Sie, dasspostrotate
ausgeführt wird, bevor Protokolle komprimiert werden. Die Komprimierung kann lange dauern, und Ihre Software sollte sofort auf die neue Protokolldatei umstellen. Verwenden Sie stattdessen den Blocklastaction
für Aufgaben, bei denenafter Protokolle komprimiert werden müssen.
After customizing the config to fit your needs und speichern Sie es in/etc/logrotate.d
. Sie können es testen, indem Sie einen Probelauf durchführen:
sudo logrotate /etc/logrotate.conf --debug
Dadurch wirdlogrotate
aufgerufen, auf die Standardkonfigurationsdatei verwiesen und der Debug-Modus aktiviert.
Es werden Informationen darüber ausgegeben, mit welchen Protokolldateien Logrotate umgeht und was es ihnen angetan hätte. Wenn alles gut aussieht, sind Sie fertig. Der Standard-Logrotate-Job wird einmal täglich ausgeführt und enthält Ihre neue Konfiguration.
Als Nächstes versuchen wir ein Setup, bei dem die Standardkonfiguration von Ubuntu überhaupt nicht verwendet wird.
Erstellen einer unabhängigen Logrotate-Konfiguration
In diesem Beispiel wird eine App als Benutzersammy ausgeführt, die Protokolle generiert, die in/home/sammy/logs/
gespeichert sind. Wir möchten diese Protokolle stündlich drehen, daher müssen wir dies außerhalb der von Ubuntu bereitgestellten/etc/logrotate.d
-Struktur einrichten.
Zuerst erstellen wir eine Konfigurationsdatei in Ihrem Home-Verzeichnis. Öffne es in einem Texteditor:
nano /home/sammy/logrotate.conf
Fügen Sie dann die folgende Konfiguration ein:
/home/sammy/logrotate.conf
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Speichern und schließen Sie die Datei. Wir haben alle diese Optionen in den vorherigen Schritten gesehen, aber lassen Sie uns zusammenfassen: Diese Konfiguration dreht die Dateien stündlich, komprimiert und speichert vierundzwanzig alte Protokolle und erstellt eine neue Protokolldatei, um die gedrehte zu ersetzen.
Sie müssen die Konfiguration an Ihre Anwendung anpassen. Dies ist jedoch ein guter Anfang.
Um zu testen, ob es funktioniert, erstellen wir eine Protokolldatei:
cd ~
mkdir logs
touch logs/access.log
Nachdem wir an der richtigen Stelle eine leere Protokolldatei haben, führen wir den Befehllogrotate
aus.
Da die Protokolle im Besitz vonsammy sind, müssen wirsudo
nicht verwenden. Wirdomüssen jedoch einestate-Datei angeben. Diese Datei zeichnet auf, waslogrotate
beim letzten Ausführen gesehen und getan hat, damit sie weiß, was beim nächsten Ausführen zu tun ist. Dies wird für uns erledigt, wenn wir das Ubuntu Logrotate-Setup verwenden (es befindet sich bei/var/lib/logrotate/status
), aber wir müssen es jetzt manuell tun.
In diesem Beispiel hat Logrotate die Statusdatei direkt in unser Ausgangsverzeichnis gestellt. Ich kann überall hingehen, wo es leicht und bequem ist:
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
--verbose
druckt detaillierte Informationen darüber aus, was Logrotate tut. In diesem Fall hat es anscheinend nichts gedreht. Dies ist das erste Mal, dass Logrotate diese Protokolldatei sieht. Soweit bekannt, ist die Datei null Stunden alt und sollte nicht gedreht werden.
Wenn wir uns die Statusdatei ansehen, werden wir feststellen, dass Logrotate einige Informationen über den Lauf aufgezeichnet hat:
cat /home/sammy/logrotate-state
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2017-11-7-19:0:0
Logrotate notierte die Protokolle, die es sah, und wann es sie zuletzt für die Rotation in Betracht zog. Wenn wir diesen Befehl eine Stunde später ausführen, wird das Protokoll wie erwartet gedreht.
Wenn Sie Logrotate zwingen möchten, die Protokolldatei zu drehen, wenn dies sonst nicht der Fall wäre, verwenden Sie das Flag--force
:
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force
Dies ist nützlich, wenn Siepostrotate
und andere Skripte testen.
Schließlich müssen wir einen Cron-Job einrichten, um Logrotate stündlich auszuführen. Öffnen Sie die Crontab Ihres Benutzers:
crontab -e
Dies öffnet eine Textdatei. Möglicherweise enthält die Datei bereits einige Kommentare, die die erwartete Grundsyntax erläutern. Bewegen Sie den Cursor nach unten in eine neue leere 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 in der 14. Minute jeder Stunde und jeden Tag ausgeführt. Es führt im Grunde den gleichenlogrotate
-Befehl aus, den wir zuvor ausgeführt haben, obwohl wirlogrotate
aus Sicherheitsgründen auf den vollständigen Pfad von/usr/sbin/logrotate
erweitert haben. Es ist empfehlenswert, beim Schreiben von Cron-Jobs so deutlich wie möglich zu sein.
Speichern Sie die Datei und beenden Sie sie. Dadurch wird die crontab installiert und unsere Task wird nach dem angegebenen Zeitplan ausgeführt.
Wenn wir unser Protokollverzeichnis in ungefähr einer Stunde erneut besuchen, sollten wir die gedrehte und komprimierte Protokolldateiaccess.log.1.gz
finden (oder.2.gz
, wenn Sie Logrotate mit dem Flag--force
ausgeführt haben).
Fazit
In diesem Tutorial haben wir unsere Logrotate-Version überprüft, die Standardkonfiguration von Ubuntu Logrotate untersucht und zwei verschiedene Arten von benutzerdefinierten Konfigurationen eingerichtet. Um mehr über die Befehlszeilen- und Konfigurationsoptionen für Logrotate zu erfahren, können Sie die Handbuchseite lesen, indem Sieman logrotate
in Ihrem Terminal ausführen.