我正在做一些工作来分析来自 Catalyst Web 应用程序的访问日志。数据来自网络场前面的负载均衡器,每天总计约 35Gb。它存储在Hadoop HDFS 文件系统中,我使用 MapReduce(通过Dumbo,这很棒)来处理数字。
分析的目的是尝试建立使用配置文件——哪些操作使用最多,每个操作的平均响应时间是多少,响应是从后端还是缓存提供的——用于容量规划、优化和设置监控系统的阈值。像 Analog 这样的传统工具会为我提供请求最多的 URL 或最常用的浏览器,但这些对我来说都没有用。我不需要知道那/controller/foo?id=1984
是最流行的 URL;我需要知道所有命中的命中率和响应时间是多少,/controller/foo
以便我可以查看是否有优化或缓存的空间,并尝试估计如果此操作的命中突然翻倍可能会发生什么。
我可以通过 MapReduce 轻松地将数据分解为每个时间段每个操作的请求。问题是以易于理解的形式显示它并挑选出重要的趋势或异常。我的输出形式为:
('2009-12-08T08:30', '/ctrl_a/action_a') (2440, 895)
('2009-12-08T08:30', '/ctrl_a/action_b') (2369, 1549)
('2009-12-08T08:30', '/ctrl_b/action_a') (2167, 0)
('2009-12-08T08:30', '/ctrl_b/action_b') (1713, 1184)
('2009-12-08T08:31', '/ctrl_a/action_a') (2317, 790)
('2009-12-08T08:31', '/ctrl_a/action_b') (2254, 1497)
('2009-12-08T08:31', '/ctrl_b/action_a') (2112, 0)
('2009-12-08T08:31', '/ctrl_b/action_b') (1644, 1089)
即,键是时间段,值是(action, hits, cache hits)
每个时间段的元组。(我不必坚持这一点;这就是我到目前为止所拥有的。)
大约有 250 个动作。它们可以组合成较少数量的组,但在同一个图表上随时间绘制每个操作的请求数量(或响应时间等)可能不起作用。首先,它太吵了,其次,绝对数字并不重要——对于经常使用的、轻量级、可缓存的响应的请求,每分钟增加 100 个请求远不如每分钟增加 100 个请求重要在一个很少使用但昂贵(可能会命中数据库)不可缓存的响应中。在同一张图表中,我们不会看到很少使用的操作的请求变化。
静态报告不太好——一个巨大的数字表很难消化。如果我按小时汇总,我们可能会错过重要的每分钟更改。
有什么建议么?你是如何处理这个问题的?我想一种方法是以某种方式突出每个操作的请求率或响应时间的重大变化。滚动平均值和标准偏差可能会显示这一点,但我可以做得更好吗?
我还能生成哪些其他指标或数据?