GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So rotieren und komprimieren Sie Protokolldateien unter Linux mit Logrotate

In einem Linux-System und so ziemlich allen Systemen – Protokolldateien sind entscheidend, wenn es darum geht, Fehler zu untersuchen und zu beheben. Sie liefern wichtige Hinweise darauf, was bei verschiedenen Systemdiensten vor dem Ausfall schief gelaufen sein könnte.

Jeder auf Ihren Linux-Systemen installierte Dienst wie der Apache-Webserver oder der MySQL-Datenbankserver generiert Protokolldateien, die normalerweise im Verzeichnis /var/log gespeichert werden Verzeichnis. Wenn Sie den Inhalt dieses Verzeichnisses überprüfen, werden Sie Inhalte sehen, die denen ähneln, die wir unten haben:

Im Laufe der Zeit, wenn zusätzliche Informationen protokolliert werden, werden die Protokolldateien größer und nehmen mehr Speicherplatz auf Ihrer Festplatte ein. Bevor Sie es überhaupt wissen, werden die Protokolldateien an Größe zugenommen haben und einen Großteil Ihres Festplattenspeichers verschlingen, und wenn Sie nicht aufpassen, kann Ihnen der Speicherplatz leicht ausgehen.

Vor diesem Hintergrund ist es ratsam, die Protokolldateien auf einer überschaubaren Größe zu halten und alte Protokolleinträge zu löschen, die wertvollen Speicherplatz beanspruchen. Und hier kommt die Protokollrotation ins Spiel.

Was ist Protokollrotation?

Protokollrotation ist ein Prozess, der neue Protokolldateien und Archive erstellt und alte entfernt, um Speicherplatz zu sparen. Der Prozess benennt eine aktuelle Protokolldatei um. Beispiel:apport.log wird zu apport.log.1 und ein neues apport.log log-Datei wird erstellt, um neue Log-Einträge zu protokollieren. Ältere Protokolldateien sind normalerweise komprimiert und werden als  apport.log.2.gz angezeigt , apport.log.3.gz , apport.log.4.gz , und so weiter.

Der Protokollrotationsprozess wird durch ein Dienstprogramm namens logrotate erleichtert . Dies ist ein Tool, das die Rotation von Protokolldateien und die Archivierung und Entfernung alter erleichtert, um Speicherplatz freizugeben. Zusammenfassend bewirkt logrotate Folgendes:

  • Erstellen neuer Protokolldateien nach dem Rotieren alter.
  • Archivierung alter Logfiles.
  • Löschen älterer Protokolldateien, die rotiert wurden, um Platz zu sparen.

Die Protokollrotation wird normalerweise aktiviert, wenn die Größe der Protokolldateien zunimmt und eine bestimmte Grenze überschreitet.

Wie das Dienstprogramm logrotate funktioniert

Bevor wir die Funktionsweise des logrotate-Dienstprogramms untersuchen, stellen Sie sicher, dass logrotate auf Ihrem System installiert ist. Geben Sie dazu den folgenden Befehl ein:

Für Debian-/Ubuntu-Systeme:

$ sudo apt-get install logrotate -y

Für CentOS / RHEL / Fedora-System:

$ sudo yum install logrotate -yor $ sudo dnf install logrotate -y

Führen Sie den folgenden Befehl aus, um die Logrotate-Version zu überprüfen,

linuxtech[email protected]:~$ logrotate --versionlogrotate 3.14.0    Standard-E-Mail-Befehl:       /usr/bin/mail    Standard-Komprimierungsbefehl:   /bin/gzip    Standard-Dekomprimierungsbefehl:/bin/gunzip    Standard-Komprimierungserweiterung:.gz Pfad der Standardzustandsdatei:    /var/lib/logrotate/status    ACL-Unterstützung:                ja    SELinux-Unterstützung:            ja[email protected]:~$

Aus der Ausgabe können wir deutlich erkennen, dass wir die logrotate-Version 3.14.0 haben. Standardmäßig ist logrotate in modernen Linux-Distributionen vorinstalliert und muss daher nicht installiert werden.

Logrotate-Konfigurationsdateien

Logrotate wird täglich als Cron-Job ausgeführt, durchsucht verschiedene Protokolldateien, rotiert sie und löscht ältere Protokolldateien, wie in der Konfigurationsdatei definiert. Es gibt zwei Hauptkonfigurationsquellen, auf die Sie besonders achten müssen:

/etc/logrotate.conf – Dies ist die Hauptkonfigurationsdatei für das Tool logrotate. Es enthält Standardeinstellungen und erleichtert die Protokollrotation für systemfremde Paketprotokolle. Insbesondere wird ein "include" verwendet ‘-Anweisung zum Pullen von Konfigurationen in der Datei ‘/etc/logrotate.d ' Verzeichnis. Werfen wir einen Blick auf die Konfigurationsdatei.

$ cat /etc/logrotate.conf

Von der gezeigten Konfiguration rotiert die Datei /etc/logrotate.conf Protokolldateien wöchentlich Grundlage wie in Zeile 3 angegeben .

  • Zeile 7 gibt an, dass der root-Benutzer und die adm-Gruppe Eigentümer der Protokolldateien sind.
  • Zeile 10 gibt an, dass Protokolldateien nur für 4 Wochen gesichert werden, wonach ältere gelöscht oder entfernt werden, um mehr Speicherplatz zu schaffen.
  • Zeile 13 weist die Erstellung einer neuen Protokolldatei nach der Rotation der aktuellen Protokolldatei an.
  • Die include-Anweisung in Zeile 22 zieht die Konfigurationen von Anwendungsdateien, die im Verzeichnis /etc/logrotate.d aufgelistet sind.

/etc/logrotate.d – Dies ist ein Verzeichnis, das die logrotate-Konfiguration installierter Pakete enthält, deren Protokolldateien eine Protokollrotation erfordern. Typischerweise finden Sie wahrscheinlich auch Konfigurationsdateien von Systemwerkzeugen wie apt &dpkg (für Debian-Systeme), rsyslog, ufw und cups-daemon. Hier ist, was Sie finden würden:

[email protected]:~$ ls -l /etc/logrotate.d/total 60-rw-r--r-- 1 root root 120 Sep  5   2019 alternatives-rw-r--r-- 1 root root 126 Dez  4 20:25 apport-rw-r--r-- 1 root root 173 Apr  9 11:21 apt-rw-r--r-- 1 root root  91 Apr  1 10:49 bootlog-rw-r --r-- 1 root root 130 21. Januar 2019 btmp-rw-r--r-- 1 root root 181 17. Feb 08:19 cups-daemon-rw-r--r-- 1 root root 112 5. September 2019 dpkg-rw-r--r-- 1 root root 329 4. Februar 2019 nginx-rw-r--r-- 1 root root 94. Februar 8  2019 ppp-rw-r--r-- 1 root root 501 7. März 2019 rsyslog-rw-r--r-- 1 root root 677 29. November 02:08 Speech-Dispatcher-rw-r--r-- 1 root root 119 30. März 21:49 ubuntu-advantage-tools-rw-r --r-- 1 root root 178 Jan. 21 22:16 ufw-rw-r--r-- 1 root root 235 Apr 13 23:37 unattended-upgrades-rw-r--r-- 1 root root 145 Feb 19  2018 wtmp[email protected]:~$

Werfen wir einen Blick auf die Konfigurationsdatei des Paketmanager-Tools dpkg.

$ cat -n /etc/logrotate.d/dpkg

  • monatlich :Dies weist die Rotation der Protokolldateien einmal im Monat an
  • 12 drehen :12 alte Logfiles werden gesichert.
  • komprimieren :Dies impliziert, dass rotierte Dateien mit der standardmäßigen gzip-Komprimierung komprimiert werden müssen, wobei Protokolldateien eine .gz-Dateierweiterung haben.
  • 644-Root-Root erstellen :Erstellt eine neue Protokolldatei, sobald die Protokollrotation abgeschlossen ist, mit oktalen Dateiberechtigungen von 644 mit Benutzer- und Gruppenbesitz von root.
  • fehltok :Die Direktive unterdrückt Fehlermeldungen bei fehlender Logdatei.
  • Benachrichtigung leer :Dies ignoriert die Dateirotation, wenn die Protokolldatei leer ist.

Erstellen Sie eine Beispiel-Logrotate-Konfigurationsdatei

Nehmen wir an, dass wir eine Anwendung haben, die als linuxtechi-Benutzer ausgeführt wird und Protokolldateien generiert, die in /home/linuxtechi/logs gespeichert werden Verzeichnis. Wir müssen die Protokolldateien so einstellen, dass sie wöchentlich rotieren.

Aber zuerst werden wir wie gezeigt eine logrotate-Konfigurationsdatei im Home-Verzeichnis erstellen:

$ vim /home/linuxtechi/logrotate.conf

Als nächstes werden wir die gezeigte Konfiguration einfügen:

/home/linuxtechi/logs/*.log {    wöchentlich    fehltok    rotieren 14    komprimieren    erstellen}

Lassen Sie uns das in einen Zusammenhang bringen:

Die Protokolldateien werden wöchentlich rotiert, wobei Fehlermeldungen bei fehlenden Protokolldateien unterdrückt werden. 14 Logdateien werden im Laufe des Monats mit der Erstellung einer neuen Logdatei nach Rotation der aktuellen Logdatei gesichert.

Jetzt erstellen wir ein Protokollverzeichnis, das die Protokolldateien der Anwendung enthält, und erstellen dann eine Protokolldatei namens app.log.

[email protected]:~$ mkdir logs &&cd logs[email protected]:~/logs$ touch app.log[email protected]:~/logs$ lsapp.log[email protected]:~/logs$

Jetzt führen wir den logrotate-Befehl aus, um eine logrotate-Statusdatei im Home-Verzeichnis zu erstellen, um zu überprüfen, ob die Log-Einträge erstellt wurden oder nicht.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose

Sie erhalten eine Ausgabe ähnlich der folgenden:

Aus der Ausgabe geht hervor, dass die Protokolldatei aus dem einfachen Grund nicht rotiert wurde, weil die Rotation wöchentlich erfolgt und die Protokolldatei kaum eine Stunde alt ist.

Untersuchen Sie die logrotate-Datei, um zu überprüfen, ob Informationen über den Protokollrotationslauf aufgezeichnet wurden.

[email protected]:~$ cat logrotate-statelogrotate state -- version 2"/home/linuxtechi/logs/app.log" 2020-5-24-17:0:0[email protected]:~$

Aus der Ausgabe können wir sehen, dass das Dienstprogramm logrotate bestätigt hat, wann es die Protokolldatei zuletzt für die Rotation betrachtet hat, und der Zeitstempel wird gedruckt.

Nun zwingen wir logrotate mit der –force dazu, die Logdatei zu rotieren – was es ansonsten vorerst nicht tun würde, da das angegebene Zeitintervall noch nicht überschritten ist Flagge wie gezeigt.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose --force

Wenn Sie zum Protokollverzeichnis zurückkehren, sehen Sie eine zusätzliche Protokolldatei, die wie gezeigt rotiert und komprimiert wurde.

[email protected]:~$ cd logs/[email protected]:~/logs$ lsapp.log  app.log.1.gz[email protected]:~/logs$

Komprimieren und rotieren Sie die Protokolldateien basierend auf der Größe

Manchmal können Protokolldateien größer werden und Speicherplatz verschlingen, sogar vor dem festgelegten Zeitintervall für die Rotation, ob täglich, wöchentlich oder monatlich.

Eine Möglichkeit, das Problem zu lösen, besteht darin, die maximale Größe der Datei anzugeben, bei deren Überschreitung die Rotation der Protokolldatei ausgelöst wird. Geben Sie dazu die maxsize an Option in der logrotate-Datei.

Um beispielsweise eine Rotation auszulösen, wenn die Dateigröße auf mehr als 40 Megabyte anwächst, fügen Sie die Option hinzu:

Maximalgröße 40 MB

Nehmen wir an, wir erstellen eine benutzerdefinierte Protokollrotationsdatei für unsere Anwendung im Ordner /etc/logrotate.d,

[email protected]:~$ cd /etc/logrotate.d/[email protected]:/etc/logrotate.d$ sudo vi custom-app/home/linuxtechi/logs/app-access.log{    daily    missingok Größe 40M    4 drehen    komprimieren    erstellen}

Speichern und schließen Sie die Datei,

Das Suffix M steht für Megabyte , Für Kilobyte Verwenden Sie k während G gibt die Größe in Gigabyte an .

Die Aussage impliziert, dass Protokolldateien, die größer als 40 Megabyte sind, ohne Rücksicht auf das Zeitintervall der Rotation rotiert werden. Dies bedeutet, dass eine Protokolldatei, deren Rotation nach 1 Stunde fällig ist, vor dem angegebenen Intervall rotiert wird, wenn sie den Schwellenwert von 40 MB überschreitet.

Lassen Sie uns einige Daten in die Protokolldatei unserer benutzerdefinierten Anwendung kopieren und dann sehen, wie logrotate die Protokolldateien rotiert,

[email protected]:~$ dd if=/dev/zero of=/home/linuxtechi/logs/app-access.log bs=1M count=2525+0 Records in25+0 Records out26214400 Bytes (26 MB, 25 MiB) kopiert, 0,0422015 s, 621 MB/s[E-Mail-geschützt]:~$ du -sh /home/linuxtechi/logs/app-access.log25M     /home/linuxtechi/logs/app-access.log[E-Mail-geschützt] :~$

Verwenden Sie „-d ’ im logrotate-Befehl verwenden, um logrotate in der Protokolldatei trocken auszuführen, führen Sie den folgenden Befehl aus:

$ logrotate -d /etc/logrotate.d/custom-app

Wie wir in der Ausgabe sehen können, rotiert logrotate die Protokolldatei nicht, da die Größe nicht mehr als 40 MB beträgt.

Lassen Sie uns jetzt die Größe der Protokolldatei auf mehr als 40 MB erhöhen,

[email protected]:~$ cd logs/[email protected]:~/logs$ dd if=/dev/zero of=app-access.log bs=1M count=4545+0 Datensätze in45+0 Datensätze out47185920 Bytes (47 MB, 45 MiB) kopiert, 0,136979 s, 344 MB/s[E-Mail-geschützt]:~/logs$ du -sh app-access.log46M     app-access.log[E-Mail-geschützt]:~/logs$ 

Versuchen Sie nun erneut, den Befehl logrotate mit der Option „-d“ auszuführen,

Die obige Ausgabe bestätigt, dass logroate die Protokolldatei rotieren wird, da die Größe mehr als 40 MB beträgt.

Zusätzlich zur Verbesserung der Rotation von Protokolldateien basierend auf der Größe ist es ratsam sicherzustellen, dass die logrotate-Konfigurationsdatei regelmäßig mithilfe eines Cron-Jobs aufgerufen wird. Dies ist besonders wichtig für Protokolldateien, die so schnell an Größe zunehmen und das Risiko eingehen, Ihren Festplattenspeicher zu belegen.

Dazu gibt es zwei Möglichkeiten:

Sie können das logrotate-Skript aus dem Verzeichnis /etc/cron.daily in den Speicherort /etc/cron.hourly kopieren. Dadurch wird die Log-Rotation auf eine stündliche statt auf eine tägliche Basis umgestellt.

Eine andere Möglichkeit besteht darin, einen Cronjob anzugeben in der Datei /etc/crontab wie gezeigt

*/10 * * * * /etc/cron.daily/logrotate

Dadurch wird die Rotation alle 10 Minuten ausgelöst.

Die Verwendung von crontab zum Aufrufen des logrotate-Skripts zusätzlich zur Angabe der maximalen Größe mit der maxsize-Direktive stellt eine perfekte Kombination dar, um sicherzustellen, dass Ihre Protokolldateien rechtzeitig rotiert werden, um zu vermeiden, dass Ihre Festplatte voll wird.

Weitere Optionen mit dem Logrotate-Tool finden Sie auf den Manpages wie gezeigt:

Fazit

In diesem Leitfaden haben wir die Bedeutung von Protokolldateien beleuchtet, die Bedrohung, die sie verursachen können, wenn sie an Größe zunehmen, und wie das Tool logrotate Ihnen helfen kann, die Größe von Protokolldateien auf Ihrem System zu verwalten. Wir haben uns auch einige der verfügbaren Optionen zur Verwendung in der Logrotate-Konfiguration angesehen.


Linux
  1. Rotieren und archivieren Sie Protokolle mit dem Linux-Befehl logrotate

  2. So verschlüsseln Sie Dateien mit gocryptfs unter Linux

  3. So verwalten Sie Protokolldateien mit Logrotate unter Linux

  4. So komprimieren und dekomprimieren Sie Dateien unter Linux

  5. So finden Sie große Dateien unter Linux mit den Befehlen find und du

So benennen Sie Dateien und Verzeichnisse in Linux um

So schließen Sie Dateien und Verzeichnisse mit Rsync aus

So komprimieren Sie Dateien und Verzeichnisse unter Linux

Umgang mit ISO-Dateien unter Linux mit Mount, AcetoneISO und Furious

So installieren und verwenden Sie Pigz, um Dateien unter Linux schneller zu komprimieren

Dateien mit logrotate löschen