So verwalten Sie Protokolldateien mit Logrotate unter Ubuntu 16.04

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 Seitemanlesen:

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 Anweisungincludeverwendet, um die Konfiguration aus einer beliebigen Datei im Verzeichnis/etc/logrotate.dabzurufen.

  • /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. catist 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:

  1. 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.

  2. 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 (einehourly-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-dataausgefü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 Blocklastactionfü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 Befehllogrotateaus.

Da die Protokolle im Besitz vonsammy sind, müssen wirsudo nicht verwenden. Wirdomüssen jedoch einestate-Datei angeben. Diese Datei zeichnet auf, waslogrotatebeim 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.