如何在web服务器access.log中找到最常见的错误代码?
您可以尝试以下操作:
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次以上的重复行,其中5次是任意的。然后是最后的排序。
这在OSX和Ubuntu上进行了测试。