目 录CONTENT

文章目录

logrotate对Nginx日志进行切割

简中仙
2022-09-07 / 0 评论 / 0 点赞 / 66 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-03-13,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

随着访问量的增长,日志文件会越来越大,时间长既会影响访问的速度,也会占用一部分磁盘空间,所以需要按天切割access和error日志。

利用系统服务——logrotate

logrotate是一个linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间/大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令

logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,具体可以查询crontab的配置文件/etc/anacrontab。系统会按照计划的频率运行logrotate,通常是每天。在大多数的Linux发行版本上,计划每天运行的脚本位于/etc/cron.daily/logrotate

主流Linux发行版上都默认安装有logrotate包,如果你的linux系统中找不到logrotate, 可以使用apt-get或yum命令来安装

logrotate日志分割配置:

注意:该文件无法识别中文,需要将注释删除

vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log { 
    daily                                   # 日志归档周期为1天 
    size 1                                  # 日志文件最小为1字节时才执行归档 
    minsize 1                               # 日志文件最小为1字节时才执行归档 
    notifempty                              # 日志文件不为空时才执行归档 
    dateext                                 # 归档文件名添加时间字符串 
    dateformat -%Y%m%d%H                    # 归档文件名时间字符串格式为-%Y%m%d%H 
    dateyesterday                           # 归档文件名时间字符串以归档操作的前一天为时间戳 
    extension .log                          # 归档文件名中保留日志的扩展名 
    compress                                # 归档文件执行压缩 
    delaycompress                           # 在归档执行的下个周期再进行压缩 
    create                                  # 以创建新文件方式实现日志归档 
    olddir /data/backup/nginx_logs          # 归档文件存储目录 
    createolddir                            # 归档文件存储目录不存在时自动创建 
    postrotate                              # 归档执行后执行脚本 
        /usr/local/nginx/sbin/nginx -s reopen -g "pid /run/nginx.pid;" 
                                                # 通知Nginx重新打开日志文件 
    endscript 
    sharedscripts                           # 启用脚本共享模式 
    maxage 7                                # 归档文件最多保留7天 
    rotate 7                                # 归档文件最多保留7份 
}
}

如果提示权限不够而分割失败,这是因为开启了selinux导致,解决方案有如下2种:

1、关闭selinux

2、修改待分割的日志文件所在目录的权限

参数说明
copytruncate拷贝原日志文件,并将其大小变为0
daily每天切割
rotate 15保留最多15个文件
compress压缩分割后的文件
missingok文件丢失了,继续切割而不报错
size 200M当文件大于200M时,就切割
dateext切割后的日志文件以当前日期YYYYMMDD为格式结尾,如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式
compresscmd指定压缩的命令,默认 gzip
uncompresscmd用于解压缩的日志文件的命令 默认是 gunzip
compressext启用压缩的扩展名,默认 gzip 的扩展名就是 .gz
copy制作日志文件的副本,与create选项互斥
copytruncate用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。与create选项互斥
create mode owner group在切割后,创建新的日志文件,并指定数据的权限和所有者和所属组
dateformat format_string指定日志文件后缀日期格式
ifempty表示即使是空文件也要选择,该选项是默认值。与 notifempty 相反
notifempty当日志文件为空时,不进行轮转,与 ifempty 相反
mailfirst当配置了邮件地址,指定发送最新的文件
maillast当配置了邮件地址,指定发送最旧的文件,(默认设置)
rotate count日志保留的次数, 如果该参数不写的话,默认就是删除之前所有的文件日志。比如切割了200次,那么只保留最新的180次日志,并删除旧的20次日志。如果配置文件指定的是 daily,那每天切割一次日志,就意味着保留180天日志。
maxage count删除早于 count 天的日志,如果配置了 mail 则通过邮件发送
weekly每周运行一次,通常在每周的第一天
monthly每月运行一次切割,通常会在该月的第一天
yearly如果当前年份与上一次年份不相同,就会进行切割
nocompress不进行压缩
size size日志文件达到多大就切割
olddir dir切割后存放的目录
start count当没有指定日期后缀,将数字作为后缀内容,默认是从 1 开始 。可以指定其他数字开始
missingok如果日志丢失,不报错继续滚动下一个日志
mail 112@163.com该参数与 rotate 是有关联的,当超过 rotate 指定次数,文件不是删除,而是通过邮件发送到指定位置
prerotate在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
hourly每个小时切割
nocreate不建立新的日志文件
delaycompress和compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress覆盖 delaycompress 选项,转储同时压缩。
errors address转储时的错误信息发送到指定的Email 地址

常用命令

logrotate -d -f /etc/logrotate.d/nginx # 测试配置文件是否配置正常
logrotate -f /etc/logrotate.d/nginx # 立刻切割文件,可以将该命令放到定时任务中实现定时切割
0

评论区