我已经 grep 了我网站特定时间段的 Apache 日志。我需要一个软件来分析它以查看访问量最大的 IP 有哪些。
我的操作系统是 Ubuntu。
你能提出一些建议吗?
谢谢。
答案1
目前有许多日志文件分析器包,其中两个是Webalizer(用 C 语言编写)和统计(用 Perl 编写)。两者都应该可以通过 Ubuntu 存储库获得。它们将解析您的日志文件并生成报告供您查看(通常通过 Web 浏览器,但它们也可以生成文本报告)。
传统上,它们设置为自动运行(例如通过 cron),并且可以通过访问您域下的特定路径获取最新报告,和/或通过电子邮件发送给您。(正如您所预料的,两者都需要进行一些设置才能生成您想要的内容)。
如果您只想获取哪些 IP 地址发出了最多请求的列表,那么一次性 bash 命令可能比设置上述任何一项都更容易。尝试:
awk '{!a[$1]++}END{for(i in a) if ( a[i] >10 ) print a[i],i }' access.log | sort -n -r
本质上,使用 IP 地址作为索引创建一个数组,每次匹配时增加计数器 - 并显示匹配次数超过 10 次的结果。将结果通过管道sort
按降序显示。
如果您已经习惯grep
过滤列表,则可以通过上面的命令(略有变化)将该命令的输出传输出去。
例如,对于今天午夜到凌晨 4 点(不包括)之间发出超过 10 次请求的 IP 地址列表(假设数据在 access.log 中):
grep '02/Apr/2012:0[0-3]' access.log | awk '{!a[$1]++}END{for(i in a) if ( a[i] >10 ) print a[i],i }' | sort -n -r
示例输出:
40 66.xxx.xx.xx
35 184.xx.xxx.xx
26 147.xx.xxx.xx
18 74.xxx.xx.xxx
17 209.xx.xxx.xxx
15 14.xxx.xxx.xx
答案2
如果你有兴趣,ManageEngine 有一个名为 EventLog Analyzer 的解决方案。它将分析 Apache Web 服务器日志并生成详尽的报告。你可以尝试一下。