我想在Apache错误日志中获取唯一条目的计数


1

查看Apache的日志文件时,会重复出现许多错误消息。我想找出哪些错误消息是最常见的,哪些是唯一的。

我想要一个简单的脚本,可以为我提供许多不同的独特行。

我知道Perl / Python / etc,但是我更喜欢使用内置工具,例如cut/ find/ grep/ sed等。

我可以使用获得一个简单的条目列表sed。下面显示了唯一的错误消息列表:

$ sed -e "s/\[.*\]\([^:]*\)\(.*\)/\1/" error.sml.log | sort -u
Apache configured -- resuming normal operations
client denied by server configuration
Digest
File does not exist
request failed

这可以计算出现的次数。它只是没有用,因为它没有显示计数与什么相关:

$ sed -e "s/\[.*\]\([^:]*\)\(.*\)/\1/" error.sml.log | sort -u | xargs -I{} grep -oc {} error.sml.log
1
3886
2
6091
20

我希望输出看起来像这样:

1    Apache configured -- resuming normal operations
3886 client denied by server configuration
2    Digest
6091 File does not exist
20   request failed

Answers:


2
sed -e“ s / \ [。* \] \([^:] * \)\(。* \)/ \ 1 /” error.sml.log | 排序| uniq -c
      已配置1个Apache-恢复正常运行
   3886客户端被服务器配置拒绝
      2文摘
   6091文件不存在
     20个请求失败

有一个工具可以完全做到这一点。我希望几个小时前就发现了。

有几个有用的选项,例如uniq -d仅显示多于1个条目的行

$ sed -e“ s / \ [。* \] \([^:] * \)\(。* \)/ \ 1 /” error.sml.log | 排序| uniq -cd
   3886客户端被服务器配置拒绝
      2文摘
   6091文件不存在
     20个请求失败

uniq -u仅显示uniq行仅1个条目

$ sed -e“ s / \ [。* \] \([^:] * \)\(。* \)/ \ 1 /” error.sml.log | 排序| uniq -u  
  已配置Apache-恢复正常运行

现在,我可以处理数十亿行的日志文件,并对它们旁边发生的事情有所了解。


1
如果我去过,我会告诉你的。它出现了很多,应该在一些搜索中找到(这是我了解的方式,我想知道conky向我的.xsession-errors文件中抛出错误的次数是182,000次!)
Rob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.