Logfiles mit Access auswerten
Geschrieben von: Christoph Wille 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ßbemerkungEs waren heute nur Beispielauswertungen - man kann die Datenbank mit den Reportingfähigkeiten von Access sogar zu einem tollen Website-Statistiktool ausbauen. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Gratis Loganalyse mit Analog Links zu anderen Sites
MediaHouse Statistics Server 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.
©2000-2006 AspHeute.com |