Script rápido para cortar a seção do arquivo de log com base no timestamp

1

Estou procurando um script rápido que analise um mail.log grande e retorne a parte entre dois timestamps especificados . Eu gostaria de executá-lo em todos os meus servidores de e-mail e fazer com que copiem as partes de log relevantes para um local central para análise posterior.

Eu escrevi algo no bash que funciona, mas é lento.

Alguém sabe de qualquer coisa que já exista para conseguir isso - ou eu preciso aprender perl e inventar algo?

(Eu não estou colocando isso em SO, como eu ainda não estou no ponto em que eu quero escrever qualquer código - apenas procurando por algo que alguém já está usando)

    
por Brent 14.07.2009 / 22:15

2 respostas

6

Eu amo o awk:)

Para meus registros, que estão no formato:

Jul 14 12:49:10 xxxxxx sendmail[31337]: ...........

Eu usaria:

awk '$3 >= "12:00:00" && $3 <= "13:00:00" {print;}' < /var/log/maillog

Presumivelmente, você pode adaptar isso conforme necessário, por exemplo, se você não dividir os registros por dia.

Bônus:

Formato do Apache, que por acaso estou dando pontapés:

xxx.xxx.xxx.xxx - - [01/Jul/2009:03:06:24 -0400] "GET /favicon.ico HTTP/1.1" 200 3638
awk '$4 >= "[01/Jul/2009:03:00:00" && $4 <= "[01/Jul/2009:04:00:00" {print;}' < access_log
    
por 14.07.2009 / 22:59
0

Para um intervalo de dia específico e para imprimir > arquivo de saída

(eu não posso colocar como comentário na resposta acima, caso contrário eu farei isso)

HTH

awk '$2 >= "21" && $3 >= "09:00:00" && $2 >= "21" && $3 <= "11:00:10" {print > "m_range.log";}' < /var/log/m.log

cat m_range.log 
...
Nov 21 09:00:17 mail postfix/qmgr[1694]: 1C50D276524A: from=<[email protected]>, size=2378, nrcpt=1 (queue active)
...
    
por 22.11.2016 / 10:20