phpbar.de logo

Mailinglisten-Archive

Sessions/Visits aus Webserver-Log per mySQL ermitteln

Sessions/Visits aus Webserver-Log per mySQL ermitteln

Rene Fertig mysql_(at)_lists.phpcenter.de
Sat, 5 May 2001 16:02:56 +0200


Hi.

Am Sam, 05 Mai 2001 schrieb Michael Bergbauer:
> > Ich habe die Logfiles meines Apache mit einem Perlscript zerlegt und in
> > eine mySQL-Tabelle "logdata" mit den folgenden Spalten importiert:
> > 
> > ID
> > client
> > zeit
> > methode
> > url
> > protokoll
> > status
> > bytes
> > agent
> > referer
> > 
> > Somit kann ich prima nach allem möglichen abfragen. Was ich aber irgendwie
> > nicht hinbekomme, ist eine Abfrage nach Sessions bzw. Visits. Eine Session
> > beginnt ja mit dem Auftreten einer client-IP-Adresse, die seit einer
> > festgelegten Zeit (z.B. 30min) vorher nicht auftrat. Das Ende der Session
> > ist das letzte Auftreten dieser IP für die festgelegte Zeit.
> > Aber wie finde ich sowas mit mySQL raus? Hat jemand sowas schon gemacht
> > und7oder eine Denkansatz für mich? Oder gibt es gar Literatur dazu??
 
> Mich würd prinzipiell mal interessieren, was du schon gemacht hast, und
> nicht zum Erfolg führte.

Na ja, der erste Versuch war die von dir gennante Abfrage 
"select client, min(zeit) from logdata group by client;" Mittlerweile hab
ich festgestellt, das anscheinend bei einige Visits mehrere IP-Adressen
Verwendung finden!? Dann nützt die Abfrage nicht viel. Außerdem wird eine
IP somit immer nur einmal ausgegeben, auch wenn sie einige Zeit später bei
einer neuen Session auftaucht (z.B. ISP mit dyn. Adressvergabe). Also ist
dieser Ansatz leider ein Holzweg.
Die nächste Idee war, über den Referer zu gehen, da dieser beim Beginn der
Session nicht von der eigenen Domain stammen kann. Aber leider ist das
auch recht unzuverlässig.
Deswegen bin ich wieder auf die Zeitliche Abhängigkeit zurück und versuche
hier nun mein Glück. Aber ich weiß noch nicht so richtig wie. :-(

 
> Grundsätzlich würd ich allerdings sagen, solltest du von MySQL nicht zuviel
> sagen: ne Query "Gib mir alles so wie ich es haben will" gibt es leider nicht,
> MySQ ist keine eierlegende Wollmilchsau. Ganz ohne Logik im Client wirst du
> nicht auskommen, so ein komplexes Thema läßt sich IMHO nicht ganz in einem
> einzigen SQL-Statement unterbringen (zumindest nicht ohne Unions, Subselects,
> Views, und dem ELWMS-Modul).

Dessen bin ich mir schon bewusst. Aber erstmal muss ich den Lösungsweg
finden, dann kann ich das mit Perl oder PHP zu einem Tool ausbauen.

> Ich würd das wohl so lösen, das ich mir erstmal die Einträge raussuch, die der
> Beginn eines Visits sind (select ip, min(zeit) from table group by ip), und
> dann die zugehörigen Visits einer nach dem anderen. Ein Problem ist, das du
> deine Zeit-Fenster variabel gestalten muss, das aber AFAIK mit MySQl nicht
> möglich ist (ich lass mich aber gerne eines besseren belehren), das muss also

?? warum muss das Zeit-Fenster variabel sein? Sorry, ich hab wohl zurzeit
ein ziemlich dickes Brett vorm Kopf |-(

> Hmm, wenn ich mir das so recht überlege ... da gibts ne Menge anderer
> Lösungsansätze, so gut scheint der gar nicht zu sein ... aber es ist mal einer

Immer her mit den anderen!

Ciao, Rene

-- 
----------------------------------------------------------------------
     mailto:rene_(at)_renux.de                     http://www.renux.de
----------------------------------------------------------------------

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive