Einrichten von logrotate unter Linux

Stellen Sie sich vor, ein kritischer Dienst ist vor wenigen Minuten ausgefallen, und Sie werden gerufen, um den Tag zu retten. Sie versuchen, den Dienst neu zu starten, und er gibt einfach nicht nach. Es gibt keine Fehlermeldungen, aber, was noch wichtiger ist, keine Spuren davon, was er getan hat, bevor er sich entschied zu sterben. Hundert und eine Ursache gehen Ihnen durch den Kopf, und Sie stellen fest, dass es keine Möglichkeit gibt, zu wissen, in welche Richtung Sie gehen sollen. Vielleicht könnten Sie den Server ganz neu starten. Nur vielleicht.

Dieses Szenario ist eines von vielen, in denen die Protokollierung zu Ihrer Rettung werden kann. Normalerweise hält eine laufende Software wichtige Aktivitäten, die mit ihrem Betrieb zusammenhängen, in einer Datei für die Nachwelt fest. Alles kann in einer Protokolldatei festgehalten werden, da es Entwicklern und Systemadministratoren gleichermaßen hilft, im Nachhinein zu wissen, was mit einem bestimmten Stück Software passiert ist. Log-Dateien werden auch von sicherheitsorientierten Personen verwendet, um den Zugriff auf bestimmte Ressourcen zu überprüfen. In Netzwerken oder bei der Nachrichtenübermittlung zeichnen Logdateien die Zeit auf, zu der Nachrichten gesendet oder empfangen wurden, um später darauf zurückgreifen zu können.

Logdateien werden per Definition immer größer, abhängig von der Häufigkeit und Ausführlichkeit, mit der sie aktualisiert werden. Um ihren Zweck zu erfüllen, werden sie normalerweise im Append-Modus geöffnet und enthalten Zeitstempel, die bei der Fehlersuche und Forensik helfen. Dies stellt jedoch ein Problem dar, da große Dateigrößen die Arbeit mit Protokolldateien sowohl für das System als auch für den menschlichen Prüfer zu einem mühsamen Prozess machen. Protokolle werden rotiert, um die Protokolldateien vertretbar zu halten. Einfach ausgedrückt, wird eine neue Datei geöffnet, während die ältere geschlossen und je nach Designvorliebe entweder behalten oder gelöscht wird. Dadurch wird verhindert, dass Protokolle ganze Partitionen füllen und das System in die Knie zwingen. Vielleicht haben Sie die Log-Rotation schon auf einem System in Ihrer Nähe bemerkt. Schauen Sie sich die Daten auf den boot.log Dateien an.

Bild
varlog

In diesem Fall wird, wenn eine bestimmte Bedingung erfüllt ist, die aktuelle Datei umbenannt, indem ein Datum angehängt wird, um sie zu identifizieren und nachzuverfolgen, und eine neue Datei mit dem ursprünglichen Namen wird geöffnet, bereit, eingehende Protokollmeldungen zu empfangen.

Protokollierung in Linux (rsyslogd)

Wie Sie vielleicht erwarten, ist die Protokollierung in Linux-Systemen, wie dem CentOS 7-Server, den ich zur Veranschaulichung verwende, auf einen Daemon angewiesen, um die Protokollierung zu erleichtern. Rsyslogd heißt der zuverlässige alte Dienst und ist Open-Source. Eigentlich ist er gar nicht so alt. Es handelt sich um eine verbesserte Version des ursprünglichen syslog-Daemons, und er besitzt die Fähigkeit, Protokolle schnell zu verarbeiten und an jeden Ort in einem IP-Netzwerk weiterzuleiten. Neben syslog und rsyslog gibt es mit syslog-ng einen weiteren Daemon zur Behandlung von Logs. Der Standard-Log-Handler hängt von der gewählten Distro ab. Rsyslog ist in vielen Red Hat-basierten Distros standardmäßig vorhanden. Führen Sie den folgenden Befehl aus, um sein Vorhandensein und seine Version auf Ihrem System zu überprüfen:

rsyslogd -v
Bild
rsyslogd-v

Da es sich um einen Daemon handelt, können Sie prüfen, ob er aktiv ist, indem Sie systemd wie folgt einsetzen:

systemctl status rsyslogd
Bild
systemctlstatusrsyslog

Wenn, es aus irgendeinem Grund nicht läuft, können Sie es über systemd starten.

Logrotate

Logrotate ist ein Linux-Dienstprogramm, dessen Kernfunktion darin besteht, – warten Sie es ab – Protokolle zu rotieren. Wenn es nicht als Teil der Standardinstallation des Betriebssystems installiert ist, kann es einfach durch Ausführen von:

 yum install logrotate

Die Binärdatei kann unter /bin/logrotate gefunden werden.

Bei der Installation von logrotate wird eine neue Konfigurationsdatei im Verzeichnis /etc/ abgelegt, um das allgemeine Verhalten des Dienstprogramms beim Ausführen zu steuern. Außerdem wird ein Ordner für dienstspezifische Snap-In-Konfigurationsdateien für maßgeschneiderte Protokollrotationsanforderungen erstellt. Mehr dazu etwas später.

Täglicher Cron-Job

Ein cron Job wird täglich ausgeführt, der das Dienstprogramm startet. Dies wird erreicht, indem ein Aufruf des Dienstprogramms in den Standardordner cron für tägliche Jobs gelegt wird. Während die Einzelheiten des Aufrufs außerhalb des Rahmens dieses Artikels liegen, genügt es zu sagen, dass der Aufruf nur ein Bash-Skript ist, das das logrotate-Binary ausführt und dem System mitteilt, was im Falle eines Fehlers zu tun ist.

Bild
crondaily

Standard-Speicherort für Log-Dateien

Logs auf einem Linux-System können überall dort abgelegt werden, wo es die Berechtigungen erlauben. Da sie sich jedoch ständig in Größe und Inhalt ändern, schreibt die Dateisystemhierarchie per Definition vor, dass sie im /var/log/-Verzeichnis aufbewahrt werden.

Der Screenshot unten zeigt einen Blick auf den Inhalt meines /var/log-Verzeichnisses.

Bild
lsvarlog

Konfigurationsdateien und Beispiele

/etc/logrotate.conf

Die erste Datei, die es im Hinblick auf die Funktion von logrotate zu beachten gilt, ist logrotate.conf. Diese Konfigurationsdatei enthält die Direktiven, wie die Log-Dateien standardmäßig rotiert werden sollen. Wenn es keinen spezifischen Satz von Direktiven gibt, handelt das Dienstprogramm gemäß den Direktiven in dieser Datei.

Unten finden Sie ein Beispiel für den Inhalt der Konfigurationsdatei.

Bild
logrotate.conf

Lassen Sie uns ein paar der Direktiven durchgehen, um ein Gefühl für die Flexibilität von logrotate zu bekommen. Gnädigerweise hat der Autor des Hilfsprogramms genug Kommentare eingefügt, um einen Neuling auf den Weg zu bringen. Sie können auch die Seite man für einen tieferen Einblick nutzen. Die Direktiven weeklydateextcompresscreate und rotate 4 besagen, dass die Log-Dateien wöchentlich rotiert werden sollen, dass das Datum der Rotation als identifizierendes Suffix der rotierten Dateien verwendet werden soll, dass die rotierten Dateien komprimiert werden sollen, dass eine neue Datei angelegt werden soll, um eingehende Logs aufzunehmen, und dass nicht mehr als vier Logs aufbewahrt werden sollen. Mit anderen Worten, das fünftneueste Protokoll sollte gelöscht werden. Beachten Sie auch, dass auf meinem System aufgrund des Vorhandenseins des # vor der compress-Direktive die Komprimierung standardmäßig deaktiviert ist.

Außerdem gibt es eine Direktive zum Einschließen eines bestimmten Ordners: /etc/logrotate.d. Dieser Ordner wird für paketspezifische Log-Rotationsanforderungen verwendet. Pakete, die die Vorteile von logrotate nutzen sollen, legen Konfigurationsdateien in diesem Verzeichnis ab. Diese Modularität entspricht dem Geist von Linux und erhöht die Erweiterbarkeit des Dienstprogramms. Die Konfigurationsdateien enthalten ähnliche Direktiven und ggf. eigene Protokolldateien. Sie können auch Ihre eigene Konfigurationsdatei erstellen, um eine beliebige Protokolldatei Ihrer Wahl zu verarbeiten. Geben Sie der Datei einfach einen Namen, fügen Sie die zu verarbeitende Protokolldatei hinzu und legen Sie sie in diesem Verzeichnis ab. Schließlich gibt es Direktiven für Protokolldateien ohne Eigentümer-Pakete, wie wtmp und andere Systemprotokolldateien. Die Seite man ist mit weiteren Direktiven gefüllt, und für Benutzer, die spezifischere Rotationsanforderungen haben, empfehle ich Ihnen dringend, einen Blick darauf zu werfen.

/etc/logrotate.d

Glücklicherweise habe ich schon viel über das /etc/logrotate.d-Verzeichnis gesprochen, also lassen Sie mich Ihnen ohne viel Aufhebens den Inhalt dieses Verzeichnisses zeigen, um die zuvor geteilten Ideen zu verdeutlichen.

Bild
logrotated

Und zur Sicherheit werfen wir noch einen Blick auf die Samba-Konfigurationsdatei.

Bild
samba

Können Sie erkennen, wie ähnlich es logrotate.conf ist? Bevor ich den Vorhang zuziehe, lassen Sie uns noch einige der Direktiven in dieser Datei durchgehen:

/var/log/samba/* – Die zu rotierende Log-Datei. In diesem Fall ist es jede Protokolldatei im Samba-Protokollverzeichnis.

notifempty – Direktive, die besagt, dass die Datei nicht rotiert werden soll, wenn sie leer ist.

olddir /var/log/samba/old – Speicherort für alte rotierte Protokolle.

missingok – Verhindert, dass logrotate einen Fehler ausgibt, wenn die Protokolldatei fehlt.

copytruncate – Schließen Sie die Protokolldatei nicht. Legen Sie eine Kopie an, die die gedrehte, umbenannte Datei sein wird, und kürzen Sie dann die Log-Datei auf die Größe Null

Können Sie erraten, was die sharedscripts-Anweisung bewirkt? Sie brauchen nicht zu raten – schauen Sie auf die Seite man.

Zusammenfassung

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.