Obtenha algum significado dos logs do apache com awk e grep [duplicate]

1

Eu estou tentando ter algum significado dos meus arquivos de log do Apache: Eu quero analisar meu log de acesso e ter algumas estatísticas sobre 200 status code hits (quantas vezes cada um deles foi atingido).

Então eu tentei aprender alguma magia awk e aqui o que eu tenho agora:

grep "HTTP/1.1\" 200" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n

Isso está fazendo a maioria das coisas que eu quero: ele seleciona todas as entradas de logs que acabaram com 200 hit de access.log, em seguida, selecionando uma parte que corresponde ao caminho que atingiu gerado, classificá-los, contar cada elemento único e classificar com base no número de vezes que esse elemento único foi atingido.

O resultado é assim:

  1 /public/img/upload/image_3.jpg
  2 /public/img/upload/image_2.jpg
  8 /public/img/upload/image_1.jpg
 18 /public/js/main.js
 33 /
236 /index.html

Estou tentando avançar um pouco mais:

  • porque eu tenho logrotate, eu tenho muitos outros arquivos como access.log.1, ..., access.log.N e eu quero obter esta estatística para todos eles juntos. A única solução que encontrei é usar grep "my 200 expression" -R /pathToDirWithLogs , que irá passar por cima de todos os arquivos no diretório, o que claramente não é legal, porque ele não só grapará os logs. Listar os arquivos também não é uma opção, porque eu não sei o número N.
  • Eu não me importo com cada arquivo individual em / public / img / upload /, apenas importo quantos deles foram atingidos. Aqui estou totalmente perdido, sem ter ideia de como começar. Mas aqui está um exemplo que eu quero para minha saída simples %código%

Aqui public / img / upload representa todos os hits que foram gerados: 8 de image_1, + 2 de image_2 e 1 de image_3.

Há algum awk, grep magicians para me mostrar o caminho?

    
por Salvador Dali 25.03.2014 / 23:13

1 resposta

2

O comando grep (como muitos utilitários) aceitará vários arquivos fornecidos pelo shell globbing então

grep -h "HTTP/1.1\" 200" /path/to/log/dir/access.log*

(ou similar) deve fazer o que quiser a esse respeito.

A segunda parte da sua pergunta não está clara - como saberemos que você não está interessado em arquivos individuais em /public/img/upload , mas está interessado nos arquivos individuais em /public/js e / , mas aparentemente não em% código%.

Esclarecer que o requisito provavelmente levará a uma solução, mas você deve gastar algum tempo para decidir o que quer e, em seguida, tentar.

Você também pode estar interessado em awstats .

    
por 25.03.2014 / 23:34