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.
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 mitrotate 7
, würde dies bedeuten, dass die Protokolle für die letzten sieben Tage aufbewahrt werden. Andere Optionen sindweekly
,monthly
,yearly
. Da ist auch einsize
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, wennlogrotate
läuft. Du kannst sogar laufenlogrotate
in einemcron
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. Verwendennocompress
um es auszuschalten.postrotate/endscript
: Führen Sie das Skript in diesem Abschnitt nach der Rotation aus. Hilfreich beim Aufräumen. Da ist auch einprerotate/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.