最熟悉的陌生人 - access log
简介
access log一直是我们服务端运维找问题的好帮手,但是作为一个偏应用层的开发者来说,可能会有着那么一点陌生,例如access log写入日志的时机是什么时候呢?谁能写?怎么配置等等,所以在这篇文章里面,我会试图从官方文档去找到所需要的一切的答案。
什么是access log
顾名思义,access log就是用来记录用户的请求日志。可通过nginx的配置文件来配置他的保存位置和输出的日志格式。
日志告诉了我们什么信息
1 | 176.51.166.239 - - [28/Jul/2017:15:41:30 +0800] "POST /wp-login.php HTTP/1.1" 200 2644 "http://awesomesevens.com/wp-login.php" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" |
这是一条默认的日志,具体的内容我们参照官网给的默认格式来看:
1 | log_format main '$remote_addr - $remote_user [$time_local] ' |
176.51.166.239
$remote_addr : 客户端(用户)的请求IP-
$remote_user : 已经经过Auth Basic Module验证的用户名。”-“就是没有记录到。[28/Jul/2017:15:41:30 +0800]
$time_local : 记录的时间“POST /wp-login.php HTTP/1.1”
$request : 请求的url,POST 为请求的方法,HTTP/1.1为请求的协议200
$status : 请求的状态,具体的状态代表的意义可以看我的另一篇文章 开发时候常会遇到的状态码2644
$body_bytes_sent : 传送页面的字节数http://awesomesevens.com/wp-login.php
$http_referer : 来源页面,即从哪个页面转到本页Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0
$http_user_agent : 用户的浏览器信息,终端,版本等
配置
配置也很简单,在nginx config的server配置中加入下面一句
1 | access_log /var/log/nginx/access.log main; |
中间是要放置的log的地址,后面的main对应的是上一节设定的格式。
access太大怎么办
我的建议是如果访问量大得夸张的话,最好把日志一块交给应用层去做,抽出来做一个日志系统,方便后续的分析。
如果访问量还没到夸张的层次的时候,也要考虑日志的占用空间问题。所以对每天的日志进行压缩和转存就很有必要了。网上的有人用的是写shell+crontab来做,但其实linux本来已经提供了一个很好的工具给我们去做这件事情,叫logrotate。
一般logrotate的配置文件会放置在 /etc/logrotate.d 路径下,下面是我的一个logrotate对于nginx日志的配置文件:
1 |
|
参数 功能
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).