logrotate日志分割工具

1. logrotate简介

logrotate是一个日志文件管理工具。用来把旧文件轮转、压缩、删除,并且创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小、天数等来转储,便于对日志文件管理,一般都是通过cron计划任务来完成的,并且可以发送日志到指定的E-mail。

The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files. Logrotate allows for the automatic rotation compression, removal and mailing of log files. Logrotate can be set to handle a log file daily, weekly, monthly or when the log file gets to a certain size.

                                            

2. logrotate安装及配置详解

2.1 logrotate安装

在Debian或Ubuntu上:

# apt-get install logrotate cron

在Fedora,CentOS或RHEL上:

# yum install logrotate crontabs

2.2 logrotate配置

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

logrotate 的配置文件是 /etc/logrotate.conf。主要参数如下表:

参数
说明
compress启用压缩,指的是轮替后的旧日志,这里默认用的是gzip压缩的
compressoptions以gzip -9的模式压缩
uncompresscmd解压日志,默认是gunzip
daily每天轮替选项
dateext轮替的日志文件会附加上一个短横线和YYYYMMDD格式的时间戳
delaycompress
将以前的日志文件压缩推迟到下一次轮替
ifempty即使日志文件是空的也轮替
mail将轮替后的文件发送到指定E-mail地址
copytruncate
用于还在打开中的日志文件,把当前日志备份并截断,开始轮替
mailfirst/maillast向邮件发送轮替文件/轮替后历史文件(默认)
monthly一个月轮替一次
nocompress如果在logrotate.conf中启用了压缩,这里是做不用压缩的参数
nomail
不发送邮件到任何地址
ifempty如果日志时空的就不轮替
olddir directory轮替后日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
postrotate/endscript
在做完轮替后的命令,两个关键字必须单独成行,使用的操作在2者之间相当于分组“{}”,注意的使用外部指令时要用绝对路径
prerotate/endscript在做轮替前的命令,同上
rotate count轮替最多保留之前的数据几次,超出的将被删除或邮件接收,设为0则不保存
size size当日志增长到指定大小的时候开始轮替,它不会考虑
start count轮替文件名基于这个数字。
例如,指定0时,原日志文件轮替的备份文件以.0为扩展名,如果指定9,就直接从.9开始跳过0-8
然后再继续向后轮替rotate指定的次数。
weekly如果当前的星期几比上次轮替的星期几少,或者过了一个多星期,就会发生轮替通常是在每周的第一天轮替,如果logrotate不是每天运行的,会在第一次有机会时进行轮替。
yearly如果当前年份不同于上次轮替的年份,则进行日志轮替
create mode owner group在轮替动作之后,postrotate脚本执行之前,立即使用刚轮替的日志文件名创建日志文件。
    MODE 指定日志文件的权限(0660之类)
    OWNER 指定日志文件的属主
    GROUP 指定日志文件的属组
extension ext日志文件可在轮替后使用指定的EXT扩展名。如果使用压缩,通常EXT后还会加上压缩文件的扩展名,通常是.gz。例如想把mylog.foo轮转为mylog.1.foo.gz而不是mylog.foo.1.gz

                                                                                                                                                    

3. logrotate示例

3.1 logrotate配置语法

logrotate.conf中的配置语法很简单:
日志文件名的绝对路径(如果有多个用空格隔开) {
    需要配置的参数
}

命令参数说明
# logrotate --help

Usage: logrotate [OPTION...] <configfile>
  -d, --debug               调试模式,输出调试结果,并不执行。隐式-v参数
  -f, --force               强制模式,对所有相关文件进行rotate
  -m, --mail=command        发送邮件 (instead of `/bin/mail')
  -s, --state=statefile     状态文件,对于运行在不同用户情况下有用
  -v, --verbose             显示debug信息

3.2 logrotate应用示例

/var/log/nginx/*.log /var/log/tomcat/*log {   # 可以指定多个路径
    daily                      # 日志轮询周期,weekly,monthly,yearly
    rotate 30                  # 保存30天数据,超过的则删除
    size +100M                 # 超过100M时分割,单位K,M,G,优先级高于daily
    compress                   # 切割后压缩,也可以为nocompress
    delaycompress              # 切割时对上次的日志文件进行压缩
    dateext                    # 日志文件切割时添加日期后缀
    missingok                  # 如果没有日志文件也不报错
    notifempty                 # 日志为空时不进行切换,默认为ifempty
    create 640 nginx nginx     # 使用该模式创建日志文件
    sharedscripts              # 所有的文件切割之后只执行一次下面脚本
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}
当配置完成后,可以通过如下方式进行测试。

----- 可直接手动执行
$ logrotate --force /etc/logrotate.d/nginx

----- 显示详细的信息;而且--debug/-d实际上不会操作具体文件(Dry Run)
$ logrotate --debug --verbose --force /etc/logrotate.d/nginx
在 CentOS 中,默认会将日志保存 /var/lib/logrotate.status 文件中,如果需要指定到其它文件,可以通过 -s/--state 
参数指定。

/var/log/messages {
    rotate 5
    weekly
    postrotate
        /sbin/killall -HUP syslogd
    endscript
}

"/var/log/httpd/access.log" /var/log/httpd/error.log {
    rotate 5
    mail www@my.org
    size 100k
    sharedscripts
    postrotate
        /sbin/killall -HUP httpd
    endscript
}

/var/log/news/* {
    monthly
    rotate 2
    olddir /var/log/news/old
    missingok
    postrotate
        kill -HUP ‘cat /var/run/inn.pid‘
    endscript
    nocompress
}

参考:

  1. logrotate机制与原理[转载]

  2. Linux logrotate 命令教程日志分割

  3. logrotate使用方法

  4. Linux中logrotate日志管理工具详解

  5. Linux服务:Logrotate日志管理工具


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/2460.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注