Ich habe meine rohen IIS-Protokolldateien in eine SQL Server-Tabelle importiert Log Parser Tool für mehrere Monate. Dies wird getan, um das Schreiben von zu ermöglichen SSRS-Berichte basieren auf diesen Protokolldaten.
Einer der Berichte, an denen ich arbeite, soll die Anzahl von bestimmen Besuche von jeder eindeutigen IP-Adresse. Ein Besuch ist definiert als eine IP-Adresse, die trifft eine Seite auf der Website und dann 4 weitere Anfragen innerhalb einer Stunde von jedem andere. Alle 5 Anfragen sind innerhalb eines Besuchs auf der Website. Später dann Nacht trifft die gleiche IP-Adresse auf die Seite, nur dass es jetzt 3 Stunden später ist Wir zählen diese neue Aktivität von der gleichen IP als einen neuen Besuch. Hier ist ein Beispiel von die Daten:
%Vor% Wenn ich mir die obigen Daten anschaue, kann ich leicht erkennen, dass die 10.1.1.100
IP
Adresse hat die Seite zweimal besucht und hatte 5 Treffer bei jedem Besuch. Aber ich bin es
mit einem Verlust, wie man das im SQL-Code ausdrückt. Gibt es eine einfache Möglichkeit zum Gruppieren?
und zähle diese Datumsbereiche nach IP-Adresse?
Ich verstehe, dass diese Informationen mithilfe von Tools wie z AWStats, aber ich habe nicht den Luxus, Perl auf dem installieren zu können Systeme, die wir verwenden.
Geben Sie den Code unten einen Testlauf. Der Code gruppiert und nummeriert die Besuche von jeder IP-Adresse. Dann sieht es aus, wie viele "uristem" Treffer mit dem "Schwellenwert" verglichen werden. Ich habe den Code in einer Tabelle mit dem Namen "Foo" getestet und Sie müssen Ihre Tabellen- und Spaltennamen überprüfen, bevor Sie den Test ausführen.
%Vor%Die Ausgabe meines Tests auf SQL 2008 ist
%Vor%Ich denke, der beste Weg, dies zu tun, besteht darin, zuerst Ihre Daten zusammenzufassen und dann Ihren Bericht zu erstellen.
So würde ich es machen.
Erstellen Sie eine SummaryTable mit den gewünschten FACTS (z. B. UserIP, SessionStart, SessionEnd, PageViews)
Finde heraus, was du als neuen Besuch betrachtest (zB denke ich, dass das IIS Standard-Session-Timeout 20 Minuten ist, also alle aufeinander folgenden Treffer von einer IP nach 20 Minuten. Ich werde einen neuen Besuch in Erwägung ziehen.)
Erstellen Sie einen Cursor, um die zusammengefassten Daten basierend auf Ihrer Regel zu berechnen.
%Vor% ENDE CLOSE StatCursor DEALLOCATE StatCursorErstellen Sie eine Abfrage, um die benötigten Daten zu erhalten, Beispiel (All Time Hits by IP).
SELECT UserIP, COUNT (UserIP) VON StatSummary GROUP BY UserIP
Tags und Links sql sql-server iis tsql