Contar solicitações do log de acesso dos últimos 7 dias

2

Gostaria de analisar um arquivo de log de acesso e devolver a quantidade de solicitações dos últimos sete dias. Eu tenho esse comando

cut -d'"' -f3 /var/log/apache/access.log | cut -d' ' -f2 | sort | uniq -c | sort -rg

Infelizmente, esse comando retorna a quantidade de solicitações desde a criação do arquivo e o classifica em categorias de código HTTP. Gostaria apenas de um número, sem categorias e apenas nos últimos 7 dias.

    
por Hedam 17.10.2013 / 22:03

4 respostas

0

Eu configuraria a rotação de logs diariamente (como isso seria dependente do seu sistema operacional), depois use o mesmo comando acima nos 7 logs mais recentes. Quanto ao seu log existente, use uma ferramenta como o grep para extrair apenas os dias desejados ou divida esse log em logs para cada dia.

Se você quiser algo mais elegante do que isso, basta procurar uma das inúmeras ferramentas de análise de log já existentes.

Veja um exemplo para dividir seu log existente: Dividir o arquivo access.log por datas usando as ferramentas de linha de comando

    
por 17.10.2013 / 22:24
0

É um utilitário da Microsoft, provavelmente não o que você procura, mas existe um utilitário chamado LogParser ( link ) que analisará os arquivos de log do Apache e permitirá que você use a sintaxe no estilo SQL para filtrar, agregar, etc.

Você vai querer especificar o parâmetro de formato de entrada como NCSA.

    
por 17.10.2013 / 22:23
0

Deveria ser possível, mas estou ficando atolado no aninhamento do comando Bash que não funciona, e não entendo o porquê.

Conceitualmente, faça isso:

  1. Encontre a data há 7 dias, no formato que está no seu log do Apache
    1. date -d "-7 days" +%d\/%b\/%Y - > 10 / out / 2013
  2. Excluir da primeira linha até a primeira menção dessa data
    1. sed '1,/~pattern~/d' access_log
  3. Alimente o resultado em wc para obter uma contagem.
    1. | wc -l

Portanto, deve haver uma maneira de combinar o acima em um comando:

$ sed '1,/10\Oct\/2013/d' access_log | wc -l
29
$ sed '1,/$(date -d "-7 days" +%d\/%b\/%Y)/d' access_log | wc -l
$

Em algum lugar no aninhamento, meu comando de data e sed não estão tocando bem. E tudo que eu tento com várias combinações de citações e fugas não faz nenhuma diferença.

O que estou perdendo?

    
por 17.10.2013 / 23:04
0

Que tal procurar ferramentas como Splunk ou Loggly? Loggly tem um teste gratuito, o Splunk Storm ( link ) está livre para se inscrever, e a menos que seus arquivos de log excedam seus limites, deve ser trivial obtenha seus registros indexados e execute várias estatísticas sobre solicitações nos últimos sete dias (ou vários outros períodos de tempo).

    
por 17.10.2013 / 23:30