Assumindo o formato normal access_log, isso deve ser feito:
cat access_log | awk '{ if($9 == 404) { print $7 } }' | sort | uniq -c | sort -nr | head -10
Estou procurando um comando para listar as 10 ou 20 principais URLs de erro 404 do meu apache access_log. Alguém pode me ajudar com isso?
obrigado
Assumindo o formato normal access_log, isso deve ser feito:
cat access_log | awk '{ if($9 == 404) { print $7 } }' | sort | uniq -c | sort -nr | head -10
Eu fiz isso usando utilitários padrão unix, awk, sort, etc, e funciona razoavelmente bem. Como o formato dos seus logs pode ser diferente, talvez seja necessário alterar algumas coisas para funcionar em seu ambiente, mas o comando básico seria:
cat access_log | awk '/" 404 / {print $7}' | sort | uniq -c | sort -n | tail -n10
Se você não está familiarizado com o awk, o que estamos fazendo é:
for each line
if it contains the string '" 404', then
print the 7th field (where fields are space delimited)
Se você estiver usando um formato de log personalizado do apache, será necessário alterar o $7
para corresponder ao campo do URL na solicitação GET. Você também pode alterar o número de linhas do comando tail para exibir mais resultados, ou rewer.