当我查看服务器上的日志时,我希望能够在深入挖掘之前快速了解我遇到的问题类型。我通常使用下面的单行程序,通过使每行更通用并仅保留唯一的行来减少我需要检查的日志行数。
单行
cat /var/log/apache2/error.log | sed 's/.*] \(.*\)/\1/' | sed 's/[0-9]*//g' | sort | uniq
解释
| sed 's/.*] \(.*\)/\1/'
:删除最后一个括号组内和之前包含的所有内容,这些内容通常对应于客户端/系统特定信息,例如[Mon Dec 05 12:01:03 2011] [error] [client a.b.c.d]
| sed 's/[0-9]*//g'
:删除数字
| sort | uniq
:只保留不同的行。
为了给您一个想法,在包含大约500行的/var/log/apache2/error.log
上,这会过滤掉25行。当然,日志条目越通用/类似,单行有效就越多。
我现在正在寻找的是一个脚本(可能是bash
,perl
,python
或其他任何其他内容),可以做同样的事情,但更高级一些为了更有效(例如混淆文件路径,按字母顺序排列的ID ...)和有用(计算每条消息的出现次数,%与日志的总量相比......)。
你知道这样做的脚本吗?