
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"