Nginx日志别再一年一个文件了,按天切分原来这么简单
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
Nginx默认把一年的日志全写进同一个access.log,时间一长文件越滚越大,想查某天的问题得翻海量数据,磁盘也悄悄被撑满。把日志改成按天切分,一天一个文件,查起来清爽、删起来方便、还能自动压缩。这篇讲三种按天保存的实现方式,从最简单的定时任务到官方推荐的做法,你按自己的情况挑一个。 为什么默认日志会越滚越大Nginx默认配置里就两行:access_log /var/log/nginx/access.log;和error_log。意思是所有访问日志都追加写进同一个文件,从你上线第一天写到今天,永远不切分。 带来的问题很直接:文件越来越大,几个G很常见;想查昨天下午的某个请求,得在几G文件里grep,慢还占内存;磁盘写满报No space left,网站直接挂。而且Nginx进程一直占着这个文件句柄,你直接rm删不掉空间,必须重启或清空。 按天切分就能解决这一切:每天零点,把当天日志写进一个带日期的文件,昨天的归档起来或压缩掉。下面三种方式,从简单到正式。 方式一:定时任务+重载,最简单不用装任何工具,就用系统的cron配合Nginx自身的重载信号。思路是每天凌晨把当前日志改名成带日期的,然后让Nginx重新打开新日志文件。 先写一个小脚本,比如建一个/opt/rotate_nginx_log.sh:
解释一下:第一行算出昨天的日期,第二行把今天的日志改名成带昨天日期的归档文件,第三行kill -USR1让Nginx重新打开access.log——这是Nginx专门用来"重新打开日志"的信号,不会中断请求。 然后加到cron里,每天零点跑一次: 这样每天就会多一个access.log20261102的归档文件,当天的都写进新的access.log。配合上一篇讲的按天数清理,磁盘就不会爆。 方式二:logrotate,官方推荐的省心方案如果你的系统里装了logrotate(绝大多数Linux发行版默认就有),用它更规范,能自动按天切分、自动压缩、自动清理,还不用自己写脚本。 在/etc/logrotate.d/下建一个文件,名字随意,比如nginx,写入:
关键几行的意思:daily是按天切分,rotate 30是保留最近30个(也就是30天),compress是旧日志自动gzip压缩,postrotate里的kill -USR1和方式一的信号一样,切完后让Nginx重开日志。 配好后,logrotate会每天自动执行,什么都不用管。它还能顺手把超期的旧日志删掉,比方式一更省心,也适合日志量大的机器。 有可能出现报错: nginx 没启动的时候,pid 文件不存在,后面 kill 命令执行失败,脚本返回非 0,logrotate 直接抛这个错误; 源码编译安装的 nginx,pid 文件不在 还有一种: 解决方法如下: 原方法: 更新后: 方式三:直接把日期写进日志文件名如果你想让Nginx自己就按天分文件,不用定时任务,可以在配置里用变量。Nginx支持$time_iso8601这类时间变量,配合字符串截取,可以拼出日期。 在nginx.conf的http块或server块里写:
这样每天零点后,第一个新请求来的时候,$logdate变成当天的日期,Nginx就自动写到access-2026-11-02.log这个文件,完全不用cron、不用脚本。 但这个方式有个小缺点:$logdate在if里用,性能上有一点点损耗,而且if在location上下文里有些坑。日志量特别大的生产环境,建议还是用方式二logrotate更稳妥。 配完记得验证,别看一眼就当好了不管用哪种方式,配完都要验证: 手动跑一次切分(logrotate方式用logrotate -f /etc/logrotate.d/nginx强制跑一次),然后去/var/log/nginx/看看是不是生成了带日期的归档文件、当前access.log是不是新建的。 再用curl访问一下你的网站,确认访问能正常写入新的access.log,页面没报错。最后看下磁盘,用df -h确认空间确实被释放了。 如果切分后访问日志没写进去,八成是kill -USR1没生效或pid路径不对,用ps aux|grep nginx确认主进程号,cat一下nginx.pid对不对。 写在最后Nginx按天存日志,本质就是一句话:让日志每天换个文件写。方式一适合想搞懂原理的人,方式二是生产环境的省心之选,方式三适合不想装东西的小规模场景。 配上日志按天切分,再搭配按天清理过期日志,你的磁盘使用率会稳定下来,查问题也能精准定位到某一天的文件。这一套配好,服务器运维里最磨人的"日志爆盘",就算彻底解决了。 阅读原文:点击这里 该文章在 2026/11/10 15:17:52 编辑过 |
关键字查询
相关文章
正在查询... |