Und es geht doch! Dank Wennääh’s genialem Einfall hab ich auf die Schnelle ein Script gehäkelt, welches die Logfiles aller Webserver-Instanzen archiviert. Doch Eins nach dem Anderen:

Das Problem

wenn der (die) Webserver in IP-Symcon so konfiguriert sind, dass sie ein Logfile schreiben, dann tun sie das sehr konsequent: das Logfile ist während der Laufzeit der Server für weitere (schreibende) Zugriffe gesperrt. Man könnte das Log also nur dann löschen, wenn  IPS runtergefahren wurde. Nur deswegen fahre ich mein IP-Symcon nicht runter. Das muss laufen! 7x24h!.

Die Folge ist, dass das Logfile nach einigen Tagen (je nach Zugriffsintensität durch Webfrontends) ziemlich groß wird. Das ist an sich kein Problem (also keinerlei Performance-Probleme). Dachte ich bis jetzt. Hier gibts einen dokumentierten Fall, wo offensichtlich das lokale IP-Symcon mehr oder weniger den Betrieb einstellte, weil das Logfile über 2 GB groß war: klick

Und erst dann, wenn man die Logdaten analysieren will (z.B. Ferengi’s WF- Zugriffsanalyse), macht man (bzw. der Server) schnell dicke Backen: der Speicherverbrauch eines  PHP Threads ist (je nach Konfiguration) auf wenige MB RAM limitiert. Da muss man schon etwas tricksen, um überhaupt arbeiten zu können. Selbst dann kann eine solche Analyse Minuten dauern.

Über Backup’s will ich mich hier nicht unbedingt auslassen, diese Files grenze ich grundsätzlich vom Backup aus.

Die Lösung

Wennäh (wgreipl)hatte die geniale wie einfache Idee, das Logging der Webserver-Instanz via Scriptbefehl zu deaktivieren, um dann (schreibenden) Zugriff auf das Logfile zu haben. Verrückt einfach, aber es klappt. Also hab ich flugs ein Script gehäkelt, welches das Logging deaktiviert, das Logfile umbenennt (Datum [Ymd] wird an den Filenamen angehängt) und anschließend das Logging wieder aqktiviert. Der Webserver merkt dann, dass kein Logfile da ist und legt ganz von allein ein neues Logfile an.

Die Folge sind täglich mundgerecht aufbereitete Häppchen, die wesentlich gezielter und ressourcenschonender durch PHP-Scripte angesaugt werden können (ich frag mich, warum das nicht ein eingebautes Standard-Feature ist ;-) )

Das Script

Features:

Wie schon angedeutet, macht dieses Script aus jedem Logfile kurz nach Mitternacht eine Archiv-Datei, in dem er das Logfile umbenennt (Beispiel: access_17674.log => access_17674_20130309.log)

Dann kamen noch Komfort-Features dazu:

    • keinerlei Konfiguration durch den Anwender erforderlich
    • legt automatisch ein Timer-Event an, welches das Script täglich um 00:00:12 Uhr auslöst
    • findet automatisch alle im System befindlichen Webserver-Instanzen und dazugehörigen Logfiles
    • löscht automatisch alle Webserver-Logfiles nach 30 Tagen 
    • schreibt eine Meldung ins IP-Symcon Systemlog, wann welches Webserverlog archiviert wurde

Installation:

Script aus dem Download unten einfach ins eigene IP-Symcon importieren und einmalig manuell starten -fertig

Konfiguration:

nicht erforderlich (bei Bedarf kann der Vorhaltezeitraum für archivierte Logfiles verändert werden: Variable $SaveDuration)

 

 


Getagged mit
 

Schreibe einen Kommentar

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

css.php