- Apache日志格式说明
- 通用日志格式
LogFormat “%h %l %u %t \”%r\” %>s %b” common
日志示例如下:
192.168.80.107 – – [15/May/2016:18:22:10 +0800] “GET / HTTP/1.1” 200 26
这行内容由7项构成,上面的例子中有两项空白,但整行内容仍旧分成了7项
第一项信息是远程主机的IP地址
第二项是空白:用一个“-”占位符替代,用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的email地址或者其他唯一标识符由于有人用它来收集邮件地址和发送垃圾邮件,所以它未能保留多久。
第三项也是空白:这个位置用于记录浏览者进行身份验证时提供的名字
第四项是请求的时间,“+0800”表示服务器所处时区位于UTC之后的8小时
第五项信息典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”
第六项信息是状态代码。
第七项表示发送给客户端的总字节数。
- 组合日志格式(常用)
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” combined
- combinedio日志
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” %I %O” combinedio
- 使用方法
CustomLog “logs/access_log” common
- 安装cronolog日志轮询工具
cd /root/tool/
wget http://down1.chinaunix.net/distfiles/cronolog-1.6.2.tar.gz
tar zxvf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make
make install
ll /usr/local/sbin/cronolog
- cronolog日志轮询配置说明
- 修改访问日志的格式
默认如下
CustomLog “logs/blog-access_log” common
- cronolog语法:/path/to/cronolog [OPTIONS] logfile-spec
- 生产场景常见用法
- 错误写法
CustomLog “|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log” combined
提示:cronolog轮询日志的正确写法,被轮询的日志路径要写全路径
- 按天轮询(生产场景常见用法,推荐)
CustomLog “|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log” combined
提示:大多数网站的常规配置,日志不会覆盖
- 按小时轮询(生产场景常见用法)
CustomLog “|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d%H.log” combined
提示:如果要及时详细的分析Apache日志,此配置可能比较适用
- 按周轮询(生产场景常见用法)
CustomLog “|/usr/local/sbin/cronolog /app/logs/access_www_%w.log” combined
提示:按周循环覆盖:推荐
- 分目录按周记录日志
CustomLog “|/usr/local/sbin/cronolog /app/logs/%w/access_www.log” combined
提示:按周循环覆盖,只需保留少量日志,供SA使用,不做特殊行为分析等
- 同时按天、按小时轮询(记录两份日志)
CustomLog “|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d.log” combined
CustomLog “|/usr/local/sbin/cronolog /app/logs/access_www_%Y%m%d%H.log” combined
- 按周建立目录,按小时轮询
CustomLog “|/usr/local/sbin/cronolog /app/logs/%w/access_www_%Y%m%d%H.log” combined
CustomLog “|/usr/local/sbin/cronolog /app/logs/%w/access_www%H.log” combined
- 注意事项:
以上轮询也可以轮询错误日志
- rotatelogs日志轮询
这是Apache自带的日志轮询工具,此处不推荐使用(有可能丢日志)
- 语法:
rotatelogs [ -l ] logfile [ rotationtime [ offset ]] | [ filesizeM ]
选项
-l 使用本地时间代替GMT时间作为时间基准。注意:在一个改变GMT偏移量(比如夏令时)的环境中使用-l会导致不可预料的结果。
logfile 它加上基准名就是日志文件名。如果logfile中包含”%”,则它会被视为用于strftime()的格式字符串;否则它会被自动加上以秒为单位的”.nnnnnnnnnn”后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime 日志文件滚动的以秒为单位的间隔时间。
offset 相对于UTC的时差的分钟数。如果省略,则假定为”0″并使用UTC时间。比如,要指定UTC时差为”-5小时”的地区的当地时间,则此参数应为”-300″。
filesizeM 指定以filesizeM文件大小滚动,而不是按照时间或时差滚动。
- 范例:按天轮询
CustomLog “|bin/rotatelogs -l logs/localhost/access_%Y%m%d.log 86400” combined
ErrorLog “|bin/rotatelogs -l logs/localhost/error_%Y%m%d.log 86400”
- 使用定时任务切割
cd /application/apache/logs/
mv www-access_log www-access_log_$(date +F).log
/application/apache/bin/apachectl graceful
- Apache不记录图片日志
因为统计日志PV时一个页面才算一个PV,而图片,css、js等只是图片的元素,如果记录在日志中,按日志行计算PV就不准确了,所以可考虑不记录图片等的日志。
在虚拟主机配置模块中添加如下配置,并修改CustomLog
方法一:排除法
<FilesMatch “\.(bmp|gif|jpg|swf)”>
SetEnv IMAG 1
</FilesMatch>
CustomLog /var/wwwlogs/b.test.com.log combined env=!IMAG
方法二:只记录html,htm,php等文件
SetEnvIfNoCase Request_URI “(\.htm|\/|\.html|\.php)$” htm
CustomLog logs/9enjoy.com-access_log combined env=htm
- RS服务器不记录负载均衡器健康检查的日志
SetEnvIfRequest_URI “^/checkstatus.html” dontlog
ErrorLog”logs/error_log”
LogLevel warn
CustomLog”logs/access_log” combined env=!dontlog
- 日志统计
两种方法
awk ‘{++S[$1]} END {for (key in S) print S[key],key}’ www-error_log |sort -rn -k1|head
awk ‘{print $1}’ www-access_log|sort|uniq -c|sort -rn -k1|head