概述与背景
- Docker 容器化环境中 Nginx 日志管理的挑战
- Logrotate 的作用与必要性
- 结合场景的实际需求(如日志切割、压缩、归档)
Docker 环境下的 Nginx 日志配置
- Nginx 日志路径与 Docker 数据卷映射
volumes:- ./nginx/logs:/var/log/nginx
Logrotate 基础配置
在 /etc/logrotate.d/目录下 新增 nginx-web 这个文件可以随意命名
vim /etc/logrotate.d/nginx-web
- Logrotate 核心配置参数说明
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同理
/storage/docker/nginx/log/access.log {daily rotate 15 compress missingok notifempty create 777 root rootpostrotatedocker kill --signal=USR1 nginx-webendscript
}/storage/docker/nginx/log/error.log {daily rotate 60 compress missingok notifempty create 777 root rootpostrotatedocker kill --signal=USR1 nginx-webendscript
}
手动测试
logrotate -f /etc/logrotate.d/nginx-web
测试结果正常
查看access.log是否正常
确认docker kill --signal=USR1 nginx-web命令是否生效
测试结果正常!!
配置定时任务 crontab
crontab -e
添加 (@daily意思为每天0点执行)
@daily /usr/sbin/logrotate -f /etc/logrotate.d/nginx-web
结束!!!