nginx日志如果不切分,会导致access.log一直很大,如果开启了debug 输出request_body日志会刷的特别快,很可能很快达到几十个G,配置低的服务器可能磁盘就100%了,接口504 game over了,所以对于nginx的access和error日志都需要做每天的日志切分,对于历史日志做定期清理。
(1)在/etc/logrotate.d目录下增加nginx配置文件
cd /ec/logrotate.d
vim nginx
添加如下内容:
bash
#具体nginx日志路径依项目而定
/usr/local/nginx/nginx-1.16.1/logs/*.log {
daily # 轮转频率:每天
missingok # 如果日志不存在,不报错
rotate 14 # 保留14个旧日志文件
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(下一个周期压缩)
notifempty # 空日志不轮转
create 646 nginx adm # 创建新日志的权限和所有者
sharedscripts # 所有日志处理完再执行脚本
postrotate
nginx -s reload #重启nginx
endscript
}
/etc/logrotate.d/ 是 Linux 系统中管理日志轮转的核心目录。
-
位置 :
/etc/logrotate.d/是 logrotate 服务的配置目录 -
主配置 :
/etc/logrotate.conf是全局配置文件 -
子配置 :
/etc/logrotate.d/包含各个应用程序的独立配置文件 -
用途:自动管理日志文件,防止日志过大占满磁盘
1. 轮转频率
bash
daily # 每天轮转
weekly # 每周轮转
monthly # 每月轮转
size 100M # 大小达到100M时轮转
2. 保留策略
bash
rotate 7 # 保留7个旧日志文件
maxage 30 # 删除超过30天的日志
maxsize 100M # 单个日志最大100M
3. 压缩设置
bash
compress # 使用gzip压缩
nocompress # 不压缩
compresscmd /bin/bzip2 # 指定压缩工具
compressext .bz2 # 指定扩展名
delaycompress # 延迟一个周期压缩
4. 文件处理
bash
create 0640 user group # 创建新日志的权限
copytruncate # 复制后清空(不需要重启服务)
nocreate # 不创建新日志
dateext # 使用日期作为后缀
dateformat .%Y%m%d # 日期格式
5. 脚本钩子
bash
prerotate
# 轮转前执行的命令
endscript
postrotate
# 轮转后执行的命令(如重启服务)
endscript
firstaction
# 第一次轮转时执行
endscript
(2)添加定期清理日志的crontab定时任务
crontab -e 编辑定时任务,添加如下命令
bash
0 1 * * * /usr/bin/find /usr/local/nginx/nginx-1.16.1/logs/ -name "*.gz" -mtime +5 | xargs -i /usr/bin/rm -irf {}