轮转决定了能回溯多久
日志文件不会无限增长,logrotate 按配置定期把当前日志改名归档、压缩或直接删除,再让服务重新创建新文件。轮转周期、保留份数与是否压缩,这三个参数共同决定了时间线的可见边界:保留 7 份按天轮转的日志,就意味着超出这个范围的记录已经不存在了。
copytruncate 会改变判定方式
默认方式是把文件改名后由服务新建文件,历史内容完整保存在归档文件里;而 copytruncate 的做法是先复制一份再把原文件截断为零长度,服务继续往同一个文件描述符写入。这种方式对不支持重新打开日志的程序友好,但被截断的这段时间里的内容无法从原文件恢复,判定「日志是否被删除」时要用完全不同的思路。
基本信息
| 适用平台 | Linux(logrotate,通常由计划任务每日触发) |
|---|---|
| 配置文件 | /etc/logrotate.conf、/etc/logrotate.d/* |
| 关键参数 | daily/weekly、rotate N、compress、copytruncate |
| 查看现状 | ls -l /var/log/auth.log* 查看当前与归档文件 |
| 另一个体系 | journald 有自己的容量与轮转策略 |
典型使用场景
- 确定回溯边界:查清某类日志最多能回看几天
- 解释记录缺失:某时段日志为空先确认是否被轮转清理
- 判断清理行为:对比轮转时间与事件时间,区分正常轮转与人为删除
- 评估证据完整性:在报告中说明日志保留范围对结论的影响
- 加固建议:对关键日志延长保留期或启用集中转发
查看轮转策略
查看轮转策略
# 查看各服务的轮转配置要点
grep -R -E 'daily|weekly|rotate |compress|copytruncate' /etc/logrotate.d/ | head -20
# 主配置中的全局默认值
head -30 /etc/logrotate.conf
# 查看某类日志当前的归档情况与保留份数
ls -l /var/log/auth.log*
stat -c '%n | mtime=%y' /var/log/auth.log /var/log/auth.log.1 2>/dev/null
# journald 体系的容量与保留策略
journalctl --disk-usage
# grep -E 'SystemMaxUse|MaxRetentionSec' /etc/systemd/journald.conf关键参数读法
| 参数 | 含义 | 对时间线的影响 |
|---|---|---|
| daily / weekly | 轮转周期 | 决定单个文件覆盖的时间跨度 |
| rotate N | 保留份数 | 决定最长可回溯范围 |
| compress | 归档时压缩 | 需用 zgrep 检索,不影响内容完整性 |
| copytruncate | 复制后截断原文件 | 被截断内容无法从原文件恢复 |
| notifempty | 文件为空时不轮转 | 低频日志的保留跨度会变长 |
journald 与 rsyslog 两套轮转可能并存,实际保留策略要按两边的配置分别确认,只看其中一套会低估或高估可回溯范围。
日志的空洞不一定来自删除:服务重载、轮转间隙、磁盘繁忙导致的写入丢失都会造成缺口,判定人为清理前先排除这些原因。