首页/安全/等保与合规速查/logrotate:轮转与六个月留存的实现

logrotate:轮转与六个月留存的实现

日志轮转策略应与留存要求对齐:按天轮转、保留足够份数覆盖留存期限,并压缩归档、控制权限、轮转后通知服务重开文件。

等保与合规速查安全更新于 2026-10-13

轮转与留存的关系

logrotate 是 Linux 上的日志轮转工具,通常由 cron 或 systemd timer 定时触发。它的价值不只是控制磁盘占用:留存期限就是靠轮转频率与保留份数两个参数共同实现的。按日轮转并保留约 190 份,就能覆盖六个月;改留存时长时要同时核对磁盘容量与归档策略,否则可能撑爆磁盘或留不住日志。

基本信息

适用平台RHEL 系与 Debian 系 Linux,配置放 /etc/logrotate.d/
触发方式cron 定时任务或 systemd timer,默认每日执行
关键参数rotate、compress、create、postrotate
留存换算保留天数 ≈ rotate 份数 × 轮转频率
权限控制用 create 指定属主与权限,避免日志被改

典型使用场景

  • 满足留存要求:把六个月留存落到具体配置而非口头承诺
  • 控制磁盘:限制单类日志占用,避免写满根分区
  • 服务重开文件句柄:轮转后通知 nginx 等程序重新打开日志
  • 权限收紧:让审计日志只有指定组可读
  • 归档压缩:降低长期留存的存储成本

示例配置(/etc/logrotate.d/nginx-audit)

示例配置(/etc/logrotate.d/nginx-audit)
/var/log/nginx/*.log {
    daily                 # 每天轮转,按天决定留存粒度
    rotate 190            # 约六个月(按日轮转,190 份)
    missingok             # 日志不存在时不报错
    notifempty            # 空文件不轮转
    compress              # 归档压缩
    delaycompress         # 最近一份暂不压缩,便于随时查看
    create 0640 www-data adm   # 新建文件的属主与权限
    sharedscripts         # 多个文件只执行一次脚本
    postrotate
        /usr/sbin/nginx -s reopen >/dev/null 2>&1 || true
    endscript
}

验证与排错

验证与排错
logrotate -d /etc/logrotate.d/nginx-audit   # -d 只看打算做什么,不实际执行
logrotate -f /etc/logrotate.d/nginx-audit   # -f 立即强制执行一次
ls -l /var/log/nginx/ | head                 # 检查轮转与压缩结果
cat /var/lib/logrotate/logrotate.status      # 查看上次轮转时间

常用指令速查

  • daily / weekly / monthly:控制轮转频率,决定留存的粒度
  • rotate N:保留份数,与频率共同决定留存天数
  • size 与 daily 并列时:任一条件满足就会触发轮转
  • dateext:用日期后缀命名归档,便于按日期定位文件
  • copytruncate:适合不支持重开句柄的程序,但可能丢少量写入
  • create:指定新建文件的属主与权限,让审计日志只有指定组可读
rotate 份数与轮转频率共同决定留存天数;改留存前先核对磁盘容量与集中平台的保留策略。

易错点

  • 改完配置忘了 reload 服务:部分程序需要重开文件句柄,否则继续写向旧文件
  • 只改本地轮转不查集中平台:平台侧的保留策略同样决定实际可查期限
  • rotate 份数与留存要求不匹配:份数太少会在检查时无法提供历史日志
  • 用 copytruncate 处理大文件:复制期间写入的少量日志可能丢失,需评估是否可接受

数据来源与参考

  • logrotate 手册页与配置文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌