如何在Web服务器access.log中找到最常见的错误代码?
答案 0 :(得分:1)
您可以尝试以下操作:
cat /var/log/apache2/access_log | sed 's/\[.*\]//' | sort | uniq -c | awk '//{if($1>=5) print $0}' | sort -nr
这个想法是要精简行与行之间变化的内容,例如时间戳或IP地址,以汇总错误。在这种情况下,我仅使用sed
剥离了时间戳,假设它们被括在方括号中。因此,sed 's/\[.*\]//'
将一无所有地替换此\[.*\]
。
例如,这一行:
127.0.0.1 - - [03/Oct/2016:23:45:27 +0300] "GET /favicon.ico HTTP/1.1" 200 1406
将变为:
127.0.0.1 - - "GET /favicon.ico HTTP/1.1" 200 1406
然后,sort
和uniq -c
将汇总相邻的相同行,并在重复项的前面加上前缀。
所以看起来像这样:
22 127.0.0.1 - - "GET /favicon.ico HTTP/1.1" 200 1406
这意味着以下行(减去剥离的时间戳记)已在日志中出现22次。
然后awk '//{if($1>=5) print $0}'
将仅显示出现5次或更多次的重复行,其中5行是任意的。然后是最后的排序。
这已在OSX和Ubuntu上进行了测试。