Como extrair entradas de log da última hora?

0

Estou procurando um comando de uma linha para extrair as entradas de log que ocorreram na última hora de um arquivo de log de mensagens do Postfix.

Baseado em esta pergunta , tentei manipular o comando sugerido, mas ele está muito atrasado. Eu estou olhando para encurtar / melhorar isso. O comando no qual estou trabalhando atualmente é:

awk -vDate1='date -d'now-1 hour' +%H:%M:%S' -vDate2='date -d'now-1 hour' +%d' '{ if ($3 > Date1 && $2 >= Date2) print $0}' /var/log/maillog

O formato de log do log de mensagens é o seguinte:

Jan 18 05:55:44 smtp-out-01 postfix/smtpd[8748]: connect from server.com[1.2.3.4]
Jan 18 05:55:44 smtp-out-01 postfix/smtpd[8748]: 70CF214B4: client=server.com[1.2.3.4]
Jan 18 05:55:44 smtp-out-01 postfix/cleanup[8751]: 70CF214B4: message-id=<[email protected]>
Jan 18 05:55:44 smtp-out-01 postfix/qmgr[28134]: 70CF214B4: from=<[email protected]>, size=1806, nrcpt=1 (queue active)

Qual é a maneira mais rápida e eficiente de extrair apenas as entradas da última hora?

    
por Chris 18.01.2018 / 12:07

3 respostas

3
journalctl -u postfix -S "$(date -d "-1 hour" +%Y"-"%m"-"%d" "%T)

Use -u para especificar o nome do serviço e, em seguida, use -S para especificar uma data "since" que é gerada a partir do comando date

    
por 19.01.2018 / 10:39
0

awk -v ldate="$( date +'%d %H-%M-%S' -d'1 hour ago' )" '$2 " " $3 >= ldate' faz o que você quer, eu acho, mas, como RomanPerekhrest diz, não funciona na primeira hora do mês.

de qualquer forma, isso define uma variável date para o dia, depois para a hora e, em seguida, compara o intervalo de campos 2 - 3 para saber se eles são superiores / posteriores a ele. Eles podem ser concatenados apenas adicionando o espaçamento necessário, portanto, apenas uma única cadeia de data é necessária.

pode valer a pena alterar as datas para um formato melhor e configurar seu registrador para gravar um formato mais conveniente, com anos também.

    
por 18.01.2018 / 12:38
-1
 i='date -d "1 hour ago"| awk '{print $2}''; j='date -d "1 hour ago"| awk '{print $3}'';k='date -d "1 hour ago"| awk '{print $4}''; awk -v i="$i" -v j="$j" -v k="$k" '$1 == i && $2 == j && $3 > k {print $0}'  /var/log/maillog

Na variável i == > lojas Mês Na variável j == > Armazena a data

Na variável k == > Armazena a duração do tempo no formato Hora: Minuto: Segundo

Meu script verificará o mês atual, a data e a verificação do log que existe entre as últimas 1 hora até o momento.

Deixe-me saber por qualquer confusão

    
por 18.01.2018 / 15:43

Tags