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

查看来源

日志分割常用方法:

  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日志分割[转载])