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 mitrotate 7
, würde dies bedeuten, dass Protokolle für die letzten sieben Tage aufbewahrt würden. Andere Optionen sindweekly
,monthly
,yearly
. Es gibt auch einesize
Parameter, der Protokolldateien rotiert, wenn ihre Größe eine bestimmte Grenze überschreitet, z. B.size 10k
,size 10M
,size 10G
usw. Wenn nichts angegeben ist, werden Protokolle bei jedemlogrotate
rotiert läuft. Sie können sogarlogrotate
ausführen 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 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 Sienocompress
ausschalten.postrotate/endscript
:Führen Sie das Skript innerhalb dieses Abschnitts nach der Rotation aus. Hilft beim Aufräumen. Es gibt auch einprerotate/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.