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

Rotieren und archivieren Sie Protokolle mit dem Linux-Befehl logrotate

Protokolle eignen sich hervorragend, um herauszufinden, was eine Anwendung tut, oder um ein mögliches Problem zu beheben. Fast jede Anwendung, mit der wir zu tun haben, generiert Protokolle, und wir möchten, dass die Anwendungen, die wir selbst entwickeln, diese auch generieren. Je ausführlicher die Protokolle sind, desto mehr Informationen haben wir. Aber sich selbst überlassen, können Protokolle zu einer unüberschaubaren Größe anwachsen, und sie können wiederum zu einem eigenen Problem werden. Daher ist es eine gute Idee, sie klein zu halten, diejenigen aufzubewahren, die wir brauchen, und den Rest zu archivieren.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Grundlagen

Das logrotate Dienstprogramm eignet sich hervorragend zum Verwalten von Protokollen. Es kann sie rotieren, komprimieren, per E-Mail versenden, löschen, archivieren und neue erstellen, wenn Sie sie brauchen.

Ausführen von logrotate ist ziemlich einfach – führen Sie einfach logrotate -vs state-file config-file aus . Im obigen Befehl ist der v Option aktiviert den ausführlichen Modus, s gibt eine Zustandsdatei und die abschließende config-file an erwähnt die Konfigurationsdatei, in der Sie angeben, was Sie tun müssen.

Hands-on

Schauen wir uns ein logrotate an Konfiguration, die unbemerkt auf unserem System ausgeführt wird und die Fülle von Protokollen verwaltet, die wir in /var/log finden Verzeichnis. Überprüfen Sie die aktuellen Dateien in diesem Verzeichnis. Sehen Sie viele *.[number].gz Dateien? Das ist es, was logrotate ist macht gerade. Die Konfigurationsdatei dafür finden Sie unter /etc/logrotate.d/rsyslog . Meine sieht so aus:

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages

{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

Die Datei beginnt mit der Definition der Anweisungen zum Rotieren von /var/log/syslog Datei und die Anweisungen sind in den folgenden geschweiften Klammern enthalten. Sie bedeuten Folgendes:

  • rotate 7 :Bewahren Sie Protokolle der letzten sieben Rotationen auf. Beginnen Sie dann mit dem Löschen.
  • daily :Rotieren Sie das Protokoll täglich. Zusammen mit rotate 7 , würde dies bedeuten, dass Protokolle für die letzten sieben Tage aufbewahrt würden. Andere Optionen sind weeklymonthlyyearly . Es gibt auch eine size Parameter, der Protokolldateien rotiert, wenn ihre Größe eine bestimmte Grenze überschreitet, z. B. size 10ksize 10Msize 10G usw. Wenn nichts angegeben ist, werden Protokolle bei jedem logrotate rotiert läuft. Sie können sogar logrotate ausführen in einem cron um es in bestimmten Zeitabständen zu verwenden.
  • missingok :Es ist in Ordnung, wenn die Protokolldatei fehlt. Keine Panik.
  • notifempty :Nicht rotieren, wenn die Protokolldatei leer ist.
  • delaycompress :Wenn die Komprimierung aktiviert ist, verzögern Sie die Komprimierung bis zur nächsten Drehung. Dadurch kann mindestens eine gedrehte, aber unkomprimierte Datei vorhanden sein. Nützlich, wenn Sie möchten, dass die Protokolle von gestern zur Fehlerbehebung unkomprimiert bleiben. Es ist auch hilfreich, wenn ein Programm möglicherweise noch in die alte Datei schreibt, bis es neu gestartet/neu geladen wird, wie Apache.
  • compress :Komprimierung ist aktiviert. Verwenden Sie nocompress ausschalten.
  • postrotate/endscript :Führen Sie das Skript innerhalb dieses Abschnitts nach der Rotation aus. Hilft beim Aufräumen. Es gibt auch ein prerotate/endscript um Dinge zu tun, bevor die Rotation beginnt.

Können Sie herausfinden, was der nächste Abschnitt für all die Dateien tut, die in der obigen Konfiguration erwähnt werden? Der einzige zusätzliche Parameter im zweiten Abschnitt ist sharedscripts , was logrotate mitteilt um den Abschnitt nicht innerhalb postrotate/endscript auszuführen bis die gesamte Protokollrotation abgeschlossen ist. Es verhindert, dass das Skript für jedes rotierte Protokoll ausgeführt wird, und wird am Ende einmal ausgeführt.

Etwas Neues

Ich verwende die folgende Konfiguration für den Umgang mit Nginx-Zugriffs- und Fehlerprotokollen auf meinem System.

/var/log/nginx/access.log
/var/log/nginx/error.log  {
        size 1
        missingok
        notifempty
        create 544 www-data adm
        rotate 30
        compress
        delaycompress
        dateext
        dateformat -%Y-%m-%d-%s
        sharedscripts
        extension .log
        postrotate
                service nginx reload
        endscript
}

Das obige Skript kann ausgeführt werden mit:

logrotate -vs state-file /tmp/logrotate

Wenn Sie den Befehl zum ersten Mal ausführen, erhalten Sie diese Ausgabe:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Und es ein zweites Mal ausführen:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Und es ein drittes Mal ausführen:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Der Inhalt der Statusdatei sieht folgendermaßen aus:

logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56

Laden Sie den Linux-Logrotate-Spickzettel herunter.


Dieser Artikel wurde ursprünglich im persönlichen Blog des Autors veröffentlicht und mit Genehmigung angepasst.


Linux
  1. Planen von Aufgaben mit dem Linux-Cron-Befehl

  2. Diagnostizieren Sie Verbindungsprobleme mit dem Linux-Ping-Befehl

  3. Überwachen Sie Befehle und Aufgaben mit dem Linux-Überwachungsbefehl

  4. Ersetzen Sie intelligente Anführungszeichen durch den Linux-Befehl sed

  5. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

So verwenden Sie den Linux-Schlafbefehl mit Beispielen

So verwenden Sie den who-Befehl in Linux mit Beispielen

tar-Befehl in Linux mit Beispielen

So rotieren und komprimieren Sie Protokolldateien unter Linux mit Logrotate

So finden Sie Dateien mit dem fd-Befehl in Linux

HowTo:Das ultimative Logrotate-Befehls-Tutorial mit 10 Beispielen