管理日志文件
100%

日志 · 第 6 课

管理日志文件

学习如何使用 logrotate 配置、测试并验证安全的文本日志轮转。

无限增长的文本日志可能耗尽文件系统,而过于激进的删除也可能清除运维或合规所需的证据。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 和外部存储的保留策略。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
返回 日志