天天看点

Linux的日志文件管理工具——logrotate(linux日志切割与轮循)

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

<a href="http://s3.51cto.com/wyfs02/M00/6E/2B/wKiom1V1TJjTTuoGAAIgSXUWv7s245.jpg" target="_blank"></a>

       现代的Linux版本都有一个小程序,名为logrotate,用来帮助用户管理日志文件,它以自己的守护进程工作。logrotate周期性地旋转日志文件,可以周期性地把每个日志文件重命名成一个备份名字,然后让它的守护进程开始使用一个日志文件的新的拷贝。这就是为什么在/var/log/下看到许多诸如maillog、maillog.1、maillog.2、boot.log.1、boot.log.2之类的文件名。它由一个配置文件驱动,该文件是/etc/logroatate.conf,下面是它的一个范例:

# see "man logrotate" for details

# rotate log files weekly

weekly

#以7天为一个周期

# keep 4 weeks worth of backlogs

rotate 4

#每隔4周备份日志文件

# send errors to root

errors root

#发生错误向root报告

# create new (empty) log files after rotating old ones

create

#转完旧的日志文件就创建新的日志文件

# uncomment this if you want your log files compressed IT网,http://www.it.net.cn 

#compress

#指定是否压缩日志文件

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

#表示/etc/logrotate.d目录下的所有配置文件都生效

# no packages own lastlog or wtmp -- we'll rotate them here

/var/log/wtmp { --针对wtmp单独的配置,这里是绝对路径

    monthly --一个月rotate一次,取代上面的全局配置里的一个星期一次

    minsize 1M --指定最小大小为1M,才rotate,就算是时间到了,大小没有1M,也不rotate

    create 0664 root utmp --定义创建的为属性为0664,属主为root,属组utmp

    rotate 1 --保留一个

}

logrotate -vf /etc/logrotate.conf --强制轮转日志,并查看轮转的过程

# system-specific logs may be configured here 

参  数:

-?或--help  在线帮助。 

-d或--debug  详细显示指令执行过程,便于排错或了解程序执行的情况。 

-f或--force  强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然。 

-s&lt;状态文件&gt;或--state=&lt;状态文件&gt;  使用指定的状态文件。 

-v或--version  显示指令执行过程。 

-usage  显示指令基本用法。

<a href="http://s3.51cto.com/wyfs02/M01/6E/2B/wKiom1V1TRiDrrLYAAHBXHfECFQ044.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/6E/2B/wKiom1V1TNeT7W4aAAICxqjQbxM327.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/6E/27/wKioL1V1TnrDRRLhAAIwaQrB-0M430.jpg" target="_blank"></a>

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

       主流Linux发行版上都默认安装有logrotate包,如果出于某种原因,logrotate没有出现在里头,你可以使用apt-get或yum命令来安装。

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

<a></a>

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

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

由于现在日志文件已经准备好,我们将配置logrotate来轮循该日志文件。让我们为该文件创建一个配置文件。

这里:

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 进程将立即再次读取其配置并继续运行。

上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

<a href="http://s3.51cto.com/wyfs02/M02/6E/2B/wKiom1V1TV_guT8rAADydIzu2aI294.jpg" target="_blank"></a>

在本例中,我们只想要轮循一个日志文件,然而日志文件大小可以增长到50MB。

我们想要让旧日志文件以创建日期命名,这可以通过添加dateext常熟实现。

这将让归档文件在它们的文件名中包含日期信息。

这里提供了一些logrotate设置的排障提示。

logrotate可以在任何时候从命令行手动调用。

要调用为/etc/lograte.d/下配置的所有日志调用logrotate:

要为某个特定的配置调用logrotate:

排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。

正如我们从上面的输出结果可以看到的,logrotate判断该轮循是不必要的。如果文件的时间小于一天,这就会发生了。

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

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

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

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

本文转自 linuxzkq 51CTO博客,原文链接:http://blog.51cto.com/linuxzkq/1659731

继续阅读