在过去7天内对来自访问日志的请求进行计数

我想分析一个访问日志文件,并返回了过去7天的请求数量。 我有这个命令

cut -d'"' -f3 /var/log/apache/access.log | cut -d' ' -f2 | sort | uniq -c | sort -rg

不幸的是,这个命令返回自创build文件以来的请求数量,并将其分类为HTTP代码类别。 我只想要一个号码,没有类别,只有最后7天。

我会设置每天的日志轮换(如何做到这一点将取决于您的操作系统),然后使用上面的7个最新的日志相同的命令。 至于你现有的日志,可以使用像grep这样的工具来提取你想要的日子,或者把日志分成每天的日志。

如果你想要比这更优雅的东西,我只是寻找已经在那里的无数日志parsing工具之一。

以下是分割现有日志的示例: 使用命令行工具按date分割access.log文件

这是一个Microsoft实用程序,所以可能不是你所追求的,但有一个名为LogParser( 链接 )的实用程序,它将分析Apache日志文件,并让您使用SQL风格的语法来过滤,聚合等。

您需要将input格式参数指定为NCSA。

这应该是可能的,但我越来越陷入Bash命令嵌套,不起作用,我不明白为什么。

从概念上讲,这样做:

  1. 在7天前查找date,格式在您的Apache日志中
    1. date -d "-7 days" +%d\/%b\/%Y – > 10 / Oct / 2013
  2. 从第一行删除,直到该date的第一次提到
    1. sed '1,/~pattern~/d' access_log
  3. 将结果input到wc中以获得计数。
    1. | wc -l

所以应该有一种方法将上述内容合并为一个命令:

 $ sed '1,/10\Oct\/2013/d' access_log | wc -l 29 $ sed '1,/$(date -d "-7 days" +%d\/%b\/%Y)/d' access_log | wc -l $ 

在嵌套的某处,我的date命令和sed不能很好地播放。 而且,我用各种引用和转义组合尝试的所有内容都没有任何区别。

我错过了什么?

如何看待像Splunk或Loggly这样的工具? Loggly拥有免费试用版,Splunk Storm( http://splunkstorm.com )可以自由注册,除非您的日志文件超出限制,否则将日志编入索引并在请求中运行各种统计数据应该是微不足道的过去7天(或其他各种时间范围)。