Docker + Nginx + Logrotate 日志管理与轮换实践

概述与背景
  • Docker 容器化环境中 Nginx 日志管理的挑战
  • Logrotate 的作用与必要性
  • 结合场景的实际需求(如日志切割、压缩、归档)

Docker 环境下的 Nginx 日志配置
  • Nginx 日志路径与 Docker 数据卷映射
dockerfile 复制代码
volumes:
  - ./nginx/logs:/var/log/nginx

Logrotate 基础配置

在 /etc/logrotate.d/目录下 新增 nginx-web 这个文件可以随意命名

shell 复制代码
vim /etc/logrotate.d/nginx-web
  • Logrotate 核心配置参数说明
conf 复制代码
    daily                  # 指定日志轮换周期为每天(logrotate 每天执行一次轮换)。
    rotate 15              # 保留最近的 15 个轮换日志文件,超过 15 个的将被删除。
    compress               # 压缩旧的日志文件,以节省存储空间(默认使用 gzip 压缩)。
    missingok              # 如果日志文件丢失,不会报错。即使日志文件不存在,也不会阻止日志轮换。
    notifempty             # 如果日志文件为空,则不进行轮换。
    create 777 root root   # 创建新的日志文件时,设置权限为 777,并且设置拥有者为 root,用户组为 root。
    postrotate             # 在日志文件轮换之后执行的脚本。可以用来发送信号给服务来让其重新打开新的日志文件。
    docker kill --signal=USR1 nginx-web  # 向 nginx-web 的 Docker 容器发送 USR1 信号,让NGINX 重新打开日志文件。   
    endscript              # 结束 postrotate 脚本的定义。
}
nginx-web配置文件

/storage/docker/nginx/log/access.log 这个目录不用多介绍 nginx的日志文件全路径 error.log同理

conf 复制代码
/storage/docker/nginx/log/access.log {
    daily                  
    rotate 15               
    compress              
    missingok             
    notifempty            
    create 777 root root
    postrotate
        docker kill --signal=USR1 nginx-web
    endscript
}

/storage/docker/nginx/log/error.log {
    daily                  
    rotate 60               
    compress              
    missingok             
    notifempty            
    create 777 root root
    postrotate
        docker kill --signal=USR1 nginx-web
    endscript
} 
手动测试
conf 复制代码
logrotate -f /etc/logrotate.d/nginx-web

测试结果正常

查看access.log是否正常

确认docker kill --signal=USR1 nginx-web命令是否生效

测试结果正常!!

配置定时任务 crontab
shell 复制代码
 crontab -e

添加 (@daily意思为每天0点执行)

复制代码
@daily /usr/sbin/logrotate -f /etc/logrotate.d/nginx-web

结束!!!

相关推荐
Q26433650233 分钟前
【有源码】基于SpringBoot+Vue的博物馆展览与服务一体化平台-java博物馆数字化展品展示与交互平台设计
java·vue.js·spring boot·spring·毕业设计·javaweb·课程设计
guo_wen_qiang8 分钟前
项目使用sentinel遇到的问题
java·sentinel
CarIise13 分钟前
IDEA与Maven基础课堂笔记
java·intellij-idea·caffe
“AI国潮设计-小江”16 分钟前
《Python+SDXL实战:用ControlNet批量生成“英歌舞草莓蛋糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
小溪学编程19 分钟前
C语言篇:枚举类型
java·c语言·前端
为啥全要学19 分钟前
大模型流式输出过滤敏感词
开发语言·python
小溪学编程21 分钟前
C语言篇:语言结构
c语言·开发语言·算法
老王爱玩车22 分钟前
字符串和字符串函数
c语言·开发语言·数据结构·学习
云和数据.ChenGuang28 分钟前
JAVAEE AI工程师路线图
java·人工智能·java-ee·fastapi·springai·langchain4j
2601_9628857228 分钟前
如何用 Python 统计 A 股连续涨停(几连板)?
java·linux·python