[nginx] “nginx日志自动拆分“踩坑记

本文讲述了作者在部署过程中遇到的Nginx日志过大问题,通过使用nginx自带的access_log变量功能进行按日期拆分。文章详细描述了遇到的问题,如日志未输出和检查根目录存在的错误,以及最终在官方文档中找到的解决方法。
摘要由CSDN通过智能技术生成

部署过程

生产环境部署的nginx日志超大(几G以上),决定改变这一现状,利用nginx自带的功能进行日志自动拆分,也方便后续运维。我采用的是nginx access_log支持变量形式,把当前请求时间中的年、月、日提取出来,文件以年月日形式命名。

我的部署方式,在location里增加如下:

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
              set $year $1;
              set $month $2;
              set $day $3;
           }

           access_log /data/nginx/logs/${year}_${month}_${day}_access.log main;

我在nginx 1.22.0 1.22.1两版本测试均能生效,切割出现了2024_01_18_access.log;

排坑指南

1. 日志没有按照预想

当我发布生产环境时候,发现没有一行日志输出,测试环境、生产环境增加的就这几行配置完全一样。

出现问题第一怀疑是版本原因,于是我本地虚机安装并启动了1.22.0、1.22.1版本的nginx进行测试,完全没问题。

于是尝试从生产环境查看错误日志error.log,发现了一些猫腻。打印请求日志时检查/usr/local/nginx/html目录是否存在,失败就会跳过打印日志。

testing "/usr/local/nginx/html" existence failed (2: No such file or directory) while logging request

我重建了该目录,发现日志果然按照预想的拆分、输出了。

2. 本地环境复测

编译安装的nginx都有html目录,我把该目录删掉,尝试请求。日志果然没有拆分,并且同样出现了该错误。

3.问题说明

通过查阅资料,在该官方指导手册出找到了解释

Module ngx_http_log_module

该特性自0.7.6版本可以使用,并且打印日志时会检查root directory,检查失败就不会打印log。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值