用中文解析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)