美文网首页
logrotate 进行nginx日志分割[转载]

logrotate 进行nginx日志分割[转载]

作者: 勤劳一沙鸥 | 来源:发表于2016-09-05 15:53 被阅读627次

    查看来源

    日志分割常用方法:

    1. 自己写脚本分割
    2. 使用linux自带的logrotate

    前者灵活,可以应对各种需求,自定义文件夹、文件名。后者配置简单,使用方便。

    下面我们以分割nginx日志为例介绍一下使用logrotate分割日志实例

    logrotate简单介绍

    logrotate使用cron按时调度执行,日志的执行过程原理为不断改名称:比如你有个access.log文件,需要保留4个日志文件,那么logrotate是这么轮转的:

    1. access.log满足轮转条件?(调度时间,日志大小是否满足要求)如果需要轮转则进行下列步骤,否则跳过
    2. access.log.3存在?如果存在则删除
    3. access.log.2如果存在则改名为access.log.3
    4. access.log.1如果存在则改名为access.log.2
    5. access.log如果存在则改名为access.log.1
    6. 创建一个空的access.log文件
    

    logrotate配置文件一般在:
    /etc/logrotate.conf 通用配置文件,可以定义全局默认使用的选项。
    /etc/logrotate.d/xxx 自定义服务配置文件

    我们可以看下/etc/logrotate.conf里面的内容

    # 一个星期轮转一次
    weekly
    #保留四个日志
    rotate 4
    # 轮转旧的日志文件后创建新日志文件
    create
    # 使用日期作为轮转日志的后缀
    dateext
    # 压缩存储日志
    #compress
    
    # 包含某个目录下的自定义日志轮转
    include /etc/logrotate.d
    
    # no packages own wtmp and btmp -- we'll rotate them here
    /var/log/wtmp {
        monthly
        create 0664 root utmp
        minsize 1M
        rotate 1
    }
    
    /var/log/btmp {
        missingok
        monthly
        create 0600 root utmp
        rotate 1
    }
    

    我们新建一个/etc/logrotate.d/nginx来分割nginx日志,配置文件内容如下:

    /data/logs/access.log /data/logs/default.log {
        daily
        rotate 15
        minsize 10M
        sharedscripts
        postrotate
            [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
        endscript
    }
    

    第一行:指明日志文件位置,多个以空格分隔
    第二行:调用频率,有:daily,weekly,monthly可选
    第三行:总共轮换多少个日志文件,这里为保留15个
    第四行:限制条件,大于10M的日志文件才进行分割,否则不操作

    sharedscripts用于指明以下是执行轮转前和轮转后自定义执行的命令,比如postrotate和endscript表示,轮转后,执行nginx的重新加载配置文件,避免日志轮转后不写日志。如果要轮转前执行某个命令可以使用prerotate代替postrotate即可,两者可同时存在。

    可以通过man logrotate查看更多选项

    默认logrotate是通过crontab定期执行的,我们也可以手动执行查看结果:

    # logrotate -vf /etc/logrotate.conf
    

    v 选项表示查看详细执行过程****f 表示强制执行日志轮转(不然时间不到,日志文件大小等条件不满足,不会执行)强烈建议执行一下,了解下执行过程。
    验证是否执行,查看cron的日志即可

    # grep logrotate /var/log/cron
    

    相关文章

      网友评论

          本文标题:logrotate 进行nginx日志分割[转载]

          本文链接:https://www.haomeiwen.com/subject/inmrettx.html