Contar downloads de arquivos grandes dos logs do Apache no MySQL

Contar downloads de arquivos grandes dos logs do Apache no MySQL

Quero contar os downloads de cerca de 10 arquivos diferentes solicitados por um cliente. Geramos um formato de log separado para os logs do Apache que podem ser carregados em um banco de dados MySQL.

Para uma consulta tão específica, eu esperava poder escrever uma instrução SQL para contar os downloads, em vez de instalar um analisador de log sobrecarregado.

Este é o formato de log usado para os logs do MySQL:

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

Isso produz este tipo de arquivo 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"

Mas os arquivos maiores de 100 MB ou mais são divididos em pedaços, portanto não é uma simples contagem dos logs.

Alguém já tentou algo semelhante?

Responder1

Se por divisão em pedaços você significa que os clientes estão baixando os arquivos com múltiplas respostas HTTP 206, então você deve tentar registrar o conteúdo do cabeçalho Content-Range incluído na resposta:

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

Isso deve produzir algo assim (não testado)

"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"

informação relacionada