日志切割之logrotate

日志切割之logrotate

2019-08-26

  1. 含义

日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

  1. 安装

默认centos系统安装自带logrotate,安装方法如下

yum -y install logrotate crontabs

  1. 目录说明

[root@clsn6 ~]# rpm -ql  logrotate

/etc/cron.daily/logrotate

/etc/logrotate.conf  # 主配置文件

/etc/logrotate.d   # 配置目录

  1. 创建临时文件

这里我们将创建一个10MB的日志文件/var/log/log-file。我们将展示怎样使用logrotate来管理该日志文件。

我们从创建一个日志文件开始吧,然后在其中填入一个10MB的随机比特流数据文件。

[root@clsn6 ~]# touch /var/log/log-file

[root@clsn6 ~]# head -c 10M < /dev/urandom > /var/log/log-file

 

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

  1. 配置说明

例子;

[root@clsn6 ~]# vim /etc/logrotate.d/log-file

/var/log/log-file {

    monthly

    rotate 5

    compress

    delaycompress

    missingok

    notifempty

    create 644 root root

    postrotate

        /usr/bin/killall -HUP rsyslogd

    endscript

}

以上配置为通用模板,根据需求进行整改。

Monthly

日志文件将按月轮循。其它可用值为'daily','weekly'或者'yearly'。

rotate 5

一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。

Compress

在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

Delaycompress

总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。

Missingok

在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

Notifempty

如果日志文件为空,轮循不会进行。

create 644 root root

以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

postrotate/endscript

在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

 

  1. 手动运行logrotate

logrotate可以在任何时候从命令行手动调用。要调用为/etc/lograte.d/下配置的所有日志调用logrotate:

[root@clsn6 ~]# logrotate /etc/logrotate.conf

要为某个特定的配置调用logrotate,执行一次切割任务测试

[root@clsn6 ~]# ll /var/log/log-file

-rw-r--r-- 1 root root 10485760 Feb  7 18:50 /var/log/log-file

[root@clsn6 ~]# logrotate -vf /etc/logrotate.d/log-file

[root@clsn6 ~]# ll /var/log/log-file*

-rw-r--r-- 1 root root        0 Feb  7 19:17 /var/log/log-file

-rw-r--r-- 1 root root 10485760 Feb  7 18:50 /var/log/log-file.1

 即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。

  1. 检查logrotate的记录日志

 logrotate自身的日志通常存放于/var/lib/logrotate/status目录。如果处于排障目的,我们想要logrotate记录到任何指定的文件,我们可以指定像下面这样从命令行指定。

[root@clsn6 ~]# logrotate -vf -s /var/log/logrotate-status

  1. Logrotate定时任务

 logrotate需要的cron任务应该在安装时就自动创建了,我把cron文件的内容贴出来,以供大家参考。

[root@clsn6 ~]# cat /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

  1. 例子

为nginx设置日志切割

防止访问日志文件过大

[root@clsn nginx]# cat /etc/logrotate.d/nginx

/var/log/nginx/*.log {

    daily

    rotate 5

    missingok

    notifempty

    create 644 www www

    postrotate

      if [ -f /application/nginx/logs/nginx.pid ]; then

          kill -USR1 `cat /application/nginx/logs/nginx.pid`

      fi

endscript

}

logrotate工具对于防止因庞大的日志文件而耗尽存储空间是十分有用的。配置完毕后,进程是全自动的,可以长时间在不需要人为干预下运行。本教程重点关注几个使用logrotate的几个基本样例,你也可以定制它以满足你的需求。

 

  1. 常见配置参数小结

 

配置参数

说明

compress                

通过gzip压缩转储以后的日志

nocompress              

不压缩

copytruncate            

用于还在打开中的日志文件,把当前日志备份并截断

nocopytruncate          

备份日志文件但是不截断

create mode owner group 

转储文件,使用指定的文件模式创建新的日志文件

nocreate                

不建立新的日志文件

delaycompress           

 compress 一起使用时,转储的日志文件到下一次转储时才压缩

nodelaycompress         

覆盖 delaycompress 选项,转储同时压缩。

errors address          

专储时的错误信息发送到指定的Email 地址

ifempty                 

即使是空文件也转储,这个是 logrotate 的缺省选项。

notifempty              

如果是空文件的话,不转储

mail address            

把转储的日志文件发送到指定的E-mail 地址

nomail                  

转储时不发送日志文件

olddirdirectory         

转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

noolddir                

转储后的日志文件和当前日志文件放在同一个目录下

prerotate/endscript     

在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行

daily                   

指定转储周期为每天

weekly                  

指定转储周期为每周

monthly                 

指定转储周期为每月

rotate count            

指定日志文件删除之前转储的次数,指没有备份,指保留个备份

tabooext [+] list

logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v,  ~

size size               

当日志文件到达指定的大小时才转储,bytes(缺省)KB(sizek)MB(sizem)

missingok

在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

 

Yum安装的服务会自动生成logrotate脚本,参与切割日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值