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

Verwenden von Logrotate unter Linux zum Verwalten von Protokolldateien (mit Beispielen)

Das Linux-Betriebssystem und ausgeführte Anwendungen generieren häufig Protokolle in Dateien. Diese Dateien werden oft in /var/log gespeichert Verzeichnis oder eine andere von der App angegebene Datei. Wenn diese Protokolldateien nicht rotiert, komprimiert und regelmäßig bereinigt werden, verbrauchen sie schließlich den gesamten verfügbaren Speicherplatz, wodurch der Server einfriert.

In diesem Leitfaden sehen wir uns an, wie Logrotate funktioniert, und sehen uns dann ein Beispiel an, wie Logrotation für unsere benutzerdefinierte App konfiguriert wird.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie:

  • Eine moderne Linux-Distribution wie Ubuntu, Debian, Centos, Rhel, Rocky Linux
  • Root-Zugriff auf den Server oder ein Benutzer mit sudo-Berechtigungen

Überprüfen Sie Ihre Logrotate-Version mit diesem Befehl:

logrotate --version

Ausgabe von meinem System:

# logrotate --version
logrotate 3.8.6

Wenn Logrotate nicht installiert ist, erhalten Sie eine Fehlermeldung. Bitte installieren Sie die Software mit dem Paketmanager Ihrer Linux-Distribution.

Logrotate-Konfiguration

Die Logrotate-Konfiguration finden Sie in dieser Datei /etc/logrotate.conf . Hier befinden sich die Standardeinstellungen. Sie finden auch einige Rotationskonfigurationen für Protokolle, die keinem Systempaket gehören.

Die wichtigste Zeile in dieser Konfigurationsdatei ist include /etc/logrotate.d . Dies weist logrotate an, auch Konfigurationen zu prüfen, die in diesem Verzeichnis hinzugefügt wurden. Das bedeutet, dass wir für unsere Anwendungen nicht alles in diese Hauptdatei einfügen müssen, wir können individuelle Konfigurationsdateien erstellen und sie zu /etc/logrotate.d hinzufügen Verzeichnis. Die meisten von Ihnen installierten Pakete, die Hilfe bei der Protokollrotation benötigen, legen ihre logrotate-Konfigurationsdateien ebenfalls in diesem Verzeichnis ab.

Dies ist ein Teil des Inhalts der Hauptdatei /etc/logrotate.conf Datei:

weekly
rotate 4
create
dateext
compress
  • weekly Konfigurieren Sie wöchentliche Protokollrotationen mit Protokolldateien, die dem Root gehören Benutzer und das syslog Gruppe
  • rotate 4 vier Protokolldateien werden aufbewahrt (Rückstände im Wert von 4 Wochen aufbewahren)
  • create neue leere Protokolldateien werden erstellt, nachdem die aktuelle rotiert wurde
  • dateex Datum als Suffix der rotierten Datei verwenden
  • compress gedrehte Dateien komprimieren

Für die einzelnen Dateien in /etc/logrotate.d Verzeichnis, schauen wir uns eines als Beispiel an:

cat /etc/logrotate.d/yum

Ausgabe:

/var/log/yum.log {
    missingok
    notifempty
    maxsize 30k
    yearly
    create 0600 root root
}

Jede dieser Konfigurationen erbt die Standardkonfigurationen in /etc/logrotate.conf Verzeichnis.

Erklärung:

  • /var/log/yum.log diese erste Zeile gibt an, in welcher Datei sich die Konfigurationsziele befinden
  • missingok Wenn die Datei nicht existiert, ist sie immer noch in Ordnung und logrotate sollte keinen Fehler verursachen oder einen Fehler protokollieren
  • notifempty Rotieren Sie die Protokolldatei nicht, wenn sie leer ist
  • maxsize Wenn die Größe 30 KB überschreitet, rotieren
  • yearly laufen einmal im Jahr
  • create 0600 root root Erstellen Sie die neue rotierte Datei als root :root mit Berechtigungen 0600

Einige andere Optionen, die oben nicht aufgeführt sind:

  • rotate 30 dreißig Dateien behalten, die ältesten löschen, wenn sie überschritten werden
  • monthly Rotation einmal im Monat
  • compress komprimieren Sie die gedrehten Dateien. dies verwendet gzip standardmäßig und führt zu Dateien mit der Endung .gz . Der Komprimierungsbefehl kann mit compresscmd geändert werden Möglichkeit.

Protokollrotation der benutzerdefinierten App-Protokolldatei

Wenn unsere benutzerdefinierte Anwendung Protokolle generiert und in eine Datei schreibt, ist es unsere Aufgabe, zu konfigurieren, wie die Rotation für diese Datei durchgeführt wird.

  • Wenn wir Root-Zugriff haben, platzieren wir die Konfigurationsdatei idealerweise in /etc/logrotate.d/ Verzeichnis und es würde wie oben beschrieben funktionieren
  • Wenn wir keinen Root-Zugriff haben, müssten wir einen Cron konfigurieren, um logrotate auszuführen Befehl, der die von uns definierte Konfiguration übergibt
  • Wenn Sie die Protokolle häufiger als täglich rotieren möchten – z. B. stündlich, da das Logrotate-Setup des Systems nur einmal am Tag ausgeführt wird

Konfiguration in /etc/logrotate.d/

Nehmen wir an, unsere App generiert Protokolle in /var/log/our-app/app.log und es läuft als centos . Lassen Sie uns unsere Logrotate-Konfogdatei /etc/logrotate/ourapp.conf erstellen mit einigen Beispielkonfigurationen:

sudo vim /etc/logrotate.d/ourapp.conf

Konfig:

/var/log/our-app/*.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
    create 0640 centos centos
    sharedscripts
    postrotate
        systemctl reload our-app
    endscript
}

Einige neue Direktiven:

  • create 0640 centos centos erstellt nach der Rotation eine leere Logdatei mit den angegebenen Berechtigungen 0640 und der angegebene Benutzer und die Gruppe centos
  • sharedscripts bedeutet, dass alle zur Konfiguration hinzugefügten Skripts nur einmal pro Ausführung ausgeführt werden, anstatt für jede rotierte Datei. Wenn die Direktive /var/log/our-app/*.log mit mehr als einer Protokolldatei übereinstimmt, das in postrotate angegebene Skript würde ohne diese Option zweimal laufen
  • postrotate zu endscript Block enthält ein Skript, das ausgeführt wird, nachdem die Protokolldatei rotiert wurde. In unserem Fall das Neuladen der App. Dies ist manchmal erforderlich, damit Ihre Anwendung auf die neu erstellte Protokolldatei umschaltet. Beachten Sie, dass postrotate wird ausgeführt, bevor Protokolle komprimiert werden. Die Komprimierung kann lange dauern, und Ihre Software sollte sofort auf die neue Protokolldatei umstellen. Für Aufgaben, die nach ausgeführt werden müssen Protokolle komprimiert sind, verwenden Sie die lastaction stattdessen blockieren.

Um die obige Konfiguration zu testen, verwenden Sie diesen Befehl:

sudo logrotate /etc/logrotate.conf --debug

Die Ausgabe wird sich darauf beziehen, welche Protokolldateien Logrotate verarbeitet und was es mit ihnen gemacht hätte. Der Standard-Logrotate-Job wird einmal täglich ausgeführt und enthält Ihre neue Konfiguration.

Beispieldaten in der Ausgabe

...
rotating pattern: /var/log/our-app/*.log  after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
...

Mit logrotate Befehl für benutzerdefinierte Konfiguration

Wenn Sie keinen Root-Zugriff auf das System haben und Ihre eigenen benutzerdefinierten Dateien logrotieren möchten, zeigt Ihnen dieser Abschnitt, wie Sie dies tun können.

Sagen wir eine App our-app generiert Protokolldateien und speichert sie in einem benutzerdefinierten Pfad in unserem Home-Verzeichnis, z. ~/apps/our-app/logs/ . Wenn die Protokolle häufig generiert werden, möchten wir sie hourly rotieren lassen . Aber logrotate funktioniert nicht stündlich?

Lassen Sie uns zuerst eine Logrotate-Konfigurationsdatei erstellen. Ich werde die Datei im App-conf-Verzeichnis in diesem Pfad ablegen ~/apps/our-app/conf/lorotate.conf mit folgender Konfiguration:

Bearbeiten Sie die Datei:

vim ~/apps/our-app/conf/lorotate.conf

Mit folgender Konfiguration:

/home/centos/apps/our-app/logs/*.log {
    rotate 30
    hourly
    compress
    sharedscripts
    delaycompress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d-%s
    copytruncate
}

Die obige Konfiguration rotiert die Dateien im Verzeichnis /home/centos/apps/our-app/logs/*.log stündlich, komprimiert und behält nur 30 alte Protokolle bei.

  • copytruncate kopiert den Inhalt einer Protokolldatei in eine neue Datei und kürzt dann die Protokolldatei.
  • dateformat gibt das Format der gedrehten Datei an
  • dateext weist logrotate an, die Datumserweiterung für die rotierten Dateien einzufügen.

Zum Testen:

mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log

Jetzt, da wir die Datei an Ort und Stelle haben, können wir jetzt logrotate verwenden es zu drehen. Das Einzige, was wir tun müssen, ist, einen state anzugeben Datei. Ein state Datei zeichnet auf, was logrotate ist sah das letzte Mal, als es ausgeführt wurde, damit es weiß, was zu tun ist. Die Einrichtung der Systeminstallation wird bereits in /var/lib/logrotate/status behandelt aber in unserem Fall müssen wir angeben.

Wir können dafür das Home-Verzeichnis verwenden:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
  • --verbose druckt detaillierte Informationen darüber, was Logrotate tut.

Sie sollten eine Ausgabe wie diese sehen:

 $ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /home/centos/apps/our-app/logs/*.log  hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
  log does not need rotating (log has been already rotated)set default create context

Einige Informationen wurden in der Logrotate-Statusdatei aufgezeichnet:

$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0

Logrotate notiert die Protokolle, die es gesehen hat, und wann es sie zuletzt für die Rotation in Betracht gezogen hat. Wenn wir denselben Befehl eine Stunde später ausführen, wird das Protokoll wie erwartet rotiert.

Wenn Sie Logrotate zwingen möchten, die Protokolldatei zu rotieren, wenn dies sonst nicht der Fall wäre, verwenden Sie den --force Flagge:

logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force

Dies ist beim Testen von postrotate nützlich und andere Skripte.

Als nächstes soll der obige Befehl automatisch ausgeführt werden. Dies kann mit Crons erreicht werden. Die crontab Befehl ist praktisch.

Um Crons so zu bearbeiten, dass wir diesen Befehl verwenden können:

crontab -e

Dadurch wird eine Textdatei geöffnet. Möglicherweise enthält die Datei bereits einige Kommentare, die die erwartete grundlegende Syntax erläutern. Bewegen Sie den Cursor nach unten zu einer neuen leeren Zeile am Ende der Datei und fügen Sie Folgendes hinzu:

3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status

Das obige führt den logrotate-Befehl jede 3. Minute jeder Stunde aus. Wir verwenden den vollständigen Pfad /usr/sbin/logrotate Daher erhalten wir keinen Fehler „Befehl nicht gefunden“.

Speichern Sie die Datei und beenden Sie sie. Dadurch wird crontab installiert und unser Task wird nach dem angegebenen Zeitplan ausgeführt.

Schlussfolgerung

Wir haben uns in diesem Leitfaden logrotate angesehen. Wir konnten seine Version überprüfen, die Standardkonfiguration überprüfen und unsere eigene benutzerdefinierte Einrichtung einrichten. Um mehr über die für Logrotate verfügbaren Befehlszeilen- und Konfigurationsoptionen zu erfahren, können Sie die Handbuchseite lesen, indem Sie man logrotate ausführen in Ihrem Terminal:

man logrotate

Linux
  1. wc Linux-Befehl mit Beispielen

  2. Sortierbefehl in Linux mit Beispielen

  3. Mehr als 10 Linux-VI-Befehle mit Beispielen

  4. So verwalten Sie Protokolldateien mit Logrotate unter Linux

  5. chattr-Befehl unter Linux mit Beispielen

Linux-WC-Befehl mit Beispielen

Linux-Dateizeitstempel mit Beispielen erklärt

Verwendung des Linux-mv-Befehls mit Beispielen

Linux-Mount-Befehl mit Beispielen

gawk Linux-Befehl mit Beispielen

Linux-make-Befehl mit Beispielen