Die Logrotation bricht auf vorhersagbare Weise: Drei Komponenten glauben jeweils, sie besäßen die Datei, und das Ergebnis ist ein rotiertes Log, das weiter wächst, während das neue leer bleibt. Der Daemon hält einen Deskriptor, logrotate benennt den Pfad um, und rsyslog schreibt ganz woanders. Wählen Sie einen Schreiber und einen Rotator, bevor Sie eine weitere Regel auf den Stapel legen. Die folgende Checkliste geht in dieser Reihenfolge vor, weil jeder spätere Schritt davon abhängt.

Entscheiden Sie, wer die Datei schreibt

Zwei Entwürfe sind zulässig. Beim ersten schreibt der VPN-Prozess selbst eine Datei über seine eigene Option log oder log-append. Beim zweiten schickt er Datensätze an den Systemlogger, und rsyslog oder journald entscheidet, wo sie landen.

Sie sind Alternativen, keine Schichten. Ein Host, der beides aktiviert, hat am Ende zwei Dateien, die sich widersprechen, und die, die Sie lesen, ist oft die veraltete. Wählen Sie den Pfad bewusst und entfernen Sie dann den anderen Schreiber.

Lesen Sie die effektive Dienstkonfiguration, bevor Sie etwas ändern, einschließlich Drop-ins, die die Unit-Datei überschreiben können. Eine Direktive im bearbeiteten Profil ist kein Beweis dafür, dass sie die ist, die der laufende Prozess geladen hat. Vergleichen Sie die Unit mit den Prozessargumenten und dann mit den Dateien, die er tatsächlich geöffnet hat.

Benennen Sie den Daemon, damit der Filter eng sein kann

Auf dem syslog-Pfad geben Sie dem Daemon eine eigene Identität und filtern darauf. Eine Regel, die auf den Programmnamen dieser VPN-Instanz passt, hält ihre Datensätze aus einer gemeinsam genutzten Datei heraus, deren Aufbewahrungsrichtlinie zu etwas anderem gehört.

Enge Regeln machen auch die nächste Frage beantwortbar: Welcher Dienst hat diese Zeile erzeugt? Ein Filter, der auf alles mit dem Wort VPN passt, sammelt bereitwillig den Verkehr eines zweiten Tunnels ein und verwischt beide. Passen Sie auf die exakte Kennung, die die Unit an den Logger übergibt.

Schließen Sie die Regel nach der Aktion, damit die Datensätze nicht auch noch ins Standardziel durchfallen. Doppelte Zeilen in zwei Dateien sehen wie ein Logging-Fehler aus und sind in Wahrheit ein fehlender Stopp. Dieselbe Unterlassung verdoppelt auch die Speicherkosten der Aufbewahrungsrichtlinie.

Rotieren, ohne den Deskriptor zu verlieren

Wenn der Daemon die Datei schreibt, benennt logrotate den Pfad um, aber der Prozess behält seinen offenen Deskriptor. Neue Datensätze laufen weiter in die umbenannte Datei, bis etwas den Prozess dazu bringt, den ursprünglichen Pfad neu zu öffnen; deshalb kann eine Rotation zu funktionieren scheinen, während die neue Datei leer bleibt.

Die Lösung ist eine postrotate-Aktion, die das dokumentierte Neulade- oder Neustartverhalten des Dienstes auslöst. Dem Logger ein Signal zu schicken ist eine ganz andere Aktion und bewirkt nichts für einen Daemon, der seine eigene Datei hält.

Wo ein erneutes Öffnen unmöglich ist, ist copytruncate der Rückfall: Datei kopieren, dann an Ort und Stelle abschneiden. Der Deskriptor bleibt gültig, dafür geht alles verloren, was zwischen Kopie und Abschneiden geschrieben wird; es ist also ein Tausch und keine Lösung. Unter Last kann diese Lücke genau den Fehler verschlucken, den Sie einfangen wollen.

Wählen Sie pro Datei eines von beidem und schreiben Sie die Wahl auf, denn das Mischen auf demselben Pfad erzeugt Lücken, die sich später kaum zuordnen lassen. Wer beide Muster in einem Verzeichnis findet, kann nicht sagen, welches maßgeblich ist.

Aufbewahrung aus dem Vorfallfenster ableiten

Aufbewahrung, Kompression und Höchstgröße sollten daraus folgen, wie weit zurück Sie tatsächlich ermitteln. Ein Fenster von sieben Tagen mit Kompression und Größenobergrenze ist für viele Umgebungen ein vernünftiger Ausgangspunkt; eine aus einem Tutorial kopierte Zahl ist es nicht.

Halten Sie die Richtlinie an einer Stelle. Wenn logrotate die Datei rotiert und rsyslog sie ebenfalls rotiert, gewinnt die zweite Rotation, und das Namensschema der ersten überlebt als Ballast. Bestimmen Sie den Eigentümer, deaktivieren Sie die andere Rotation und notieren Sie diese Entscheidung neben der Richtlinie.

Die rsyslog-Dokumentation behandelt ihr Routing- und Aktionsmodell, während die Dokumentation des OpenVPN-Dienstes für die eigenen Logging-Optionen des Daemons maßgeblich bleibt. Keine von beiden entscheidet Ihre Aufbewahrungsrichtlinie für Sie.

Testen Sie eine Rotation und ein neues Ereignis

Erzwingen Sie eine einzige Rotation und erzeugen Sie dann ein neues Ereignis, etwa eine fehlgeschlagene Authentifizierung. Bestätigen Sie, dass der neue Datensatz in der neuen Datei erscheint und dass die alte Datei aufgehört hat zu wachsen.

Prüfen Sie auch die Rechte an der neuen Datei, denn eine Rotation, die sie mit einem anderen Eigentümer neu anlegt, bricht den Schreiber beim nächsten Schreiben und erzeugt eine Lücke, die wie ein Absturz aussieht. Vergleichen Sie Eigentümer und Modus mit dem Dienstkonto, bevor Sie gehen. Bestätigen Sie dann, dass das komprimierte Archiv lesbar ist, denn ein Archiv, das niemand öffnen kann, ist keine Aufbewahrung. Ein kurzer Blick auf den neuesten Datensatz in der alten Datei belegt sowohl die Kompression als auch die Rechte.

Beenden Sie, indem Sie den Eigentümer jedes Schritts festhalten: welche Komponente schreibt, welche rotiert und wo die Aufbewahrungsrichtlinie lebt. Dieser Eintrag macht den nächsten Logging-Vorfall zu einer Fünf-Minuten-Prüfung statt zu einem Nachmittag voller Rätselraten, welche Schicht die Zeile verloren hat.

Ähnliche Artikel