nginx日志分割,主要是为了针对每天的日志,在进行处理时可以找到事故出现当天的日志,根据日志的状态进行修复问题。如果访问量比较大的环境中,长时间不进行分割日志,数据太大文件会出现打不开的问题。所以,因为种种原因,需要日志进行分割,分割不是针对nginx环境,其他环境也一样,我们只是使用nginx环境进行举例说明一下:
第一种使用shell脚本
使用脚本进行日志分割的思路,就是在流量低峰期的时间段,对nginx正在写入的文件进行重新命名,然后热加载以下nginx,会重新生成一个nginx日志文件,然后继续写入。看下面的脚本:
#!/bin/bash logspath=/home/wwwlogs/ #定义日志路径 logdate=`date -d "1 day ago" +"%Y%m%d"` #定义前一天的日期 rmlogdate=`date -d "15 day ago" +"%Y%m%d"` #定义15天前的日期 cd $logspath #切换目录 mv access.log access-$logdate.log #文件重命名 mv access_json.log access_json-$logdate.log #文件重命名 /etc/init.d/nginx reload #reload热加载一下nginx rm -rf access-$rmlogdate.log #删除15天前的日志 rm -rf access_json-$rmlogdate.log #删除15天前的日志
定义前一天的日期是为了,在第二天凌晨进行日志切割,可以针对当天的日志文件命名当天的时间。定义15天前的日期是我这里只保留15天的日志,但是有些环境需要保留半年的日志,这个时候我们需要创建一个备份日志目录,然后把15天前的日志移动到备份目录即可,后面可以在加一个半年之前的日志进行删除操作。
第二种使用shell脚本
上面针对的是域名少的nginx环境中,进行的日志切割,如果我一个nginx下挂了多个域名,然后每个域名下生成了一个日志文件,在按照上面的方法进行切割,就有点太傻了,这里我们用到了一个rename命令,如果感兴趣的话可以看看: https://www.wulaoer.org/?p=792 。这种方法,主要是使用了rename进行文件批量重命名,其他流程和上面差不多,看一下下面的脚本:
#!/bin/bash path=/home/wwwlogs/ move_name =`date -d "7 days ago" +%Y%m%d` move_file =/home/wwwlogs/back cd $path rename .log `date +%Y%m%d`".json" *.log #把.log后缀的文件修改成"*日期.json"格式 /apps/work/service/openresty/nginx/sbin/nginx -s reload mv *$move_name.json $move_file #把七天前的文件移动到备份目录
这里只是使用rename修改了文件后缀,这里log后缀的文件和json后缀的文件没有什么区别,所以可以忽略。查看上和log后缀的日志是一样的。
第三章使用logrotate工具
logrotate是系统自动的一个日志切割工具,分割机制和上面写的脚本一样,这里就不说了,先创建一个logrotate切割文件,
[root@wulaoer ~]# cd /etc/logrotate.d/ [root@wulaoer logrotate.d]# vim nginx /apps/work/service/openresty/nginx/logs/*.log { #指的是目录下所有以.log结尾的文件 daily #按天切割 dateext dateformat %Y%m%d.json #切割后文件后缀,不能使用log,否则会会就文件进行继续切割 extension .log #切割文件后缀 create rotate 60 #保留天数 notifempty create 0640 root root #切割后日志权限 sharedscripts prerotate if [ -d /etc/logrotate.d/nginx ]; then \ #判断切割文件 run-parts /etc/logrotate.d/nginx; \ fi \ endscript postrotate [ ! -f /var/nginx.pid ] || kill -USR1 `cat /var/nginx.pid` endscript }
强制执行logrotate,测试一下设置的logrotate是否正常,正常之后就可以添加到定时任务里了。
[root@wulaoer ~]# logrotate -vf /etc/logrotate.d/nginx
使用定时任务执行
0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx
nginx日志切割的三种方法已经都实现了,根据自己的喜好选择不同的方法,写完脚本之后一定要做定时任务,定时任务不执行,脚本不会执行。定时任务参考:https://www.wulaoer.org/?p=763
没有了,看些其他的吧!!!!!!!!!!!!!
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏