概述與背景
- 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
結束!!!