背景:
日志文件记录关键应用或者系统的运行过程中发生重要信息。日志文件在排障或者系统监控中,有十分重要的作用。对于业务量大的应用来说,日志文件可能很快增长为很大很大,甚至将磁盘空间耗尽,将严重影响业务的正常运行。即使空间足够,打开和检查单个巨型日志文件也很棘手。
logrotate介绍
logrotate 是一个非常有用的工具,它可以自动分割(或转储)、压缩以及删除旧的日志文件。例如,你可以设定 logrotate 来分割 /var/log/foo 文件,每 30 天轮转一次,删除超过 6 个月的日志。一旦设定,使用 logrotate 自动执行该过程,无需进一步人为干预。 另外,你也可以将旧日志通过邮件发送出去。
安装logrotate
logrotate 包通常默认安装在主要的 Linux 发行版上。如果系统不存在 logrotate,您可以使用 apt-get 或 yum 命令安装它。
在Debian或Ubuntu上:
# apt-get install logrotate cron
在Fedora,CentOS或RHEL上:
# yum install logrotate crontabs
logrotate 的配置文件是 /etc/logrotate.conf,一般不需要修改。需要转储的日志文件在 /etc/logrotate.d/ 目录下用独立的配置文件定义。
示例1:
在第一个例子中,我们将创建一个10MB的日志文件 /var/log/log-file。我们将学习如何使用 logrotate 来管理这个日志文件。
我们首先创建一个日志文件,并填充一个10MB的随机比特流。
# touch /var/log/log-file
# head -c 10M < /dev/urandom > /var/log/log-file
现在日志文件已经准备好了,让我们来配置 logrotate 转储这个日志文件。让我们创建一个配置文件:
/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 进程将立即再次读取其配置并继续运行。
上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。
示例2:
在本例中,我们希望仅在日志文件大小超过50MB时进行日志转储。
/var/log/log-file {
size=50M
rotate 5
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}
示例3:
如果希望旧的日志文件按照创建日期命名,可以通过添加 dateext 参数实现。
/var/log/log-file {
Monthly
rotate 5
Dateext
create 644 root root
Postrotate
/usr/bin/killall -HUP rsyslogd
Endscript
}
这将导致存档日志文件在其名称中包含日期。
排障
- 手动执行logrotate
logrotate可以在任何时候从命令行手动调用。
- /etc/lograte.d/下配置的所有日志调用logrotate
# logrotate /etc/logrotate.conf
- 某个特定的配置调用logrotate
# logrotate /etc/logrotate.d/log-file
- 演练
排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。
# logrotate -d /etc/logrotate.d/log-file
根据上面的输出我们可以看出,logrotate决定不需要进行转储,因为日志文件的创建时间小于1天。
小结
logrotate是一个防范日志文件过大的工具,配置后可以长久自动地执行,无需人工干预。本文讲解了几个logrotate使用的案例,你可以根据需求进行更进一步的定制。
参考文献:
xmodulo.com/logrotate-manage-log-files-linux.html