RSS : Articles / Comments


LogProcessing - Part 2

11:00, Posted by RZ-Admin, No Comment

1.) Apache Logging & Logs einsammeln

(Nochmal zurück zum Intro)

Ausgangspunkt des ganzen sind die Logs. Diese braucht man schon mal in einem Format mit dem man leicht weiter arbeiten kann.
Um das ganze ohne Probleme auswerten zu können habe ich mich für das "Combined Log Format" entschieden - die erweiterte Form des "Common Log Format".
Dies muss für unsere Zwecke jedoch noch um den "virtual Host" erweitert werden, sprich, jede Zeile beginnt nicht wie üblich mit der Client IP, sondern mit dem Host Header des virtual Host. Im Apache sieht das wie folgt aus:

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" comb_vHost
(Natürlich ohne Zeilenumbruch, sollte es bei euch nicht in eine Zeile passen...)
Durch die zusätzliche Aufführung des Hosts (%v) spare ich mir schon einmal für jeden Host ein eigenes Log anzulegen. Das macht das ganze an den Präsentationservern draußen etwas übersichtlicher und ich habe im Prinzip nur "ein" Log. Die Anführungszeichen deshalb, da ich natürlich durch Logrotation mehrere habe. Logrotation generell ist eine tolle Sache. Ich kann die Logs alle etwas kleiner halten und kann die schon mal grob pro Tag aufteilen.

Bei uns rotieren die Logs nicht nach Zeit, sondern bei 10MB. Das ist die Größe wo ein Zugriff auf ein Log nicht ewig dauert, wir aber noch nicht zu viele Logs haben. Diese Größe sollte vielleicht je nach Belieben angepasst werden. Bei uns sieht der Eintrag für CustomLog also wie folgt aus:
CustomLog "|bin/rotatelogs.exe E:/logs/apache_access_[server]_%Y.%m.%d_%H.%M.log 10M" comb_vHost

Der Pfad unseres Vertrauens wohin die Logs geschrieben werden ist, wie ihr sehen könnt, "E:\logs\". Dies ist natürlich den eigenen Vorstellungen anzupassen.
"[server]" sollte natürlich entsprechend angepasst werden, selbstverständlich durch den Namen des Webservers himself - nicht irgendeiner Domain.
Diesen Eintrag macht man auch nur einmal zentral in der httpd.conf - dieser ersetzt die "CustomLog"-Direktive eines jeden einzelnen virtual Hosts!
Ein Standard virtual Host sieht bei uns übrigens so aus:
<VirtualHost *:80>
ServerName [domain]
DocumentRoot E:\www\[domain]
ScriptAlias /cgi-bin/ "E:/cgi-bin/[domain]/"
RewriteEngine On
RewriteOptions Inherit
</VirtualHost>

An dieser Stelle haben wir jetzt schon mal an jedem Server einen Ordner, in den maximal 10MB große Logs liegen. Sämtliche virtual Hosts loggen zusammen in dieses eine Ziel.

Der Rest ist wieder ganz einfach:
Nächtlich ein Script am kleinen Server im Intranet laufen lassen, welches aus diesen Ordnern die Logs einsammelt.
Aber Vorsicht: keine Logs im Zugriff einfach weg ziehen! Entweder kurz vorher am Webserver draußen ein Maintenancescript laufen lassen, welches den Apache restartet und Logs vom Vortag weg verschiebt, oder Rotatelog zeitlich so steuern, dass die Logs tageweise angelegt werden. Letzteres erfordert jedoch wieder Logik beim Copyscript, welches die Logsfiles einsammelt. Ich habe mich ganz billig für erstere Methode entschieden. Um 01:00 Uhr wird draußen der Apache gestoppt, die Logs in einen Copy-Ordner geschoben und Apache dann wieder gestartet. 5 Minuten danach das selbe auf dem zweiten Server und 5 Minuten danach auf dem dritten Server.
Die ganzen Logs landen dabei dann in dem Ordner "E:\logs\move" von wo sie vom zentralen Server dann alle um 05:00 Uhr abgeholt werden.

Nun sind wir also an dem Punkt, dass unser Server auf dem die Logs weiter ausgewertet werden sollen nun von sämtlichen Webservern draußen die Logs lokal hat, fein säuberlich in 10MB-Häppchen wo wild jeder virtual Host rein geloggt hat.

In Schritt 2 werden wir nun die Logs aufbereiten.
Ablaufplan & Übersicht

No Comment