Analisando o log de erros do nginx

1

Estou procurando um caminho para o seguinte.

Aqui está uma linha do log de erros do nginx.

2014/12/29 21:17:57 [error] 30078#0: *311826 openat() "/var/www/html/images/images/Outlet-Celine-Boston-Square-Calfskin-Bags-Red_celine_2140_1.jpg" failed (2: No such file or directory), client: 207.46.13.42, server: server.domain.tld, request: "GET /images/images/Outlet-Celine-Boston-Square-Calfskin-Bags-Red_celine_2140_1.jpg HTTP/1.1", host: "www.buylvneverfullpm.net"

Existem milhares mais, por isso preciso de uma forma de:

  1. descubra se uma linha contém 'host: "*"', onde * é a URL
  2. obtenha o valor do host: "www.xxx.yyy"
  3. tira o www no começo
  4. conta quantas vezes cada xxx.yyy ocorre
  5. classifica o número de ocorrências para cada valor de host exclusivo, do maior para o menor.

Eu tenho usado o seguinte:

awk '($20 ~ /GET/)' /var/log/nginx/error_log | awk '{print $24}' | sort | uniq -c | sort -rn

mas como não tira o "www", existem entradas repetidas.

    
por Pomegranate 30.12.2014 / 16:26

1 resposta

0

Basta ter awk para lidar com tudo para você

awk '$20 ~ /GET/{gsub(/"/, "", $24); sub(/[^.]*\./, "", $24); a[$24]++};
END{for (k in a)print k, a[k]}' /var/log/nginx/error_log
    
por 30.12.2014 / 16:41