Zählen Sie große Dateidownloads aus Apache-Protokollen in MySQL

Zählen Sie große Dateidownloads aus Apache-Protokollen in MySQL

Ich möchte die Dateidownloads für etwa 10 verschiedene Dateien zählen, die ein Client angefordert hat. Wir haben ein separates Protokollformat für die Apache-Protokolle generiert, das in eine MySQL-Datenbank geladen werden kann.

Für eine so spezifische Abfrage hatte ich gehofft, eine SQL-Anweisung zum Zählen der Downloads schreiben zu können, anstatt einen übertriebenen Protokollanalysator zu installieren.

Dies ist das für die MySQL-Protokolle verwendete Protokollformat:

LogFormat "\"%a\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Type}o\", \"%U\",\"%{Referer}i\",\"%{User-Agent}i\"" mysql

Dadurch entsteht folgende Art von CSV-Datei:

"156.107.33.66",20121017113516,200,"10094440","application/x-msdos-program",          "/flexnet/FLEXnetWinSetup.exe","http://www.example.com/downloads/flexnet","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"

Die größeren Dateien mit mehr als 100 MB werden jedoch in Blöcke aufgeteilt, sodass nicht einfach nur die Protokolle gezählt werden können.

Hat jemand etwas Ähnliches versucht?

Antwort1

Wenn mit „In Teile aufteilen“ gemeint ist, dass Clients die Dateien mit mehreren 206-HTTP-Antworten herunterladen, sollten Sie versuchen, den Inhalt des Headers „Content-Range“ zu protokollieren, der in der Antwort enthalten ist:

LogFormat "\"%a\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Range}o\",\"%{Content-Type}o\", \"%U\",\"%{Referer}i\",\"%{User-Agent}i\"" mysql

Das Ergebnis sollte ungefähr so ​​aussehen (nicht getestet)

"156.107.33.66",20121017113516,200,"10094440","bytes 0-999/3980","application/x-msdos-program",          "/flexnet/FLEXnetWinSetup.exe","http://www.example.com/downloads/flexnet","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"

verwandte Informationen