Obter lista de user-agents do log nginx

5

Eu tenho o arquivo de log nginx e quero descobrir a participação de mercado para cada versão principal dos navegadores. Não estou interessado em versões secundárias e sistemas operacionais. Eu gostaria de obter algo assim:

100 IE6
 99 IE7
 20 IE8
200 FF2
300 FF3

Eu sei como obter a lista de agentes do usuário do arquivo, mas quero agregar a lista para ver apenas as principais versões dos navegadores. Existe uma ferramenta que faz isso?

    
por Željko Filipin 01.12.2009 / 13:51

6 respostas

16
awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
  • awk(1) - selecionando a string completa do User-Agent de solicitações GET
  • cut(1) - usando a primeira palavra dela
  • sort(1) - classificação
  • uniq(1) - count
  • sort(1) - ordenação por contagem, invertida

PS. É claro que pode ser substituído por um script awk / sed / perl / python / etc. Eu só queria mostrar o quão rico é o unix-way.

    
por 01.12.2009 / 20:10
6

Enquanto o um liner do SaveTheRbtz faz o trabalho, demorou várias horas para analisar meu nginx access log.

Aqui está uma versão mais rápida baseada nele, que leva menos de 1 minuto por 100MB de arquivo de log (correspondendo a cerca de 1 milhão de linhas):

sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg

Funciona com o formato de log de acesso padrão de nginx , que é igual ao formato combined do httpd do Apache e tem o User-Agent como o último campo, delimitado por " .

    
por 08.07.2012 / 18:02
2

Awstats devem resolver o problema, mas fornecerão muito mais informações. Espero que isso ajude ...

    
por 01.12.2009 / 13:57
2

Webalizer pode fazer isso.

Exemplo:

webalizer -o reports_folder -M 5 log_file
  • -o reports_folder especifica a pasta onde o relatório é gerado
  • -M 5 exibe apenas o nome do navegador e o número da versão principal
  • log_file especifica o nome do arquivo de log
  • source: ftp://ftp.mrunix.net/pub/webalizer/README
por 01.12.2009 / 15:19
2

Esta é uma pequena variação da resposta aceita, usando fgrep e cut .

cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn

Há algo interessante sobre o uso de comandos "mais fracos" quando é possível.

    
por 19.01.2014 / 03:16
0

Eu usaria o shell script para isso: cat, awk pipe, sort e uniq farão o trabalho

    
por 01.12.2009 / 17:17