nginx-logrotation-日志切割
nginx日志处理
在 nginx 中,主要有 access 日志、error 日志 、 rewrite 日志。前两种由 ngx_http_log_module
模块予以支持,rewrite
日志则由 ngx_http_rewrite_module
模块提供,这两个模块默认都已包含且启用。
日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。
我们不管在生产环境还是开发环境,看日志是必不可少的,日志中往往包含很多有用的信息,有时候被DDOS
、上传非法文件等等,我们都需要通过日志分析。
但是日志是跟访问量成正比的,你的访问量越大,你的各种级别日志就越多,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成个很严重的问题。
对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。
除此之外,处理查看一个单个的庞大日志文件也常常是件十分棘手的事。你阅读、打开都要花费很大力气,那么怎么才能处理好这种情况?
logrotate 在很多 Linux 发行版上都是默认安装的。系统会定时运行 logrotate,一般是每天一次。系统是这么实现按天执行的。
crontab 会每天定时执行 /etc/cron.daily 目录下的脚本,而这个目录下有个文件叫 logrotate。
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。
例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。
系统会利用定时任务定时运行logrotate
,一般是每天一次。crontab
会每天定时执行/etc/cron.daily
目录下的脚本,而这个目录下有个文件叫logrotate
。我们只需要配置你所需要切割的参数就可以。
很多程序的会用到logrotate
滚动日志,比如nginx
。它们安装后,会在/etc/logrotate.d
这个目录下增加自己的logrotate
的配置文件。logrotate
什么时候执行 /etc/logrotate.d
下的配置呢?看到/etc/logrotate.conf
里这行,一切就不言而喻了。
在 centos 上脚本内容是这样的:系统自带 crontab task:/etc/cron.daily/logrotate,每天运行一次。
[root@gop-sg-192-168-56-103 logrotate.d]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
可以看到这个脚本主要做的事就是以/etc/logrotate.conf
为配置文件执行了 logrotate。就是这样实现了每天执行一次 logrotate。
因为我的系统执行 /etc/cron.daily 目录下的脚本不是我想滚动日志的时间,所以我把 /etc/cron.daily/logrotate 拷了出来,改了一下 logrotate 配置文件的路径,然后在 crontab 里加上一条指定时间执行这个脚本的记录,自定义周期滚动日志就大功告成了。这种自定义的方式有两点要注意:
配置文件里一定要配置 rotate 文件数目 这个参数。如果不配置默认是 0 个,也就是只允许存在一份日志,刚切分出来的日志会马上被删除。多么痛的领悟,说多了都是泪。
执行 logrotate 命令最好加 -f 参数,不然有时候配置文件修改的内容不生效。