用中文解析Apache日志

确认和设置组合Log形式。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

apache官方文档
https://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html

提取出发生错误的访问

移动到log文件。

$ cd /var/log/httpd/logs

提取404错误

$ grep "HTTP/1.1\" 404" access_log

确认输出数量的时候

$ grep "HTTP/1.1\" 404" access_log | wc -l

計算不符合搜索條件的項目數量。

$ grep "HTTP/1.1\" 404" access_log | grep -c -v "favicon.ico"

集中计数

统计每小时的请求数

$ grep -o '[0-9]\{2\}/.../2015:[0-9]\{2\}' access_log | uniq -c

grep选项[o]提取匹配部分。
也就是提取包含某个关键词的“部分匹配”,而不是“行”。
uniq 从已排序的文件中删除重复的行。

尝试使用ProcessSubstitution。

ProcessSubstitution是什么

简单来说,可以将命令执行的结果作为文件进行处理。

不使用ProcessSubstitution的示例。

$ sort file1 > file1.sorted
$ sort file2 > file2.sorted
$ diff file1.sorted file2.sorted

使用ProcessSubstitution可以

$ diff <(sort file1) <(sort file2)

就像上述的那样,使用“<(命令)”语法,可以将命令的执行结果作为文件传递给其他命令。

使用案例

使用ProcessSubstitution时,可以获得两个客户端请求之间的差异。

$ diff -u <(grep "00.00.0.0" access_log | grep -o "\(GET\|POST\) [^ ]*" | sort | uniq) <(grep "127.0.0.1" access_log | grep -o "\(GET\|POST\) [^ ]*" | sort | uniq)
广告
将在 10 秒后关闭
bannerAds