Obtendo dados do arquivo de log

1

Gostaria de obter o uso de memória das seguintes entradas de log. É o número logo após 200 para o URL. Eu gostaria de obter uma lista de maior uso de memória primeiro, como o top 10. Eu acho que eu usaria o grep para isso, certo?

178.0.140.206 - - [05/Nov/2010:16:46:09 -0400] "GET /image/promo/terran-88x31.jpg HTTP/1.1" 200 15227 0 -
79.66.101.95 - - [05/Nov/2010:16:46:09 -0400] "GET /strategy/article/view/?id=608 HTTP/1.1" 200 8456 0 4980736
79.66.101.95 - - [05/Nov/2010:16:46:10 -0400] "GET /lib/php/min/?f=lib/css/yui/2.7.0.css,lib/css/base.css,lib/css/ux/rating.css,lib/css/page/strategy.css,lib/css/page/article.css,lib/css/page/strategy/article.css HTTP/1.1" 200 8118 0 1835008
79.66.101.95 - - [05/Nov/2010:16:46:11 -0400] "GET /image/logo-text.png HTTP/1.1" 200 9444 0 -
79.66.101.95 - - [05/Nov/2010:16:46:11 -0400] "GET /image/s.gif HTTP/1.1" 200 43 0 -
79.66.101.95 - - [05/Nov/2010:16:46:11 -0400] "GET /image/logo.png HTTP/1.1" 200 17722 0 -
79.66.101.95 - - [05/Nov/2010:16:46:13 -0400] "GET /lib/php/min/?f=lib/js/ext/3.0-core.js,lib/js/global.js,lib/js/ext/ux/rating.js,lib/js/page/article.js HTTP/1.1" 200 32919 0 1310720
79.66.101.95 - - [05/Nov/2010:16:46:16 -0400] "GET /lib/css/resource/body-bg.png HTTP/1.1" 200 467 0 -
79.66.101.95 - - [05/Nov/2010:16:46:16 -0400] "GET /lib/css/resource/foot-bg.png HTTP/1.1" 200 119 0 -
79.66.101.95 - - [05/Nov/2010:16:46:16 -0400] "GET /lib/css/resource/search-bg-sprite.png HTTP/1.1" 200 280 0 -
190.213.177.71 - - [05/Nov/2010:16:46:16 -0400] "GET /images/banner/dark-templar_firefox.gif HTTP/1.1" 404 2827 0 1572864
    
por Webnet 07.11.2010 / 16:23

2 respostas

3

Supondo que você também queira que o URL seja acessado (é possível ajustar a instrução awk print conforme necessário para obter mais campos):

awk '{ print $10,$7 }' PATH_TO_LOG_FILE | sort -k1 -rn | head -n10

Para usá-lo apenas para um código HTTP específico (neste caso, 200):

awk '{ if($9=="200") {print $10,$7} }' PATH_TO_LOG_FILE | sort -k1 -rn | head -n10

Ou use um regex para verificar vários códigos de erro:

awk '{ if($9~"^200|403|404$") {print $10,$7} }' PATH_TO_LOG_FILE | sort -k1 -rn | head -n10

Se isso é algo que você planeja executar repetidamente, considere procurar em um CustomLog.

    
por 07.11.2010 / 16:57
1

Eu sei que esses números refletem o tamanho do conteúdo retornado. De qualquer forma, você pode obter a coluna necessária (depois de 200) usando este commnad:

grep "1.1\" 200 " logfile | awk {'print $10'} | sort -nr | head -n 10
    
por 07.11.2010 / 16:46