User since
2003-08-15
120
articles
BenutzerIn
Hallo!
Ich hab schon gesucht aber nix gefunden.
Ich möchte gerne meine Severlogs ein wenig genauer aufschlüsseln. Vergleichtabellen dynamisch erzeugen und son Zeug.
Weiß jemand wo ich genaueres zu den Logfiles finde, wie lang werden die?
Gibts für jeden Monat eine Datei?
Sollte man das alles in ein Array packen und dann durchwühlen?
Hat jemand den RegEg um die zu splitten?
Danke!
Grüße Sönke
User since
2003-08-08
2561
articles
HausmeisterIn
Welche Serverlogs meinst du denn speziell? Die deines Webservers, Linux Logs,...?\n\n
<!--EDIT|[E|B]|1066638886-->
Gruß, Erik!
s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}
It's not a bug, it's a feature! - [CGI-World.de]
User since
2003-08-15
120
articles
BenutzerIn
Ohh, sorry!
Apache Webserver natürlich!
Meine ich jedenfalls. Ist ein 1&1 Ding. Sehr viel sehen kann ich da leider nicht...
Mal so als Beispiel, so sieht eine Zeile aus:
217.230.71.217 - - [29/Sep/2003:09:51:13 +0200] "GET / HTTP/1.1" 200 26657 www.domain.com "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "-"
Die Dateien heißen alle
access.log.40
access.log.41
access.log.42
...
und so weiter
User since
2003-08-04
2536
articles
ModeratorIn
mh, mal sehen, was ich da noch zusammen bekomme ....
Quote217.230.71.217 - - [29/Sep/2003:09:51:13 +0200] "GET / HTTP/1.1" 200 26657 www.domain.com "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "-"
also, als erstes mal die ip vom client, die nächsten beiden felder, mhja, kA mehr, was sie verwenden ... dann, klar, das datum, anschließend der http-request, der http-statuscode (200, 404 etc pp), die anzahl der gesendeten bytes, der vom client verlangte HTTP_HOST, der referer, falls vorhanden, sonst "-", der useragent und abschließend, falls vorhanden, die ip des wirklichen users, wenn dieser über einen proxy gekommen ist, der das mitteilte.
die logfiles an sich können recht unbegrenzt lang werden, je nachdem, wieviel aktivität bei dir ist. zu jedem wochenabschluß gibt es eine neue, die die letzte woche beinhaltet
hier ein regexp, vielleicht genügt der dir:
$logline = '217.230.71.217 - - [29/Sep/2003:09:51:13 +0200] "GET / HTTP/1.1" 200 26657 www.domain.com "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "-"';
my ($client_ip, $unknown1, $unknown2, $time, $request, $status, $bytes, $host, $referrer, $useragent, $realclient_ip) = $logline =~ m/^([^ ]+) ([^ ]+) ([^ ]+) \[([^\[]+)\] "([^"]+)" (\d+) (\d+) ([^ ]+) "([^"]+)" "([^"]+)" "([^"]+)"$/;
print "$client_ip\n$unknown1\n$unknown2\n$time\n$request\n$status\n$bytes\n$host\n$referrer\n$useragent\n$realclient_ip";
sollte passen, bitte aber noch um verbesserung.
User since
2003-08-15
120
articles
BenutzerIn
Ahh, cool!!! Subba!
Der RegEg hilft mir! Hab mich jetzt auch mal ein wenig Intensiver reingehängt. Die von 1&1 machen nur HTMLs draus. Darin kann man dann statisch ewig zurück angucken. Für irgend ne Dynamik haben die jetzt z.B. noch die access.log´s zurück bis Anfang August drin.
An Daten davor komme ich also nicht ran.
d.h. für die Zukunft, muss ich mir über nen Cron eine eigene Datei schreiben, die 1&1 dann nicht löscht.
Zur Diskusion steht nun folgendes:
Wenn ich ca. 3000 Zugriffe/Monat habe, mache ich dann alles in eine Datei? Mache ich für jeden Monat eine Datei?
Wenn ich nun eine Vergleichtabelle erstellen will, August 2002 und August 2003, dann müsste ich mir ne ganz schön fette Datei in mein Array packen.
Oder mache ich mir immer Monatsdateien und selektiere nach den Wünschen des Users erstmal welche Dateien ich mir nur in mein Array lade?!
Ich meine mich dunkel zu erinnern, das Perl auch eine Datei selbst als Array ansehen kann. Also diese nicht in den Arbeitsspeicher packt?! Mit irgend einem Modul!
Was meint Ihr?
Mehrer Dateien bauen? -> ja, oder?
Je einen Monat?
Je ein Jahr?
Danke für die Hilfe!!!
User since
2003-08-04
2536
articles
ModeratorIn
also ich würde, um den aufwand vertretbar zu halten, einfach irgendwo lokal einen cron aufsetzen, der montags morgens per ftp in deinen acc geht und sich die letzte log als gz runterlädt und lokal speichert. ich würde keine riesendateien bauen, sondern sie im wochenformat lassen, dann kannst du wunderbare monatsvergleiche machen, ohne jedes mal gleich ein paar gb durchwühlen zu müssen.
gleichzeitig, denke ich, kann es nicht schaden, jeweils am monatsende eine deinen wünschen entsprechende statistik für den letzten monat zu machen und die irgendwo in raw-form abzulegen, d.h. nicht als html oder so, damit du darauf zugreifen und sie ggf mit anderen monaten vergleichen kannst.
puretec löscht die logdateien, die älter als 7 (oder so) wochen sind, damit dein speicherplatz nicht so zugemüllt wird (oder ihrer, kA, ob sie das von deinem abziehen, aber denke nicht), daher musst du sie vorher lokal sichern. sollte ja nicht das problem sein.
generell würde ich also wocheneinheiten lassen, machen meiner ansicht nach am meisten sinn.
wie du die dann parst, ist eine andere frage. ein array ist da wohl nicht ganz so genial, da der nur jeweils die ganze logzeile beinhalten würde, was nicht so optimal ist. ich würde die daten eigentlich gar nicht im speicher halten, sondern nur die auswertung, will sagen, du gehst die logdateien zeile für zeile durch und wertest on the fly aus. zum beispiel eben hast du einen hash, der alle angefragten seiten als key enthält und wo du dann jeweils hochzählst im value, sodass du nachher genau sagen kannst, welche seite wie oft angefragt wurde. dann das selbe für den useragent etc pp. und dann kannst du das natürlich noch mit dem status kombinieren (à la "Status 200: so viele insgesamt, top 100 angefragte dateien. Status: 404....."). und natürlich, wenn du da einen modus vivendi findest, für sessions, d.h. zum beispiel du sagst "ok, ich mach das ip-basiert und scheiß auf die proxy-leute und solche, die zufällig bei jedem request über ein anderes gateway rausgehen", dann schaust du, ob du für die ip, die den momentanen request stellte, schon eine session hast und ob der letzte zugriff in der session nicht länger als xyz minuten her ist. wenn ja: hinzufügen zu der session, wenn nein, neue session mit dem aufruf starten. so kannst du dir nachher eine statistik über die pageimpressions (seitenaufrufe pro besucher/besuch) ausgeben lassen. vielleicht kannst du daraus auch noch einigermaßen sinnvolle aussagen schließen wie "in 90% der sessions wurden folgende dateien aufgerufen, in 70% in dieser reihenfolge:", um dein besucherverhalten besser verstehen zu können.
um's kurz zu sagen: es gibt jede menge möglichkeiten, ich schlage vor: back to the drawing board und erst mal herausfinden, was genau du für statistiken brauchst und willst - dann einen weg überlegen, wie du an die stats herankommst.
nebenbei: es gibt, auch in perl, schon recht nette loganalyzer, die du vielleicht anpassen oder zumindest als vorlage verwenden kannst.
User since
2003-08-15
120
articles
BenutzerIn
Problem ist so ein bisschen, dass niemand weiß was eigentlich so richtig relevant ist. Es gibt das so ein unbekanntes Wesen Kunde...
Mit dem Array hast Du natürlich recht.
Uhhh, dass nimmt alles interessante Ausmaße an.
Wenn ich mir nun alles in verschiedene Hashes aufsplitte, wie sortiere ich den Inhalt der verschiedenen Hashes dann z.B. nach IP??? - HILFE!
Ich bin ja ein SQL-Liebhaber...
Wie wäre es mit ner Datenbank?
3000 Zugriffe im Monat, macht 360.000 Records in 10 Jahren, dass packt MySQL doch noch super und für mich ist es viel einfacher irgendwelche Auswertungen zu fahren.
Besser wären da natürlich 6 Manats Tabellen. Das ist doch dann alles überschaubar?!
Soll ich es so machen?
Kann ich nicht auch auf eine Textdatei mit SQL losgehen???
Die freien Scripts habe ich mir schon angesehen. Die passen alle nicht so. Natürlich erfinde ich das Rad nicht neu, aber ich möchte evtl. auch meine Daten noch von woanders füttern können. z.B. Verweildauer per JavaScript zählen und mit jedem Link weitergeben.
Außerdem habe ich den Eindruck, die wirklich guten Scripts kosten Geld. Außerdem erschlägt das meine Kunden glaube ich...
User since
2003-08-15
120
articles
BenutzerIn
Was kann ich denn alles über einen User sagen, wenn ich seine IP habe?
User since
2003-08-04
2536
articles
ModeratorIn
ach, deine kunden halten das für relevant, was du ihnen als relevant erklärst. ich mein, die haben natürlich wünsche wie "wer ist das" und vielleicht kannst du das durch unique-cookies auch zuordnen, aber ansonsten wollen sie wissen, wie ihre präsenz angenommen, wie sie durchsucht wird und so weiter. die vertrauen da auf dich - was auch sonst, sie selbst haben das wissen nicht und wozu sollten sie sich externe berater holen, wenn sie das wissen sich aneignen könnten (in einem vertretbarem zeitraum). ergo: du sagst, was relevant ist, daher das drawing board, denn das musst du auch erst einmal für dich festlegen.
sql geht natürlich, allerdings stellt sich die frage, ob das so sinnvoll ist ... schließlich müsstest du dann, um es auszuwerten, das doch wieder in eine datenstruktur in deinem script bringen.
wenn du nur eine ip hast, kannst du an sich gar nciht aussagen, außer, welcher provider diese ip registriert hat, mehr aber nicht. nur eben durch die verknüpfung der ip mit anderen daten kannst du dinge auswerten - allerdings sind da eben die proxys, die das problematisch machen können. will sagen: 10 leute gehe über einen proxy (oder eben auch ein gateway) ins netz - die scheinen für dich dann erstmal alle wie ein user aus, sind sie aber nicht. da ist das problem.
User since
2003-08-04
12208
articles
Admin1
[quote=root,20.10.2003, 10:41]Apache Webserver natürlich![/quote]
wie wär's damit:
http://search.cpan.org/~akira/Apache-ParseLog-1.02/ ?