8.9 用logrotate管理日志文件

日志文件是Linux系统维护中必不可少的组成部分。日志文件可以帮助跟踪系统中多种服务所发生的事件。这有助于系统管理员排查问题,同时也为活动主机上出现的事件提供了统计数据。随着时间的推移,日志文件会变得越来越大,因而对于日志文件的管理必不可少。我们将用一种被称为轮替(rotation)的技术来限制日志文件的体积,一旦它超过了限定的大小,就要对它的内容进行抽取(strip),同时将日志文件中的旧条目存储到归档文件中。因此旧的日志文件就得以保存以便以后参阅。让我们看看如何对日志文件进行轮替及存储操作。

8.9.1 新手上路

logrotate是每一位Linux系统管理员都应该了解的命令。它能够将日志文件的大小限制在给定的SIZE内。各种应用程序会将信息添加到日志文件中。最新添加的信息总是出现在日志文件的尾部。logrotate根据配置文件扫描特定的日志文件。它在保留日志文件中最新添加的100KB内容(例如指定SIZE = 100k)的同时,将剩下的数据(较旧的日志数据)移入新文件logfile_name.1。如果该日志文件(logfile_name.1)中的内容越来越多,已经超出了SIZE的定额,logrotate就会再用最近的内容更新日志文件,然后用较旧的内容创建logfile_name.2。这个过程可以轻松地使用logrotate进行配置。logrotate还可以将旧的日志文件压缩成logfile_name.1. gz、logfile_name.2.gz等。是否选择压缩旧日志文件也可以通过logrotate来配置。

8.9.2 实战演练

logrotate的配置目录位于/etc/logrotate.d。如果列出这个目录中的内容,你会发现很多其他的日志文件配置。

我们可以为自己的日志文件编写一个特定的配置:

  1. $ cat /etc/logrotate.d/program
  2. /var/log/program.log {
  3. missingok
  4. notifempty
  5. size 30k
  6. compress
  7. weekly
  8. rotate 5
  9. create 0600 root root
  10. }

这就是全部的配置。其中,/var/log/program.log指定了日志文件路径。旧的日志文件归档之后也放入同一个目录中。让我们看看这些参数,如表8-3所示。

表 8-3

参  数 描  述
missingok 如果日志文件丢失,则忽略;然后返回(不对日志文件进行轮替)
notifempty 仅当源日志文件非空时才对其进行轮替
size 30k 限制实施轮替的日志文件的大小。可以用1M表示1MB
compress 允许用gzip对较旧的日志进行压缩
weekly 指定进行轮替的时间间隔。可以是weekly、yearly或daily
rotate 5 这是需要保留的旧日志文件的归档数量。在这里指定的是5, 所以这些文件名将会是program.log.1.gz、program.log.2.gz等直到program.log.5.gz
create 0600 root root 指定所要创建的归档文件的模式、用户以及用户组

表8-3中的选项都是可选的;我们只在logrotat配置文件中指定所需的选项即可。如果想了解更多的可用选项,请参考logrotate的手册页(http://linux.die.net/man/8/logrotate)。