Advertisements

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, erzeugt Protokolle, und wir möchten, dass die Anwendungen, die wir selbst entwickeln, diese auch generieren. Je ausführlicher die Protokolle, desto mehr Informationen haben wir. Aber sich selbst überlassen, können Baumstämme eine unüberschaubare Größe erreichen und wiederum zu einem eigenen Problem werden. Es ist also eine gute Idee, sie klein zu halten, die, die wir brauchen, zu behalten und den Rest zu archivieren.

Weitere Linux-Ressourcen

Grundlagen

Die logrotate Das Dienstprogramm eignet sich hervorragend zum Verwalten von Protokollen. Es kann sie rotieren, komprimieren, per E-Mail versenden, löschen, archivieren und bei Bedarf neu starten.

Laufen logrotate ist ziemlich einfach – lauf einfach logrotate -vs state-file config-file. Im obigen Befehl wird die v Option aktiviert ausführlichen Modus, s gibt eine Zustandsdatei an, und die endgültige config-file erwähnt die Konfigurationsdatei, in der Sie angeben, was Sie tun müssen.

Zum Anfassen

Schauen wir mal nach a logrotate Konfiguration, die geräuschlos auf unserem System ausgeführt wird und die Fülle von Protokollen verwaltet, die wir in der /var/log Verzeichnis. Überprüfen Sie die aktuellen Dateien in diesem Verzeichnis. Siehst du viel *.[number].gz Dateien? Das ist, was logrotate macht. Die Konfigurationsdatei dazu 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 Drehen der /var/log/syslog Datei und die Anweisungen sind in den folgenden geschweiften Klammern enthalten. Hier ist, was sie bedeuten:

  • rotate 7: Protokolle der letzten sieben Umdrehungen aufbewahren. Dann fang an sie zu löschen.
  • daily: Drehen Sie das Protokoll täglich. Zusammen mit rotate 7, würde dies bedeuten, dass die Protokolle für die letzten sieben Tage aufbewahrt werden. Andere Optionen sind weekly, monthly, yearly. Da ist auch ein size Parameter, der Protokolldateien rotiert, wenn ihre Größe über ein bestimmtes Limit hinaus ansteigt, z. B. size 10k, size 10M, size 10G, usw. Wenn nichts angegeben ist, werden die Protokolle immer rotiert, wenn logrotate läuft. Du kannst sogar laufen logrotate 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 Rotation. 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 sie neu gestartet/neu geladen wird, wie z. B. Apache.
  • compress: Komprimierung ist aktiviert. Verwenden nocompress um es auszuschalten.
  • postrotate/endscript: Führen Sie das Skript in diesem Abschnitt nach der Rotation aus. Hilfreich beim Aufräumen. Da ist auch ein prerotate/endscript um Dinge zu tun, bevor die Rotation beginnt.

Können Sie herausfinden, was der nächste Abschnitt für alle in der obigen Konfiguration erwähnten Dateien bewirkt? Der einzige zusätzliche Parameter im zweiten Abschnitt ist sharedscripts, die erzählt logrotate den Abschnitt nicht ausführen postrotate/endscript 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 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 Zustandsdatei sieht so 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-Spickzettel für logrotate herunter.


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

Rotieren und archivieren Sie Protokolle mit dem Linux-Befehl logrotate

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top