DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
Benutzertracking mit Bordmitteln

Öfter wird in den Newsgroups gefragt, wie man den die Zugriffe auf die Website auswerten kann. Nun  dafür gibt es Tools wie den Siteserver von MS oder Analog als Freeware. Beide sind etwas rau zu bedienen, weil Sie schlicht zu universell sind. Bisher haben wir als getreue MS Diener den Siteserver 3.0 verwendet. Über unser Produkt IntraNaut sind wir aber jetzt von Kunden gefragt worden, wie kann der Zugriff auf einzelne Artikel aufgezeichnet werden. Der erste Gedanke war, na ganz einfach mit einer Tabelle im SQL Server und per "Insert Into" usw.
Der erste Gedanke ist aber auch manchmal nicht der beste. In Kombination der hier bereits erwähnten Tatsachen ist es besser auf die bereits vorhandenen Dinge zurückzugreifen- die Logfiles. Jeder Webserver hat sie.

Logfiles Kickoff( für Profis zum überspringen)
Die Zugriffe auf den Webserver werden detailliert in den Logfiles vom IIS aufgezeichnet. Man kann dies zwar ausschalten, sollte es aber nicht. Die Speicherung ist sehr effektiv und schlägt jede ASP ODBC Zugriffsspeicherung um Performance Dimensionen. Die Information die aufgezeichnet werden soll, kann im IIS Admin (Website-Protokollierung-Eigenschaften-erweiterte Eigenschaften) detailliert festgelegt werden.

Darin findet man alles was man braucht wie die IP oder Referer Adress. Wenn das nicht reichen sollte, kann man über die IP noch Verknüpfungen zu Metainformationen machen. Aber dazu später mehr. Jeder Webserver (auch virtuelle) erzeugt sein eigenes Log Verzeichnis. Diese finden sich in der Regel unter
WINNT/SYSTEM32/logfiles.
Diese Logfiles enthalten Zeilen wie diese

2001-01-16 08:27:12 127.0.0.1 GET /aspbuch/genExcel.asp 200 0

Hier ist das Datum, die Uhrzeit, die IP des Requesters, das HTTP Kommando, der Request und der HTTP Status aufgezeichnet.

Logfiles Kickoff END

Entsprechen dem gewählten Format der Logfiles wird im nächsten Schritt eine Access Tabelle mit dem Namen Import1 angelegt.
[import1]
Datum  Datetime
IP Text(15)
cmd Text(50)
request Text(255)
Status Text(10)
Query Text(255)

Der Vorteil von einem Datenbanksystem ist, das man sehr einfach mit SQL Statements Auswertungen vornehmen kann. Dies beschreibe ich im 2ten Teil dieses Artikels. Nun aber zur Aufgabe: bringe die Log Dateien in die Tabelle. Dazu bemühen wir das Filesystem Objekt.
Da ist auch schon alles drin was wir brauchen.
Ich könnte eine VBS Datei schreiben oder auch ein ASP Seite. Hier zeige ich den Code mit ASP.
Zunächst holen wir alle Files im Folder mit Getfolder.
Dann wird durch die Auflistung abgearbeitet. Damit auch ganz sicher nur Log Files importiert werden, wird auf die Extension .LOG geprüft.
Dann wird Zeile für Zeile aus der Log Datei eingelesen. Per Split wird die Zeile in ein Array geschrieben. Als Trenner müss das Leerzeichen herhalten( Siehe Log Eintrag oben) Da in Logfiles auch der Start des IIS geschrieben wird und dies eine abweichende Info ist, prüfen wir noch ab ob die erste Spalte auch wirklich ein Datum ist.
Der Eigentliche Import passiert dann per "Insert Into" SQL Statement:

<%
set con=server.CreateObject("ADODB.Connection")
con.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:WINNTsystem32LogFilesimport.mdb;")
pfad="e:winntsystem32logfilesw3svc1"
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(pfad)
Set objFiles = objFolder.Files
on error resume next
 For Each objFile in objFiles
strFile = pfad & Lcase(objFile.Name)
  if instr(objfile.name,".log")>0 then
   set stream = objFSO.OpentextFile(strfile)
   do while stream.AtEndOfStream=false
    kette=stream.readline
    arr=split(kette," ")
    if isdate(arr(0)) then
     sql="insert into import1 values ('" & cdate(arr(0)) & " " &

arr(1)& "','" & arr(2)& "','" & arr(3)& "','" & arr(4) & "','"& arr(5) & "','"& arr(6) & "')"
     con.Execute sql
      end if  
     loop
    end if
 next     
%>

Diese Seite muss über den Browser aufgerufen werden. Wenn Sie 2 x gestartet wird, passiert der Import auch doppelt. Lösungsansätze liegen in der Datenbank Integrität oder man benennt das Logfile nach dem Import einfach um.
In der Praxis lässt man so einen Import zu einer Zeit laufen, wo der Webserver wenig zu tun hat. Da dies meist nachts ist, wäre eine Zeitgesteuerte Ausführung von Vorteil. Auch dazu gibt's hier einige Beiträge.
Im nächsten Artikel zeigen wir, was mit den so gewonnen Daten passiert.


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine Links vorhanden

  Erfasst am: 07.08.2001
  Gültig bis: 06.09.2001
1 Ratings
Bewertung: 80,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG