最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中日志切割如何设置合适的文件保留策略防止历史日志无限堆积
时间:2026-08-24 11:34:49 编辑:袖梨 来源:一聚教程网
核心是控制保留天数、自动压缩与及时清理,7天为常用起点;rotate N 控制轮转文件数量而非精确天数;compress 与 delaycompress 可降磁盘占用60%–80%;postrotate 中需用 USR1 信号重开日志并校验 pid 路径;dateext、olddir、minsize、sharedscripts 等增强策略提升健壮性。
核心是控制保留天数+自动压缩+及时清理,7天是兼顾排查需求与磁盘压力的常用起点,但需根据合规要求和业务量动态调整。
明确保留天数并严格落地
logrotate 的 rotate N 参数直接决定保留几份历史日志。例如:
- rotate 7 → 保留最近7天(含当天切割出的1份 + 前6天的归档)
- rotate 30 → 满足多数审计场景,但需确认磁盘能否支撑
- rotate 180 → 符合国内网安法对 日志的最低留存要求,建议启用 compress + dateext 配合使用
注意:rotate 数值不是“保留N天”,而是“最多保留N个轮转文件”。若某天无新日志,不会生成新文件,实际保留天数可能略多于N。
必须启用压缩节省空间
未压缩的日志体积大、IO高。加这两行能减少60%–80%磁盘占用:
- compress:对旧日志用 gzip 压缩(生成 .gz 后缀)
- delaycompress:避免刚切割就压缩,留出窗口供临时排查(比如凌晨切割,当天日志还可能追加)
不压缩时,1GB access.log 切割7次就是7GB;压缩后通常只剩200–300MB。
确保 Nginx 正确重开日志文件
切割后若 Nginx 继续往旧文件句柄写入,会导致磁盘不释放、新日志丢失。关键动作在 postrotate:
- 发送 USR1 信号 给 Nginx 主进程,触发其重新打开 access.log 和 error.log
- 检查 pid 文件路径是否准确:
/var/run/nginx.pid或/usr/local/nginx/logs/nginx.pid,路径错则信号失效 - 加上
[ -f ... ] &&判断可避免因 pid 不存在导致脚本报错中断
按需补充增强项
让策略更健壮、更贴合实际运维习惯:
- dateext:让归档文件名带日期(如 access.log-20260819),比默认的数字序号更直观易查
-
olddir:把旧日志移到独立目录(如
/var/log/nginx/backup),避免和当前日志混在一起 - minsize 100M:配合 daily 使用,小流量站点可设为“满100MB才切”,避免每天生成空文件
- sharedscripts:多个日志匹配时(如 *.log),只执行一次 postrotate,防止重复发信号