我的具体问题是我有一组 Apache 访问日志,我想通过将它们分组到一组指定时间的时间窗口中,从中提取“汇总”的请求计数。
我的数据示例:
127.0.0.1 - - [01/Dec/2011:00:00:11 -0500] "GET / HTTP/1.0" 304 266 "-" "Sosospider+(+http://help.soso.com/webspider.htm)"
127.0.0.1 - - [01/Dec/2011:00:00:24 -0500] "GET /feed/rss2/ HTTP/1.0" 301 447 "-" "Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=12878631678486589417)"
127.0.0.1 - - [01/Dec/2011:00:00:25 -0500] "GET /feed/ HTTP/1.0" 304 189 "-" "Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 1 subscribers; feed-id=12878631678486589417)"
127.0.0.1 - - [01/Dec/2011:00:00:30 -0500] "GET /robots.txt HTTP/1.0" 200 333 "-" "Mozilla/5.0 (compatible; ScoutJet; +http://www.scoutjet.com/)"
127.0.0.1 - - [01/Dec/2011:00:00:30 -0500] "GET / HTTP/1.0" 200 10011 "-" "Mozilla/5.0 (compatible; ScoutJet; +http://www.scoutjet.com/)"
如您所见,每一行代表一个事件——在本例中为一个 HTTP 请求——并包含一个时间戳。
假设我的数据涵盖 3 天,并且我指定 1 天的时间窗口大小,我想生成如下内容:
Start End Count
2011-12-01 05:00 2011-12-02 05:00 2822
2011-12-02 05:00 2011-12-03 05:00 2572
2011-12-03 05:00 2011-12-04 05:00 604
但是我需要能够改变窗口的大小——我可能想使用 5 分钟、10 分钟、1 小时、1 天或 1 周等窗口来分析给定的数据集。
我还需要库/工具能够分析数百甚至数千兆字节的数据集(一系列行)。
可以通过标准输入接受数据的预构建工具会很棒,但是库会完全没问题,因为我可以围绕库构建工具。任何语言都可以;如果我不知道,我可以学习它。
我更愿意通过将访问日志数据直接传送到具有最小依赖性的工具/库中来做到这一点——我不是在寻找将数据存储在数据库中然后查询数据库进行分析的建议。如果需要,我可以自己解决。
我尝试了 Splunk,发现它对我的案例来说太重和太复杂了。它不仅仅是一个工具,它是一个完整的系统,拥有自己的数据存储、复杂的索引和查询能力等。
我的问题是:这样的库和/或工具是否存在?
全面披露
我必须承认,几个月前我实际上尝试过但没有找到类似的东西,所以我自己写了。出于某种原因,我当时没想过要发布这个问题。我将很快分享我在答案中写的 lib/tool。但我真的很好奇这样的事情是否存在;也许我几个月前在搜索时错过了它。