Michael Schröpl: Serverlogfile auslesen

Beitrag lesen

Hi Meik,

#Software: Microsoft Internet Information Services 5.0

herrliches Beinkleid.

#Fields: date time c-ip cs-username s-sitename s-computername s-ip
s-port cs-method cs-uri-stem cs-uri-query sc-status sc-win32-status
sc-bytes cs-bytes time-taken cs-version cs-host cs(User-Agent) cs(Cookie)
cs(Referer)

Eieiei. Was machen denn Felder wie "Win32-Status" in einem HTTP-Log?

Ein großer Teil der aufgelisteten Informationen hat allerdings zumindest eine vage Ähnlichkeit mit existierenden HTTP-Feldern. ;-)

Der Weg, den zu gehen ich Dir empfehlen würde, besteht _nicht_ darin, ein eigenes Auswerteprogramm zu schreiben. Mit Webalizer und Konsorten konkurrieren zu wollen, halte ich für Zeitverschwendung - sofern Du keinen hochgradig wichtigen Grund dafür hast, etwas berechnen zu wollen, das _keines_ der gängigen Tools kann.
Dazu müßtest Du uns allerdings _exakt_ beschreiben können, _was_ Du eigentlich berechnen möchtest. Ohne Aufgabenstellung kein brauchbarer Lösungsansatz.

Ich empfehle dennoch prophylaktisch,

  • entweder ein Tool für Dein Format zu finden
  • oder Dein Format den Anforderungen eines guten Tools anzupassen.
    Beides erfordert das Verständnis der Definitionsmöglichkeiten für Log-Formate in Deinem M$-IIS.

Ist das Dein eigener Server? Kannst und darfst Du dessen Konfiguration lesen bzw. ändern?
Lesen würde Dir ggf. den Namen des verwendeten Formates liefern - der wiederum wäre ein hervorragender Suchmaschinen-Begriff, um Tools zu finden, die genau dieses Format lesen können.
Ändern wäre noch besser - möglicherweise kannst Du statt dieses M$-Gruselwusel auch ein offenes Standardformat wie CLF erzeugen und hast dann Tools ohne Ende für die Auswertung.

Falls alle Stricke reißen, bliebe Dir noch, einen Zeilenkonverter zu schreiben. Das ist ganz einfach, wenn Du das Zeilenformat verstanden hast.
Offensichtlich sind diese Zeilen im Wesentlichen whitespace-separiert - mit "split()" oder nur unwesentlich mehr mehr an Intelligenz könntest Du eine Zeile in ihre Felder zerschlagen und anschließend in CLF etc. in eine andere Datei schreiben.
Möglicherweise mußt Du dabei minimale Umcodierungen vornehmen - in Deinem Beispiel sehen bestimmte "+"-zeichen beispielsweise so aus, als ob sie eigentlich Leerzeichen codieren sollen (was Dir die Arbeit beim Einlesen übrigens erleichtert).
Über das Ergebnis läßt Du dann den Webalizer drüber laufen, und fertig ist die Laube. Vermute ich jedenfalls - bis zum Beweis des Gegenteils.

Viele Grüße
      Michael