无限增长的文本日志可能耗尽文件系统,而过于激进的删除也可能清除运维或合规所需的证据。logrotate 会把配置好的大小、时间、压缩、所有权和保留策略应用到文件日志。
日志 · 第 6 课
管理日志文件
学习如何使用 logrotate 配置、测试并验证安全的文本日志轮转。
理解轮转
典型的轮转会重命名活动文件、创建替代文件、按需要求应用程序重新打开文件、压缩较早的版本,并删除超过保留期限的文件。这些步骤取决于配置;轮转不是备份,因为保留副本仍可能被删除、损坏,或随同一台主机一起丢失。
为什么日志轮转不能替代备份或归档?
查找配置
主文件通常是 /etc/logrotate.conf,软件包或应用程序配置片段位于 /etc/logrotate.d/ 下。简化的策略可能如下:
/var/log/example/app.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 example adm
}
该配置要求每天评估,保留七代轮转文件,延迟一代后再压缩,允许日志缺失或为空,并以明确的模式和所有权新建文件。实际是否轮转还取决于记录的状态以及调度器调用 logrotate 的方式。
rotate 7 指定了什么?
与写入程序协调
重命名日志后,守护进程仍可能通过保持打开的文件描述符继续写入旧文件。postrotate 脚本通常会发送应用程序文档规定的重新加载或重新打开信号。应验证具体应用程序行为,并让脚本作用范围保持最小。
当应用程序无法重新打开日志时,copytruncate 会复制文件,然后就地截断原文件。在复制和截断的时间窗口内,写入可能丢失或重复,因此这是一种折中方案,而不是普遍安全的默认选择。
为什么轮转后可能需要向应用程序发送重新打开信号?
激活前测试
使用调试模式检查决策,而不轮转文件:
$ sudo logrotate -d /etc/logrotate.conf
调试输出不能证明真实运行期间权限、脚本、可用空间或应用程序重新打开一定成功。应在受控环境中测试新规则,执行后检查活动文件、轮转版本、所有权、压缩、应用程序输出和 logrotate 状态。-f 会强制轮转并改变状态,不要把它误认为试运行。
logrotate -d 提供什么?
考虑其他存储
Logrotate 只管理其策略指定的文件。systemd journal 有自己的大小和保留配置,数据库和远程日志服务也有各自的生命周期控制。应监控文件系统容量和日志功能健康状况,以便在写入程序卡住或轮转失败耗尽空间前发现问题。
logrotate 规则会自动实施 systemd journal 保留策略吗?
课程已完成
你已完成 管理日志文件
现在,你可以设计并验证文件日志轮转策略,而不会把它误认为归档。
平衡空间、运维和保留要求。
定义代数、压缩、所有权和空文件处理方式。
与保持文件描述符打开的应用程序安全协调。
在受控真实轮转前调试配置。
分别管理 journal 和外部存储的保留策略。