用于分析 Apache 日志文件的命令行工具

mma*_*tax 20 log-files analytics apache-2.2

我有一堆想要分析的 Apache 日志文件。我正在寻找一种不需要太多设置的工具;我可以通过命令行运行日志,而无需在我们的实时 Web 服务器上乱搞。

有什么建议吗?

nic*_*ier 8

虽然上面的工具都很酷,但我想我知道提问者在问什么。我无法像处理其他文件那样从访问日志中提取信息,这常常让我感到痛苦。

这是因为愚蠢的访问日志格式:

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"
Run Code Online (Sandbox Code Playgroud)

换句话说,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"
Run Code Online (Sandbox Code Playgroud)

当然,现在几乎任何事情都是可能的。

享受!


War*_*ner 7

wtop很酷。还有其他实用程序。通常,我会使用 bash、sed 和 awk 解析日志。


小智 6

apachetop很酷;它打印实时统计数据。你运行它

apachetop -f /var/log/apache2/www.mysite.com.access.log
Run Code Online (Sandbox Code Playgroud)

要在 Debian/Ubuntu 中安装它:

apt-get install apachetop
Run Code Online (Sandbox Code Playgroud)

或来自来源:https : //github.com/JeremyJones/Apachetop


Chr*_*ava 1

你想要什么样的输出?

如果你只是想计算一些东西,那么grep some logfile.txt | wc -l效果很好。如果你想要漂亮的图表……没那么多。