zoukankan      html  css  js  c++  java
  • logrotate 进行nginx日志分割

    http://www.williamsang.com/archives/1254.html


    日志分割常用方法:

    • 自己写脚本分割
    • 使用linux自带的logrotate

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

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

    logrotate简单介绍

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

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

    如下图所示:

    logrotate

    logrotate配置文件一般在:

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # 一个星期轮转一次
    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日志,配置文件内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    /data/logs/nginx/access/access.log /data/logs/nginx/access/default.log {
    daily
    rotate 15
    minsize 10M
    sharedscripts
    postrotate
      /usr/local/server/nginx/sbin/nginx -s reload
    endscript
    }

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

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

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

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

    • # logrotate -vf /data/log/nginx/access.log

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

    验证是否执行,查看cron的日志即可

    • # grep logrotate /var/log/cron

    参考:


  • 相关阅读:
    容器级虚拟化如何进行资源分配
    容器虚拟化实现的原理
    tensorflow报cudnn错误
    nginx调优
    mysql主从原理及配置
    新安装mysql,如何提升mysql安全性
    LINUX系统软件安装和卸载的常见方法
    如何增加黑客通过ssh入侵的难度--保护ssh的三把锁
    ubuntu-docker入门到放弃(八)创建支持SSH服务的镜像
    ubuntu-docker入门到放弃(七)操作系统
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4926791.html
Copyright © 2011-2022 走看看