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

Logrotate-Dienstprogramm verstehen

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.


Linux
  1. So verwenden Sie Logrotate zum Verwalten von Protokolldateien

  2. Verständnis der Zeitstempel von Mac-Dateien

  3. Grundlegendes zur Konfigurationsdatei /etc/profile unter Linux

  4. Beschränken Sie den Dateizugriff nur auf Anhängen

  5. cp-L vs. cp-H

Grundlegendes zu Linux-Dateiberechtigungen

Verwalten von Protokollen mit Logrotate auf Ubuntu

Grundlegendes zu Linux Multipath (dm-multipath)

/etc/group-Datei verstehen

Verstehen des parted Linux-Dienstprogramms

Linux-Dienstprogramm fdisk verstehen