
Я хочу посчитать загрузки файлов для примерно 10 разных файлов, которые запросил клиент. Мы сгенерировали отдельный формат журнала для журналов Apache, который можно загрузить в базу данных MySQL.
Для такого специфического запроса я надеялся написать SQL-оператор для подсчета загрузок, а не устанавливать чрезмерно громоздкий анализатор журналов.
Это формат журнала, используемый для журналов MySQL:
LogFormat "\"%a\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Type}o\", \"%U\",\"%{Referer}i\",\"%{User-Agent}i\"" mysql
В результате получается такой CSV-файл:
"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"
Но файлы размером более 100 МБ разбиваются на части, поэтому это не простой подсчет журналов.
Кто-нибудь пробовал что-то подобное?
решение1
Если под разделением на фрагменты вы подразумеваете, что клиенты загружают файлы с несколькими HTTP-ответами 206, то вам следует попробовать зарегистрировать содержимое заголовка Content-Range, включенного в ответ:
LogFormat "\"%a\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Range}o\",\"%{Content-Type}o\", \"%U\",\"%{Referer}i\",\"%{User-Agent}i\"" mysql
Это должно произвести что-то вроде этого (не проверено)
"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"