Protokolle sind nützlich, wenn Sie die Nutzung verfolgen oder Fehler in einer Anwendung beheben möchten. Je mehr Informationen protokolliert werden, desto mehr Speicherplatz benötigen Protokolldateien. Mit der Zeit kann eine Protokolldatei unhandlich werden. Der Speicherplatzmangel aufgrund einer großen Protokolldatei ist ein Problem, aber eine große Protokolldatei kann auch die Größenänderung oder Sicherung Ihres virtuellen Servers verlangsamen. Außerdem ist es schwierig, nach einem bestimmten Ereignis zu suchen, wenn Sie eine Million Protokolleinträge durchblättern müssen. Daher ist es eine gute Idee, Protokolldateien auf eine überschaubare Größe zu beschränken und sie zu beschneiden, wenn sie zu alt werden, um von großem Nutzen zu sein.
Glücklicherweise erleichtert das Dienstprogramm logrotate die Protokollrotation. „Protokollrotation“ bezieht sich auf das Archivieren des aktuellen Protokolls einer Anwendung, das Starten eines neuen Protokolls und das Löschen älterer Protokolle. Das System führt logrotate normalerweise einmal am Tag aus und prüft dann Regeln, die auf Verzeichnis- oder Protokollbasis angepasst werden können.
So funktioniert logrotate
Das System führt logrotate nach einem Zeitplan aus, normalerweise täglich. Bei den meisten Distributionen befindet sich das Skript, das logrotate täglich ausführt, unter /etc/cron.daily/logrotate
.
Einige Distributionen verwenden eine Variation. Beispielsweise befindet sich das logrotate-Skript auf Gentoo unter /etc/cron.daily/logrotate.cron
.
Wenn Sie möchten, dass logrotate häufiger ausgeführt wird (z. B. für eine stündliche Protokollrotation), müssen Sie cron verwenden, um logrotate über ein Skript in /etc/cron.hourly
auszuführen .
Wenn logrotate läuft, liest es seine Konfigurationsdateien, um zu bestimmen, wo die Logdateien zu finden sind, die es rotieren muss, wie oft die Dateien rotiert werden sollen und wie viele archivierte Logs aufbewahrt werden sollen.
logrotate.conf
Die Hauptkonfigurationsdatei von logrotate befindet sich unter /etc/logrotate.conf
.
Die Datei enthält die Standardparameter, die logrotate beim Rotieren von Protokollen verwendet. Die Datei ist kommentiert, sodass Sie sie überfliegen können, um zu sehen, wie die Konfiguration eingerichtet ist. Einige der spezifischen Befehle in dieser Datei werden später in diesem Artikel beschrieben.
Beachten Sie, dass eine Zeile in der Datei lautet:
include /etc/logrotate.d
Dieses Verzeichnis enthält die meisten anwendungsspezifischen Konfigurationsdateien.
logrotate.d
Verwenden Sie den folgenden Befehl, um den Inhalt des Verzeichnisses aufzulisten, in dem anwendungsspezifische Protokolleinstellungen gespeichert sind:
ls /etc/logrotate.d
Je nachdem, wie viel auf Ihrem Server installiert ist, kann dieses Verzeichnis keine oder mehrere Dateien enthalten. Im Allgemeinen erstellen Anwendungen, die über Ihren Paketmanager installiert werden, auch eine Konfigurationsdatei in /etc/logrotate.d
.
Normalerweise enthält das Verzeichnis eine Konfigurationsdatei für Ihren Syslog-Dienst, die logrotate liest, wenn es die Systemprotokolle rotiert. Diese Datei enthält einen Eintrag für verschiedene Systemprotokolle zusammen mit einigen Befehlen, die denen ähneln, die in logrotate.conf
enthalten sind .
HINWEIS: Auf Versionen von Ubuntu-Betriebssystemen vor Karmic Koala (9.10) gibt es keinen Eintrag für einen Syslog-Dienst. Vor dieser Version wurden die Systemprotokolle durch ein savelog
rotiert Befehl, der von /etc/cron.daily/sysklogd
ausgeführt wird Skript.
Innerhalb einer Anwendungsdatei
Betrachten Sie als Beispiel den Inhalt einer Logrotate-Konfigurationsdatei, die eingerichtet werden könnte, wenn Sie Apache auf einem Fedora-System installieren:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Wenn logrotate läuft, sucht es nach Dateien in /var/log/httpd
die inlog
enden und dreht sie, wenn sie nicht leer sind. Wenn es das httpd-Verzeichnis überprüft und keine Protokolldateien findet, wird kein Fehler generiert. Dann führt es den Befehl im postrotate/endscript
aus blockieren (in diesem Fall ein Befehl, der Apache anweist, neu zu starten), aber erst, nachdem alle angegebenen Protokolle verarbeitet wurden.
Diese Beispieldatei enthält einige Einstellungen nicht, die in der logrotate.conf
enthalten sind Datei. Die Befehle in logrotate.conf
fungieren als Standardwerte für die Protokollrotation. Sie können für jede Anwendung unterschiedliche Einstellungen festlegen, wenn Sie die Standardeinstellungen überschreiben möchten. Wenn Sie beispielsweise einen stark ausgelasteten Webserver betreiben, möchten Sie vielleicht einen daily
hinzufügen Befehl im Konfigurationsblock von Apache, sodass die Protokolle von Apache täglich anstatt der standardmäßigen wöchentlichen Rotation rotieren.
Der nächste Abschnitt beschreibt einige der häufiger verwendeten Befehle, die tatsächlich in einer Logrotate-Konfigurationsdatei ausgeführt werden.
Konfigurationsbefehle
Eine vollständige Liste der in logrotate-Konfigurationsdateien verwendeten Befehle finden Sie auf der Manpage:
man logrotate
Dieser Abschnitt beschreibt die häufiger verwendeten Befehle.
Denken Sie daran, die Konfigurationsdateien für Anwendungen in /etc/logrotate.d
erben ihre Standardwerte von der Hauptdatei /etc/logrotate.conf
Datei.
Protokolldateien
Eine Protokolldatei und ihr Rotationsverhalten werden definiert, indem die Protokolldatei(en) aufgelistet werden, gefolgt von einer Reihe von Befehlen, die in geschweiften Klammern eingeschlossen sind. Die meisten Anwendungskonfigurationsdateien enthalten nur einen dieser Blöcke, aber es ist möglich, mehr als einen in eine Datei aufzunehmen oder Protokolldateiblöcke zur Hauptdatei logrotate.conf
hinzuzufügen Datei.
Sie können mehr als eine Protokolldatei für einen Block auflisten, indem Sie einen Platzhalter im Namen verwenden oder Protokolldateien in der Liste durch Leerzeichen trennen. Zum Beispiel, um alle Dateien im Verzeichnis /var/foo anzugeben, die auf .log
enden , und die Datei /var/bar/log.txt
, würden Sie den Block wie folgt einrichten:
/var/foo/*.log /var/bar/log.txt {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
Endscript
}
Anzahl rotieren
Die rotate
Der Befehl bestimmt, wie viele archivierte Protokolle zurückgegeben werden, bevor logrotate mit dem Löschen der älteren beginnt. Zum Beispiel:
rotate 4
Dieser Befehl weist logrotate an, vier archivierte Protokolle gleichzeitig aufzubewahren. Wenn vier archivierte Protokolle vorhanden sind, wenn das Protokoll erneut rotiert wird, wird das älteste gelöscht, um Platz für das neue Archiv zu schaffen.
Rotationsintervall
Sie können einen Befehl angeben, der logrotate mitteilt, wie oft ein bestimmtes Protokoll rotiert werden soll. Zu den möglichen Befehlen gehören:
daily
weekly
monthly
yearly
Wenn kein Rotationsintervall angegeben ist, wird das Protokoll bei jeder Ausführung von logrotate rotiert (es sei denn, eine andere Bedingung wie size
wurde eingestellt).
Wenn Sie ein anderes Zeitintervall als die definierten verwenden möchten, müssen Sie mit cron eine separate Konfigurationsdatei erstellen. Wenn Sie beispielsweise eine bestimmte Protokolldatei stündlich rotieren möchten, können Sie eine Datei in /etc/cron.hourly
erstellen (Möglicherweise müssen Sie auch dieses Verzeichnis erstellen), das eine Zeile wie die folgende enthalten würde:
/usr/sbin/logrotate /etc/logrotate.hourly.conf
Dann würden Sie die Konfiguration für diesen stündlichen Lauf von logrotate (den Speicherort der Protokolldatei, ob alte Dateien komprimiert werden sollen usw.) in /etc/logrotate.hourly.conf
einfügen .
Größe
Sie können die size
verwenden Befehl, um eine Dateigröße anzugeben, die logrotate prüfen soll, wenn bestimmt wird, ob eine Rotation durchgeführt werden soll. Das Format des Befehls teilt logrotate mit, welche Einheiten Sie verwenden, um die Größe anzugeben:
size 100k
size 100M
size 100G
Das erste Beispiel würde das Protokoll rotieren, wenn es größer als 100 Kilobyte wird, das zweite, wenn es größer als 100 Megabyte ist, und das dritte, wenn es über 100 Gigabyte ist. Ich empfehle nicht, ein Limit von 100 G zu verwenden, wohlgemerkt, das Beispiel ist da etwas aus dem Ruder gelaufen.
Der Größenbefehl hat Vorrang vor und ersetzt ein Rotationsintervall, wenn beide gesetzt sind.
Komprimierung
Wenn Sie möchten, dass archivierte Protokolldateien komprimiert werden (im gzip-Format), können Sie den folgenden Befehl einfügen, normalerweise in /etc/logrotate.conf
:
compress
Komprimierung ist normalerweise eine gute Idee, da Protokolldateien normalerweise nur aus Text bestehen und Text gut komprimiert werden kann. Wenn Sie jedoch einige archivierte Protokolle haben, die Sie nicht komprimieren möchten, die Komprimierung jedoch standardmäßig aktiviert sein soll, können Sie den folgenden Befehl in eine anwendungsspezifische Konfiguration aufnehmen:
nocompress
Ein weiterer wichtiger Befehl in Bezug auf die Komprimierung lautet wie folgt:
delaycompress
Dieser Befehl ist nützlich, wenn Sie die archivierten Protokolle komprimieren, aber die Komprimierung verzögern möchten. Wenn delaycompress
aktiv ist, wird ein archiviertes Protokoll komprimiert, wenn das Protokoll das nächste Mal rotiert wird. Dies kann wichtig sein, wenn Sie ein Programm haben, das möglicherweise noch eine Zeit lang in seine alte Protokolldatei schreibt, nachdem eine neue eingefügt wurde. Beachten Sie, dass delaycompress
funktioniert nur, wenn Sie compress
haben in Ihrer Konfiguration.
Ein Beispiel für einen guten Zeitpunkt, um delaycompress
zu verwenden wäre, wenn logrotate angewiesen wird, Apache mit der Direktive „graceful“ oder „reload“ neu zu starten. Durch das Verzögern der Komprimierung wird sichergestellt, dass Sie diese zusätzlichen Protokolleinträge nicht verlieren, wenn die Protokolle rotiert werden.
Nachdrehen
Logrotate führt das postrotate
aus jedes Mal, wenn es ein in einem Konfigurationsblock angegebenes Protokoll rotiert. Normalerweise möchten Sie dieses Skript verwenden, um eine Anwendung nach der Protokollrotation neu zu starten, damit die Anwendung zu einem neuen Protokoll wechseln kann.
postrotate
/usr/sbin/apachectl restart > /dev/null
endscript
>/dev/null
weist logrotate an, die Ausgabe des Befehls ins Nirgendwo zu leiten. In diesem Fall müssen Sie die Ausgabe nicht anzeigen, wenn die Anwendung korrekt neu gestartet wurde.
Das postrotate
Der Befehl teilt logrotate mit, dass das auszuführende Skript in der nächsten Zeile und dem endscript
beginnt Befehl sagt, dass das Skript fertig ist.
Sharedscripts
Normalerweise führt logrotate das postrotate
aus Skript jedes Mal, wenn es ein Protokoll rotiert. Dies gilt auch für mehrere Protokolle, die denselben Konfigurationsblock verwenden. Beispielsweise führt ein Webserver-Konfigurationsblock, der sich sowohl auf das Zugriffsprotokoll als auch auf das Fehlerprotokoll bezieht, das postrotate
aus, wenn er beide rotiert Skript zweimal (einmal für jede gedrehte Datei). Werden beide Dateien rotiert, wird der Webserver zweimal neu gestartet.
Um zu verhindern, dass logrotate dieses Skript für jedes Protokoll ausführt, können Sie den folgenden Befehl einfügen:
sharedscripts
Dieser Befehl weist logrotate an, alle Protokolle für diesen Konfigurationsblock zu überprüfen, bevor postrotate
ausgeführt wird Skript. Wenn eines oder beide Protokolle rotiert werden, wird postrotate
Skript wird nur einmal ausgeführt. Wenn keiner der Logs rotiert, wird postrotate
Skript wird nicht ausgeführt.
Wohin als nächstes gehen
Dieser Artikel gibt einen Überblick darüber, was logrotate macht und welche Konfigurationsmöglichkeiten Ihnen zur Verfügung stehen. Sie sollten nun in der Lage sein, die vorhandenen Konfigurationen zu erkunden und an Ihre Bedürfnisse anzupassen. Informationen zum Erstellen einer Beispielkonfiguration (zum Rotieren der Protokolle für benutzerdefinierte virtuelle Hosts) finden Sie unter Beispielkonfigurationen zum Rotieren von Protokollen und Fehlerbehebung.