我有一堆 Apache 日志文件需要分析。我正在寻找一种不需要太多设置的工具;我可以通过命令行运行日志,而无需在我们的实时 Web 服务器上乱搞。
有什么建议吗?
答案1
虽然上面的工具都很酷,但我想我知道提问者在问什么。我无法像处理其他文件那样从访问日志中提取信息,这常常让我很痛苦。
这是因为访问日志格式很愚蠢:
127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
为什么他们用 [] 表示日期,用 "" 表示其他内容?他们认为我们不知道字段 4 中有日期吗?这真是令人沮丧。
目前最好的工具是 gawk:
gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'
根据以上数据,您将得到:
"GET /manual/elisp/index.html HTTP/1.1"
换句话说,FPAT 让您能够提取 apache-log 的字段,就好像它们是实际字段而不是空格分隔的实体一样。这一直是我想要的。然后我可以使用管道对其进行进一步解析。
使 FSPAT 发挥作用的定义如下:http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
因此,您可以设置一个别名来创建可以解析 apache 日志的 gawk:
alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' " apacheawk '$6 ~ /200/ { print $5 } | sort | uniq
为我做了这个:
"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"
当然现在几乎任何事情都已成为可能。
享受!
答案2
頁面很酷。还有其他实用程序。我经常使用 bash、sed 和 awk 来解析日志。
答案3
阿帕奇很酷;它打印实时统计数据。你可以用
apachetop -f /var/log/apache2/www.mysite.com.access.log
要在 Debian/Ubuntu 中安装它:
apt-get install apachetop
答案4
我建议你尝试使用 Apache Logs Viewer,而不是使用命令行工具。这是一款免费工具,可以监控和分析 Apache 日志文件。它可以动态生成一些非常酷的图表和报告。