Ferramentas de linha de comando para analisar arquivos de log do Apache [fechado]

16

Eu tenho vários arquivos de log do Apache que gostaria de analisar. Estou procurando uma ferramenta que não exija muita configuração; algo que eu possa executar um log pela linha de comando, sem mexer nos nossos servidores da web ao vivo.

Alguma recomendação?

mmattax
fonte
E o sistema operacional que você vai estar usando é ...
Izzy
Linux ou MacOSX ...
mmattax
11
"Analisar" não diz muito. O que você está tentando fazer? Procure uma corda, números de trituração?
David
goaccess.prosoftcorp.com gratuito e incrível, encontrou-o aqui: webmasters.stackexchange.com/questions/4852/…
jitbit

Respostas:

7

Enquanto as ferramentas acima são legais, acho que sei o que o interlocutor estava perguntando. Dói-me muitas vezes não conseguir extrair as informações de um log de acesso da mesma maneira que faço com outros arquivos.

É por causa do formato de log de acesso burro:

127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"

Por que eles usaram [] para a data e "" para outras coisas? eles pensaram que não saberíamos que havia uma data no campo 4? É incrivelmente frustrante.

A melhor ferramenta agora para isso é o gawk:

gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'

nos dados acima, isso forneceria a você:

"GET /manual/elisp/index.html HTTP/1.1"

Em outras palavras, o FPAT oferece a capacidade de extrair os campos do apache-log como se fossem campos reais, em vez de apenas entidades separadas por espaço. É sempre isso que eu quero. Posso então analisar isso um pouco mais com um pipeline.

O funcionamento do FSPAT é definido aqui: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

Portanto, você pode configurar um alias para criar um gawk que possa analisar os logs do apache:

alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' " apacheawk '$6 ~ /200/ { print $5 } | sort | uniq

fez isso para mim:

"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"

e, claro, quase tudo o mais é agora possível.

Desfrutar!

nic ferrier
fonte
11
2 observações: a data não está realmente no campo 4, mas nos campos 4 + 5 ^^ (sem a mudança de GMT, a data tem pouco valor). E um access_log na maioria das vezes forma 12 campos (na verdade, pode haver mais de 12 campos, pois o 12º é o agente http, que também pode conter muitos espaços em seu nome. Os 11 primeiros campos são fáceis de analisar, e o 12º campo (e talvez mais) restante deve ser o agente http). Então você pode apenas: awk '($9 == 200) {print $6,$7,$8}'exibir a mesma coisa que no seu exemplo. Não há necessidade de usar FPAT lá (mesmo que este método pode ser útil em outros casos)
Olivier Dulac
Eu acho que você está criticando demais. A data está no campo 4 se você considerar o campo delimitado por []. Na maioria das vezes, um arquivo de log está em um fuso horário, portanto, o fuso horário não é necessário. O objetivo de mostrar o exemplo não era mostrar que algo era exclusivamente possível dessa maneira, mas mostrar o truque geral.
Ferrier nic
11
Estou muito surpreso ... Eu não "critiquei", apenas apontei 2 comentários (e disse que, de fato, o método que você usou pode ser útil em outros casos, mas aqui simplesmente não é necessário) ...
Olivier Dulac
6

wtop é legal. Existem outros utilitários também. Frequentemente, analisarei logs usando bash, sed e awk.

Warner
fonte
WTOP, e especialmente o seu analisador de log logrep são grandes, uma vez que você se adaptar a .conf ao seu formato de registro que irá fornecer uma maneira rápida de obter o que você precisa (url topo, tráfego, etc ..)
aseques
6

o apachetop é bem legal; imprime estatísticas ao vivo. Você o executa com

apachetop -f /var/log/apache2/www.mysite.com.access.log

Para instalá-lo no Debian / Ubuntu:

apt-get install apachetop

ou da fonte: https://github.com/JeremyJones/Apachetop

Oriettaxx
fonte
1

Que tipo de saída você deseja?

Se você está apenas procurando contar coisas, então grep algo logfile.txt | wc -l funciona muito bem. Se você quer gráficos bonitos ... nem tanto.

Chris Nava
fonte
Para janelas, o comando find imita o grep até certo ponto.
Chris Nava
0

Se você possui uma estação de trabalho Windows que pode ser usada, o logparser é a ferramenta preferida!

Tony Roth
fonte
0

O analógico funciona bem e não requer muita configuração. O logwrangler é um pacote que trabalha com analógico para gerar uma saída melhor e também requer pouca configuração.

BillThor
fonte
0

Em vez de usar uma ferramenta de linha de comando, sugeriria experimentar o Apache Logs Viewer. É uma ferramenta gratuita que pode monitorar e analisar o arquivo de log Apache. Ele pode gerar gráficos e relatórios bastante interessantes rapidamente.

Mais informações em http://www.apacheviewer.com


fonte