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。如果列出这个目录中的内容,你会发现很多其他的日志文件配置。
我们可以为自己的日志文件编写一个特定的配置:
- $ cat /etc/logrotate.d/program
- /var/log/program.log {
- missingok
- notifempty
- size 30k
- compress
- weekly
- rotate 5
- create 0600 root root
- }
这就是全部的配置。其中,/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)。