Linux日志治理需分层控制:常规用logrotate轮转压缩(保留7–30天),风控层监控磁盘水位并告警,应急层保留1小时快照;配置增强含prerotate清理旧归档,脚本自动干预并记录操作日志。

Linux系统日志长期积累会快速消耗磁盘空间,尤其在高流量服务或调试阶段。单纯依赖logrotate虽基础有效,但面对多服务、差异化保留策略、异常膨胀预警等场景时,需更可控、可追溯、带反馈的自动化治理方案。
核心原则:分层控制 + 可观测 + 安全兜底
不追求“一键清空”,而是建立分级响应机制:
- 常规层:用logrotate按天/大小切分+压缩+轮转(保留7–30天,视业务而定)
- 风控层:定时检查/var/log下各目录占用,对超阈值(如单目录 >2GB)触发告警或限流清理
- 应急层:保留最近1小时原始日志快照(如用cp -a + timestamp),避免误删后无从恢复
logrotate增强配置示例(/etc/logrotate.d/myapp)
针对自定义应用日志,补充关键选项提升健壮性:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 644 root root
sharedscripts
postrotate
# 通知服务重载日志句柄(如支持SIGUSR1)
[ -f /var/run/myapp.pid ] && kill -USR1 `cat /var/run/myapp.pid` 2>/dev/null || true
endscript
# 新增:清理压缩包超过30天的归档
prerotate
find /var/log/myapp/ -name "*.log.[0-9]*.gz" -mtime +30 -delete 2>/dev/null
endscript
}磁盘水位监控与自动干预脚本(/usr/local/bin/clean-logs-safe.sh)
作为cron任务(如每天凌晨2:15执行),兼顾安全与实效:
- 先用du -sh /var/log/* | sort -hr | head -10定位TOP10大目录
- 对超过设定阈值(如3GB)的目录,仅清理最老的3个压缩日志(保留至少7天原始+压缩)
- 每次操作前写入/var/log/clean-logs-history.log,记录时间、路径、释放空间、操作人(root)
- 若单次释放空间
验证与回滚机制不可省略
上线前必须验证,运行后持续观察:
- 手动执行logrotate -d /etc/logrotate.conf查看调试输出,确认匹配规则和动作
- 首次启用自动清理脚本时,先注释掉删除语句,用echo模拟执行路径
- 保留/var/log/journal/(systemd-journald日志)的独立策略:设MaxUse=500M + MaxFileSec=2week,避免journal挤占根分区
- 所有定时任务加注释说明用途、负责人、最后修改时间,写在crontab里(crontab -e)
真正可靠的日志治理,不是删得越狠越好,而是让每一步清理都有据可查、有路可退、有阈值可守。把规则写进配置,把判断交给脚本,把结果留痕在日志,运维才真正从“救火”转向“控火”。


















