Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Logfiles mit Access auswerten

Geschrieben von: Christoph Wille
Kategorie: Server

This printed page brought to you by AlphaSierraPapa

Das Auswerten von Logdateien ist eine wichtige Angelegenheit - man erfährt nicht nur, woran die Kunden am meisten interessiert sind, sondern auch, wo sich Fehler in einer Website eingeschlichen haben als auch ob jemand versucht hat, die Website zu cracken. Es gibt sehr viel hervorragende Reportingsoftware (einige Links am Ende des Artikels), die aber die ad hoc Abfragemöglichkeit einer Datenbank vermissen lassen.

Unter ad hoc verstehe ich, daß ich auf spezielle Bereiche "hineinzoomen" kann - und das mit der gesamten Power, die mir SQL an die Hand gibt. Klarerweise muß ich die Logfiles in eine Datenbank importieren, um mit SQL darauf zugreifen zu können. Als Einstieg in das Auswerten per Datenbank kann man Access verwenden - wird die Menge der Einträge allerdings groß, sollte man auf SQL Server umsatteln.

Die Frage des Imports habe ich händisch gecodet, da Access gewisse "Schwächen" bei großen Import-Datenmengen mit potentiell fehlerhaften Zeilen hat. Allerdings - und das aus Faulheitsgründen - habe ich ein Log mit nur einer einzigen Zeile importiert, um automatisch die Tabelle Logs anhand meiner Logfilefelder zu generieren, die da wären: date, time, c-ip, cs-username, s-sitename, s-computername, s-ip cs-method, cs-uri-stem, cs-uri-query, sc-status, sc-win32-status, sc-bytes, cs-bytes, time-taken, s-port, cs-version, cs(User-Agent), cs(Cookie), cs(Referer) .

Es ist durchaus sehr wahrscheinlich, daß Ihre Logfiles andere Felder beinhalten. Die Beispieldatenbank blank.mdb enthält jedenfalls eine Tabelle, die dem obigen Logfileformat entspricht, sowie eine kleine VBA Methode, die uns den Import korrekt formatierter Logdateien erlaubt:

Sub ImportLog(ByVal strLogfile As String)
    Dim fs As Scripting.FileSystemObject, f As Scripting.TextStream
    Dim strContent As String, arrStrings As Variant, i As Long
    Dim db As DAO.Database, rs As DAO.Recordset
    
    Set fs = New Scripting.FileSystemObject
    Set f = fs.OpenTextFile(strLogfile, ForReading, False)
    
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("Logs")
    
    Do While f.AtEndOfStream <> True
        strContent = f.ReadLine()
        arrStrings = Split(strContent, " ")
        If UBound(arrStrings) = 19 Then
            If IsDate(arrStrings(0)) Then
              rs.AddNew
                For i = 0 To UBound(arrStrings)
                    rs.Fields(i + 1).Value = Left(arrStrings(i), 255)
                Next
              rs.Update
            End If
        Else
            ' line does not fit our log file format
        End If
    Loop
    
    f.Close
    Set f = Nothing
    Set fs = Nothing
End Sub

Der Aufruf ist einfach mit ImportLog "logfile.txt", und kann in ein nettes Eingabeformular eingebaut werden - auf das ich verzichtet habe. Der Code selbst ist nur Auslesen einer Datei mit dem FileSystemObject und Eintragen der Daten in die Datenbank via DAO 3.6. Ich habe einige wenige Datenintegritätschecks eingebaut, wie zB daß ich eine gewisse Anzahl von Spalten im Logfile erwarte, sowie daß die erste Spalte ein Datum ist.

Damit kann man nun alle Logfiles in die Datenbank importieren, und man hat - nichts. Gut, einen riesengroßen Datenfriedhof, der ohne weitere Analyse klarerweise völlig umsonst angelegt wurde. Aber das wollen wir nun ändern.

Ich möchte mir exemplarisch einige Szenarien herausgreifen. Das erste? Ich will wissen, welche Aufrufe nicht erfolgreich waren, also 404er Fehler ausgelöst haben. Dazu öffne ich den Query Designer, und baue mir folgende Abfrage:

Ich bekomme nun eine Liste aller Seiten, die einen 404er HTTP Status ausgelöst haben. Was ich noch nicht weiß ist, wie oft. Alles was ich tun muß ist ein Count Feld hinzuzufügen:

Jetzt weiß ich, wie oft eine bestimmte Seite nicht gefunden wurde - und kann mittels dem cs(Referer) Feld auf die Suche gehen, woher die Leute auf diese Seite gelangen - und somit die Site für die User verbessern.

Ein weiterer Anwendungsfall wäre es, sich die Aufrufshäufigkeit bestimmter Seiten anzeigen zu lassen. Dies kann zwar auch jede Reportingsoftware, aber wir können hier und da etwas fürs Auge tun:

Das waren jetzt zwei anhand von SQL gezeigte Beispiele - Anwendungsfälle gibt es viel mehr, rangierend vom Aufspüren von 500er Fehlern (ASP Engine) bis hin zum Tracken von Hackern basierend auf speziellen 404er Fehlern. SQL ist leistungsfähig, und die Logfiles ein "Quell" von wichtigen Informationen über Kunden, Hacker und Spider (gerade die!).

Schlußbemerkung

Es waren heute nur Beispielauswertungen - man kann die Datenbank mit den Reportingfähigkeiten von Access sogar zu einem tollen Website-Statistiktool ausbauen.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010502.zip

Verwandte Artikel

Gratis Loganalyse mit Analog
http:/www.aspheute.com/artikel/20010517.htm
IIS, was machst du gerade?
http:/www.aspheute.com/artikel/20011204.htm
Lesen von Textdateien
http:/www.aspheute.com/artikel/20000530.htm
Logfiles auswerten mit Webalizer
http:/www.aspheute.com/artikel/20021030.htm

Links zu anderen Sites

MediaHouse Statistics Server
http://www.mediahouse.com/statisticsserver/
WebTrends
http://www.webtrends.com/

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.