Nach längerer Zeit hab ich deinen Log-Parser mal wieder getestet und dabei sind mir ein par dinge aufgefallen.
Ich habe derzeit eine Server Konfiguration mit mehreren IPs und Domains und SubDomains die alle in eine Log-Datei mit einer Tages Log-Rotation geschrieben wird. Mein Log Format ist etwas Umfangreicher. Soviel zur Server Umgebung.
Die zum Test herangezogenen Log-Dateien umfassen derzeit 1.16 GB in 460 Dateien.
Das im Test Verwendete Log Format ist:
"%t %V:%p %a (%I,%O) [%T] %{X-Forwarded-For}i %u %l %>H %>m %>f %<s %>s %b Req=\"%r\" Referer=\"%{Referer}i\" Agent=\"%{User-Agent}i\""
Daraus ergeben sich Log-Daten wie folgend:
[02/Dec/2009:01:44:06 +0200]
www.domain_b.de:80 217.0.0.23 (918,203) [0] - - - HTTP/1.1 GET D:/home/web/80.de.domain_b.www/images/smiles/yahoo/jetzt_komm_schon.gif 304 304 - Req="GET /images/smiles/yahoo/jetzt_komm_schon.gif HTTP/1.1" Referer="http://www.domain_a.de/shoutbox_view.php?0?auto_refresh=1" Agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.
Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)"
[02/Dec/2009:01:44:11 +0200]
www.domain_b.de:80 84.0.0.127 (598,10789) [1] - - - HTTP/1.1 GET D:/home/web/80.de.domain_b.www/portal.php 200 200 10124 Req="GET /portal.php HTTP/1.1" Referer="-" Agent="Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9 (.NET CLR 3.5.30729)"
[02/Dec/2009:01:44:32 +0200] 85.0.0.149:80 217.0.0.89 (46,506) [0] - - - HTTP/1.1 GET - 400 400 315 Req="GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" Referer="-" Agent="-"
[02/Dec/2009:01:44:33 +0100] domain_a.de:80 66.0.0.132 (251,652) [0] - - - HTTP/1.1 GET - 303 303 353 Req="GET /robots.txt HTTP/1.1" Referer="-" Agent="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
[02/Dec/2009:01:44:41 +0100]
www.domain_a.de:80 66.0.0.183 (255,581) [0] - - - HTTP/1.1 GET D:/home/web/80.de.domain_a.www/robots.txt 404 404 326 Req="GET /robots.txt HTTP/1.1" Referer="-" Agent="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
[02/Dec/2009:01:44:41 +0100] domain_a.de:80 66.0.0.132 (224,631) [0] - - - HTTP/1.1 GET - 303 303 343 Req="GET / HTTP/1.1" Referer="-" Agent="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
[02/Dec/2009:01:44:41 +0100]
www.domain_a.de:80 66.0.0.183 (255,580) [0] - - - HTTP/1.1 GET D:/home/web/80.de.domain_a.www/robots.txt 404 404 326 Req="GET /robots.txt HTTP/1.1" Referer="-" Agent="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
[02/Dec/2009:01:44:41 +0100]
www.domain_a.de:80 66.0.0.183 (228,2474) [0] - - - HTTP/1.1 GET D:/home/web/80.de.domain_a.www/index.php 200 200 2221 Req="GET / HTTP/1.1" Referer="-" Agent="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Nun die Dinge die mir aufgefallen sind:
1) Es ist bei dieser Log Konfiguration nicht Möglich ein Report für nur eine Domain oder SubDomain zu machen.
2) Das Parser dauert extrem Lang. Bei Nutzung eines CPU Kerns gestoppte 5 Minuten 20 Sekunden.
3) Man kann im Profil nur ein Hostname und co Eintragen.
4) Die per Default eingetragenen Dateinamenserweiterungen sind etwas Unvollständig. Dort gehören auch die gebräuchlichen Endungen für Videos und Medien Dazu oder besser sogar in eine extra Gruppe in den Report.
5) Idee: Es währe denke ich effektiver die Daten nicht direkt auszuwerten sondern in eine SQL-Lite oder ähnliche Datenbank zu Parsen und bei späteren erneuten Parser diese Daten nur aktualisieren. Den Report dann aus dieser Daten erstellen ist schneller. So handhabe ich das per PHP auf meinem Server.
6) Das Layout der Reports überarbeiten. So das jede Tabelle in einer Art einzel Seite Dargestellt wird und nicht wie jetzt alle Daten untereinander. Das macht es unübersichtlich.
7) Eine Frage: Hast du das mit dem CronJob aufrufen schon eingebunden. Damit man den Parser per Console alla
"HttpLogState.exe /Parse"
"HttpLogState.exe /Report /Profil=ALL"
So glaube das war erstmal alles, denke ich. Wie gesagt das sind nur kleine Anmerkungen von mir.
MfG
neo