日志策略需要同时满足三件事:当前文件持续可写、历史记录能支撑排障或审计、总占用有明确上限。轮转并非简单地把旧文件改名;若应用仍持有旧文件描述符,磁盘空间可能不释放,新文件也可能长期为空。先弄清写入和重开机制,再定规则。
应用写到标准输出和标准错误时,通常由 systemd 日志或日志代理接收,容量与保留策略应配置在对应收集层。应用直接写文件时,先确认目录、文件名、属主、读取权限和单日最大增长量。用 du -sh 日志目录 看目录体量,用 lsof +L1 查找已删除但仍被进程打开的文件;后者解释了为什么 df 的空间没有随删除而释放。
按时间切分利于按日期查找,按大小切分能应对突发流量,两者可以组合。轮转程序重命名当前文件后,应用必须能重新打开新路径。若应用支持信号触发重开,应在轮转后执行对应动作并验证;如果不支持,可以评估受控重启或采用复制再截断的方式。
copytruncate 存在竞争窗口:复制与截断之间的新写入可能未进入归档副本。对于要求完整证据的日志,应优先选择应用原生重开能力,并在变更前验证实际行为。压缩只作用于已关闭的历史文件,避免压缩进程与正在写入的文件竞争。
估算每天日志量乘以保留天数,再为峰值、轮转延迟和压缩任务保留额外空间。按数量保留便于控制文件数,按天数保留便于满足时间跨度要求;具体规则还要符合业务和审计需求。明确谁负责归档、何时压缩、何时删除,并限制日志目录权限,防止业务账号删除或篡改其他服务的记录。
轮转配置能被解析,不代表应用已经切换到新文件;历史文件被删除,也不代表磁盘空间已释放。验收要覆盖轮转前后写入、归档完整性和多个周期的总量变化。模拟一条带有可识别时间的日志,确认它出现在正确文件且可被检索;再查看目录占用是否按预期保持有界。证据保留期限和容量上限都应写进运维记录。