
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"