Apache-Piping zum einfachen Wechseln von Logdateien

Was macht man, wenn die Logdatei zu groß wird und verkleinert werden muss? Die Verwendung der Apache-eigenen Fähigkeiten zum Piped Logging, mit denen die Logdateien einfach und sicher gewechselt werden können, bieten eine gute Lösung.

Bei der Verwendung von Apache als Logging-Tool gibt es in der Basiskonfiguration eine zu erwähnende Einschränkung. Alle Logaufzeichnungen landen in einer einzigen Datei und das bringt eine Reihe von Problemen mit sich. Was macht man zum Beispiel, wenn die Logdatei zu groß wird und verkleinert werden muss? Dazu müsste man den Apache-Server anhalten, die Datei an einen sicheren Speicherort kopieren und kürzen, und dann den Apache neu starten, um mit dem Logging fortzufahren. Eine bessere Lösung ist die Verwendung der Apache-eigenen Fähigkeiten zum Piped Logging, mit denen die Logdateien einfach und sicher gewechselt werden können.

Pipes – die elegante Lösung

Hier soll kein Streit zwischen Unix und Windows vom Zaun gebrochen werden, aber auf eine der nützlichsten Eigenschaften von Unix-Programmen soll doch hingewiesen werden, nämlich auf die Möglichkeit, ihre Ausgabe- und Eingabekanäle miteinander zu verknüpfen (Piping). Wenn man eine riesige, mehrere Megabyte große Apache-Logdatei nach bestimmten Informationen durchsuchen will, ist es überaus praktisch, dass man die Tools grep, cut, uniq und sort ganz nach Belieben hintereinander schalten kann. Aber das ist Stoff für einen weiteren Artikel.

Hier soll es zunächst einmal um das automatische Wechseln von Logdateien gehen. Dazu wird die Fähigkeit von Apache genutzt, den Ausgabestrom der CustomLog-Direktive in eine externe Anwendung umzuleiten. Wer ein ausgeklügeltes Warn- oder Logsystem benötigt, kann auch eine eigene Logging-Anwendung erstellen, aber für diesen Zweck hier kann man auf die schlichte rotatelogs-Anwendung zurückgreifen, die zum Lieferumfang der Apache-Installation gehört.

Zur Erinnerung – in den httpd.conf-Dateien findet sich eine LogFormat-Direktive, die ungefähr wie folgt aussieht:



(Eine detailliertere Beschreibung von LogFormat findet sich im erwähnten früheren Artikel.) Aber statt der standardmäßigen CustomLog-Direktive wird der Ausgabestrom zu rotatelogs umgeleitet:



Natürlich muss man /opt/httpd/bin/ durch das eigene Apache-Installationsverzeichnis ersetzen. Als Name der Logdatei wurde bislang nur ein relativer Pfad angegeben. Aber hier wird die Logdatei von der rotatelogs-Anwendung geschrieben und nicht von Apache selbst. Um Probleme zu vermeiden, wird hier ein vollständiger absoluter Pfad für die Logdatei angegeben. Die Zahl am Ende der in Anführungszeichen stehenden Zeichenkette gibt die Anzahl der Sekunden zwischen den Rotationen an. Dieser spezielle Wert ist die Anzahl der Sekunden für einen 24-Stunden-Tag, so dass rotatelogs jeden Tag zu einer neuen Logdatei wechseln wird.

Der Name der Logdatei richtet sich dabei ganz nach den Angaben in der obigen CustomLog-Direktive. Allerdings hängt rotatelogs eine Zahl an den Dateinamen an, nämlich die Zeit, zu der die jeweilige Logdatei erstellt wurde:



Man wird also jeden Tag eine neue Logdatei im Logverzeichnis finden, mit einer neuen Timestamp-Zahl als Erweiterung am Dateiende. Eine Kleinigkeit gilt es hierbei jedoch zu beachten: Falls an dem jeweiligen Apache-Port keine Aktivität stattfindet, wird die neue Logdatei mit der neuen Erweiterung nicht erstellt. Dies geschieht nur, wenn es tatsächlich aufzuzeichnende Aktivitäten gibt. Das bedeutet, dass zwischen den Zeitangaben zweier aufeinander folgender Logdateien mehr als 24 Stunden liegen können, wenn auf dem entsprechenden Port nicht viel los ist.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

ZDNet für mobile Geräte
ZDNet-App für Android herunterladen Lesen Sie ZDNet-Artikel in Google Currents ZDNet-App für iOS

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Apache-Piping zum einfachen Wechseln von Logdateien

Kommentar hinzufügen

Schreibe einen Kommentar

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