Nginx日志降冷需依赖外部工具协同实现:先用logrotate按天切分并标记日期,再依热(0–7天)、温(8–90天)、冷(91天+)三级生命周期归档,最后结合脚本迁移或对象存储服务端策略自动转储/删除。

Nginx 日志本身不支持自动降冷(即从热存储→温存储→冷存储的分层归档),必须结合外部工具与生命周期策略协同实现。核心思路是:先按时间切分日志 → 再分级归档 → 最后按策略迁移或删除。整个过程不依赖 Nginx 内置功能,而是靠 Linux 日志管理机制 + 文件系统/对象存储能力配合完成。
按天切割并打上时间标记
这是降冷的前提。使用 logrotate 配置 dateext 和 dateformat -%Y%m%d,确保每个归档文件名自带日期,例如:access.log-20260903、error.log-20260902。
这样后续脚本或工具才能准确识别日志“年龄”,为分级提供依据。
定义三级生命周期阶段
可将日志生命周期划分为三个阶段,每阶段对应不同操作:
- 热期(0–7天):保留在本地高速磁盘(如 SSD),保留原始格式,便于快速 grep 或实时分析
-
温期(8–90天):压缩为
.gz或.zst,移至大容量 HDD 目录(如/data/logs/warm/),目录结构建议按年月组织:/data/logs/warm/2026/09/ -
冷期(91天以上):上传至对象存储(如阿里云 OSS、腾讯云 COS 或 MinIO),使用
ossutil/coscli工具自动同步;或打包为 tar.xz 后离线归档到 NAS/磁带
用 logrotate + 自定义脚本联动执行
在 logrotate 的 postrotate 块中不只发 USR1,还可触发生命周期流转逻辑:
- 新增一个
/usr/local/bin/nginx-log-lifecycle.sh脚本,接收轮转后的旧文件路径作为参数 - 脚本内判断文件修改时间(
stat -c %y),自动 move 到对应温/冷目录,或调用上传命令 - 配合
sharedscripts和prerotate可做预检(如检查磁盘剩余空间、OSS 连通性)
示例片段(放入 logrotate 配置):
postrotate /usr/local/bin/nginx-log-lifecycle.sh /home/wwwlogs/access.log-* endscript
对象存储端启用原生生命周期规则
若已上传至 OSS/COS,可直接在控制台或 CLI 设置服务端生命周期策略,无需额外运维:
- 匹配前缀
nginx-logs/2026/的文件,30天后转低频访问(IA)类型 - 匹配
nginx-logs/2025/的文件,90天后转归档(Archive)类型 - 匹配
nginx-logs/2024/的文件,180天后自动删除
这类策略由存储服务自动执行,零 CPU 消耗,且比本地脚本更可靠。


















