Obtenha o log dos últimos 10 minutos do log de acesso do nginx

2

Eu quero filtrar o log escrito nos últimos 10 minutos no arquivo access.log do Nginx no Ubuntu 16.04. Tentei usar a linha abaixo, mas apenas o log desse minuto é filtrado.

awk -v d1="$(date --date="-10 min" "+%d/%b/%Y:%H:%M")" -v d2="$(date "+%d/%b/%Y:%H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' /usr/local/nginx/logs/access.log

Este é o formato de data dos logs que são gravados:
12/Apr/2018:12:49:03
Qualquer ajuda seria muito apreciada.

    
por TrickyExplorer 12.04.2018 / 15:02

1 resposta

0

O problema é que os logs do nginx não possuem a data no início do arquivo: pensando nisso você chega a isso (o meu foi o 5º elemento na linha, note o $4 )

sudo awk -v d1="$(date --date '-10 min' '+%d/%b/%Y:%T')" '$4 > d1' /var/log/nginx/access.log

então, novamente, o problema é ter o colchete não relacionado no começo:

Remover o colchete dá a você algo em funcionamento:

sudo awk -v d1="$(date --date '-10 min' '+%d/%b/%Y:%T')" '{gsub(/^[\[\t]+/, "", $4);}; $4 > d1' /var/log/nginx/access.log

Eu simplifiquei um pouco o exemplo para demonstrar o problema, mas você sempre pode adicionar novamente as verificações de limites superiores, se desejar.

    
por 07.07.2018 / 13:24