terça-feira, 2 de julho de 2013

Garimpanho logs com expressões regulares

Depois de analisar os logs do Apache, precisei investigar logs do JBoss. Como são logs de aplicações, as linhas não têm formato uniformizado. Logo, é preciso aplicar expressões regulares.

Com a ajuda do Perl, posso extrair o texto de interesse e depois ordenar com sort e uniq.

Por exemplo, o seguinte comando extrai endereços IPs do arquivo server.log:

perl -ne 'print "$1\n" if /((\d+.){3}\.\d+)/' server.log

Então, para ordenar os IPs por frequência, entram sort e uniq:

perl -ne 'print "$1\n" if /((\d+.){3}\.\d+)/' server.log \
  | sort | uniq -c | sort -nr | more

Se a busca não requer mais que uma expressão regular, pode-se usar a opção -o do grep, que indica que deve ser impressa apenas a parte da linha identificada pela expressão regular.

grep -Po "(\d+.){3}\.\d+" server.log

A opção -P indica que a expressão regular é da sintaxe do Perl

Um comentário:

Claudio disse...

Aproveitando: se vc tem essa task como algo recorrente, considere com carinho configurar um Splunk para agregar e filtrar esses logs diversos.

E tb, para manter um olho na performance e health status dos servers, New Relic (mesmo no free tier e' muito util, so' que o data retention e' limitado sem pagar)

[]s
~heckler