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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Logfiles mit Access auswerten

Geschrieben von: Christoph Wille
Kategorie: Server

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.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Gratis Loganalyse mit Analog
IIS, was machst du gerade?
Lesen von Textdateien
Logfiles auswerten mit Webalizer

Links zu anderen Sites

MediaHouse Statistics Server
WebTrends

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.