首页/云/可观测性速查/日志轮转与清理
日志平台52 条

日志轮转与清理

轮转控制单文件大小与历史份数:logrotate 按天/大小切分并压缩,保留 N 份;采集器与轮转策略要配合,避免丢行或重复。

可观测性速查云更新于 2026-10-13

日志轮转解决什么

日志轮转控制单个日志文件的大小与历史份数:logrotate 按天或按大小切分旧文件,压缩后保留 N 份,超出部分删除。它解决的是磁盘被日志写满这类问题,同时决定采集器能读到多少历史数据,因此轮转策略要和日志采集范围一起设计。

基本信息

执行方式由 cron 或 systemd timer 定期调用 logrotate
配置文件/etc/logrotate.conf 与 /etc/logrotate.d/ 下的分片
切换方式create(重命名后建新文件)与 copytruncate(复制后清空)
保留策略rotate 指定份数,配合 compress、dateext 使用

logrotate 配置示例

logrotate 配置示例
/var/log/app/*.log {
    daily          # 每天轮转一次
    rotate 7       # 保留 7 份历史
    compress       # 压缩历史文件
    delaycompress  # 最近一份先不压缩
    missingok      # 文件不存在不报错
    notifempty     # 空文件不轮转
    create 0640 app app
}

参数含义

参数含义注意点
daily / weekly轮转周期也可用 size 按体积触发
rotate N保留的历史份数份数乘以单文件大小决定磁盘占用
compress压缩历史文件delaycompress 让最近一份保持可读
create轮转后新建文件与权限应用需要重新打开文件句柄
copytruncate复制后清空原文件存在竞态窗口,可能丢行

典型使用场景

  • 业务日志持续增长,需要限定单文件大小与保留时间
  • 采集器要保证窗口内的日志都能读到,轮转份数不能少于采集滞后时间
  • 按天归档便于事后检索,用 dateext 让文件名带上日期
  • 磁盘告警频发时先检查日志目录的轮转是否真正生效
应用自己能重新打开文件时优先用 create 式轮转;只能 copytruncate 时,要和采集器的读取行为一起验证是否出现丢行。
新配置先用 logrotate -d 做 dry-run 验证,再实际执行,避免参数写错一次性清掉必需的历史日志。

排查要点

  • 轮转没生效先确认 cron 或 timer 是否在跑,再检查配置路径是否被正确加载
  • 对比新老文件的属主与权限,create 参数写错会让应用写不进新文件
  • 轮转后日志在采集端重复或断档,检查采集器与轮转方式的配合是否合理

易错点

  • 不轮转的单文件可能涨到几十 GB,采集与检索都受影响,先定轮转再谈优化
  • copytruncate 有竞态窗口可能丢行,评估后选更稳妥的轮转方式
  • 轮转份数少于采集器积压的时间窗口,恢复读取时日志已被删除
  • 配置写完不 dry-run 直接执行,参数写错可能一次清掉全部历史日志

数据来源与参考

  • logrotate 手册(man logrotate)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌