Sortieren von Logfiles?
G. T.
- perl
Hi folks,
gibt es bereits vorgefertigte Scripte um ein Unix/Apache Logfile zu sortieren? (nach IP, OS, Browser, etc.)
Das Beispiel im "Kochbuch" klappt irgendwie nicht...
Logfile Auszug:
62.158.203.xxx - - [24/May/2000:10:55:52 +0200] "GET /config HTTP/1.0" 301 233 212.227.xxx.xxx "-" "Mozilla/4.05 [de]C-NECCK (WinNT; I)"
So habe ich es dann "abgetippt" (verstehen tu ich da allerdings nix!)
while (<LOGFILE>)
{
my ($client, $identuser, $authuser, $datum, $uhrzeit, $zz, $methode, $url, $protokoll, $status, $bytes) = /^(\S+) (\S+) [([^:]+) : (\d+:\d+:\d+) ([^]]+)] "(\S+) (.*?) (\S+)" (\S+) (\S+)$/;
print "$client\n";
}
Falls jemand ein Script dafür kennt bzw. eine Idee hat wie man es besser (leichter) machen könnte wäre ich äußerst dankbar dafür.
best regards
GT
Hi GT,
Falls jemand ein Script dafür kennt bzw. eine Idee hat wie man es
besser (leichter) machen könnte wäre ich äußerst dankbar dafür.
das folgende Statemant packt Dir die Logfilebestandteile (apache-Logfile) in Variablen, mit denen Du dann irgendwas anstellen kannst, z.B. auszaehlen:
(($site,$rfc931,$user,$when,$request,$status,$bytes,$from,$agent)=
/^(\S+)\s*(\S+)\s*(\S+)\s*[([^]]+)]\s*"([^"]+)"\s*(\S+)\s*(\S+)\s*"\s*([^"]*)\s*"\s*"\s*([^"]*)\s*"\s*$/o)
Mehr Ideen zur Logfileanalyse mit Perl findest Du z.B. in den Scripten unter
http://cgi.resourceindex.com/Programs_and_Scripts/Perl/Logging_Accesses_and_Statistics/
Gruss
Dorthe
P.S. Kennt jemand ein (freies) Script, das typische Wege von Usern auf Webseiten berechnen kann?
Hi GT,
Logfile Auszug:
62.158.203.xxx - - [24/May/2000:10:55:52 +0200] "GET /config HTTP/1.0" 301 233 212.227.xxx.xxx "-" "Mozilla/4.05 [de]C-NECCK (WinNT; I)"So habe ich es dann "abgetippt" (verstehen tu ich da allerdings nix!)
while (<LOGFILE>)
{
»» my ($client, $identuser, $authuser, $datum, $uhrzeit, $zz, $methode, $url, $protokoll, $status, $bytes) = /^(\S+) (\S+) [([^:]+) : (\d+:\d+:\d+) ([^]]+)] "(\S+) (.*?) (\S+)" (\S+) (\S+)$/;
»» print "$client\n";
}
Im Ansatz ist das ja schon richtig. Vom Prinzip wird mit einem Regulären Ausdruck versucht, sozusagen ein Template für die Logzeile zu definieren. Die Platzhalter (in diesem Fall geklammerte Ausdrücke) werden dann Variablen zugeordnet. Hier mal zum Vergleich untereinander:
$client $identuser $authuser $datum $uhrzeit $zz $methode $url $protokoll $status $bytes
^(\S+) (\S+) [([^:]+) : (\d+:\d+:\d+) ([^]]+)] "(\S+) (.*?) (\S+)" (\S+) (\S+) $
^ ^ ^
+-------- hier wurde einmal (\S+) vergessen
+------- Zeilenanfang Zeilenende ---------+
abgesehen von dem vergessen (\S+) dürfen um das freistehen : keine Leerzeichen stehen, da diese dann auch in der Logdatei "gesucht" aber nicht gefunden werden. Auch stehen in Deinem Logfile mehr Einträge, als erwartet werden:
212.227.xxx.xxx "-" "Mozilla/4.05 [de]C-NECCK (WinNT; I)"
Der Reguläre Ausdruck erwartet aber schon das Zeilenende ... Fürs erste einfach das $-Zeichen am Ende entfernen.
Gruß,
Jörk