轮转配错的两种后果
logrotate 配置写错的典型结果只有两种:日志被过早清掉(审计要求留存半年,实际只剩七天),或者根本没轮转(磁盘被写满,业务连带中断)。它每天由定时任务静默执行,配置错误往往在出事那天才被发现,因此上线前干跑演练很有必要。
基本信息
| 适用平台 | Linux(logrotate 由 cron 或 systemd timer 触发) |
|---|---|
| 主配置 | /etc/logrotate.conf 与 /etc/logrotate.d/ 下的服务配置 |
| 关键参数 | rotate、size、maxage、compress、copytruncate/create |
| 必备动作 | 改配置后先用 -d 干跑验证 |
典型使用场景
- 审计要求留存:确认安全日志与访问日志满足保存周期
- 磁盘告警排查:定位是哪些日志没有轮转或保留过多份
- 变更前演练:调整策略前用 -d 看实际动作,避免误删日志
- 新服务接入:为自研服务补充 logrotate 配置,否则日志会无限增长
演练与核查
演练与核查
# 干跑演练:只打印动作,不实际执行
logrotate -d /etc/logrotate.conf 2>&1 | head -30
# 对单个配置强制轮转一次(谨慎,会真的轮转)
logrotate -f /etc/logrotate.d/nginx
# 查看保留与压缩策略
grep -rE 'rotate|maxage|size|compress' /etc/logrotate.d/ | head -20
# 确认触发方式在跑
systemctl list-timers | grep -i logrotate; ls /etc/cron.daily/ | grep logrotate参数读法
| 参数 | 含义 | 风险点 |
|---|---|---|
| rotate N | 保留 N 份历史日志 | 份数过少不满足留存要求 |
| maxage | 按天数删除旧日志 | 与 rotate 同时使用要理解优先级 |
| size / daily | 触发条件 | 配置不当会导致长期不轮转 |
| copytruncate | 拷贝后清空原文件 | 有丢失窗口,但与不支持重开的程序兼容 |
| create | 轮转后新建文件 | 与 copytruncate 二选一,混用会出问题 |
干跑能提前暴露配置错误:线上日志被误清的案例,绝大多数是改完配置没有 -d 演练就直接等定时任务执行。
轮转依赖 cron 或 timer 正常运行:crond 停摆时轮转不会执行,核查配置的同时要确认调度服务在运行。
交付验收时把「策略文件 + 最近一次轮转时间 + 实际文件列表」三项一起留档:只看策略文件无法证明它真的被执行过,出事后也无法解释日志为何缺失。