最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中日志切割如何在保证数据不丢失的前提下缩减日志体积
时间:2026-08-27 11:43:48 编辑:袖梨 来源:一聚教程网
logrotate 安全切割+压缩旧日志+精简新日志内容三者协同,可兼顾数据完整性与体积控制;需配置 sharedscripts、postrotate 发送 USR1 信号,并启用 dateext、compress、delaycompress 等选项。
关键在于“切割时不中断写入”+“压缩旧日志”+“精简新日志内容”,三者配合才能既保数据又减体积。
用 logrotate 安全切割并自动压缩
这是最稳妥的方案,系统级工具成熟稳定,不会丢日志。
- 确保配置中包含 sharedscripts 和 postrotate 段,用
kill -USR1通知 Nginx 重开日志文件,而不是直接 mv 或 cp —— 这样能避免写入间隙 - 加上 compress 和 delaycompress:旧日志先压缩,下次轮转时再压上一轮,防止正在写的文件被误操作
- 使用 dateext(如
%Y%m%d)替代数字序号,便于识别和归档;搭配 rotate 7 可控保留周期 - 示例片段:
/var/log/nginx/*.log {daily
dateext
rotate 7
compress
delaycompress
missingok
notifempty
create 644 nginx nginx
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid)
fi
endscript
}
从源头减少单条日志体积
压缩只能减存量,精简格式才是控增量的核心。
- 检查
log_format,去掉非必要字段:比如$http_x_forwarded_for、$request_time、$upstream_response_time若不用于分析,可删减 - 避免记录静态资源(js/css/img等):用
map指令过滤,只对非静态路径记录 access 日志 - 按业务分离日志:把 API 接口、管理后台、前端页面分别写入不同文件,便于针对性清理或降级采样
按需启用条件日志与采样记录
高流量场景下,不是每条请求都值得全量记录。
- 用
if参数控制日志开关,例如只记录状态码 ≥400 的错误请求:access_log /var/log/nginx/error_only.log main if=$loggable;再配合
map $status $loggable { ~^[45] 1; default 0; } - 对正常访问做采样,比如每 100 条记 1 条:
map $remote_addr $sampled { default 0; "~^.*$" 1; } # 更实用的是基于 $request_id 或哈希取模(需自定义逻辑) - error.log 本身量小,但若频繁报 warn 级别,可调高
error_log级别为error或crit,减少冗余输出
验证与兜底建议
上线前务必实测,避免配置失误导致日志静默丢失。
- 用
logrotate -d -f /etc/logrotate.d/nginx先跑 debug 模式,确认路径、权限、信号发送无误 - 切割后立即检查:
•
ls -lt /var/log/nginx/看新文件是否生成且大小在增长•
tail -f /var/log/nginx/access.log确认实时写入未中断•
zcat /var/log/nginx/access.log-20260819.gz | head -5验证压缩内容完整 - 临时保留一周原始未压缩备份,确认无异常后再全面启用压缩
相关文章
- 小米ax6000刷梅林固件教程(小米ax6000如何刷梅林固件) 08-27
- 考霸刷题宝app年级修改做法 08-27
- traework官方入口下载 08-27
- traework网页版登录入口 08-27
- TRAE中文官网入口 08-27
- traework官方正版下载安卓 08-27