Nginx 日志滚动配置
在linux下配置日志滚动一般都用系统自带的logrotate,但是在之前的使用中发现,如果一个daemon只打开一个日志文件写日志,在logroate的配置文件中使用copytruncate,会有少部分日志丢失。在对日志要求不是特别严格的情况下这是可行的,但有时候这丢失的几行日志很重要,就需要一个比较严格的日志滚动方法。
通过搜索找到一种不错的方法,不用kill nginx,而是使用apache的rotatelogs
[1] 安装apache,rotatelogs是apache自带的工具,配置日志目录mkdir -p /opt/nginx_logs
cp rotatelogs /opt/nginx_logs/
chmod +x /opt/nginx_logs/rotatelogs
[2] 创建命名管道mkdir /opt/nginx_logs/abc_www/
mkfifo /opt/nginx_logs/abc_www/access_log
[3] 配置nginx.conf,将access_log 指向命名管道access_log /opt/nginx_logs/abc_www/access_log main;
[4] 创建切割日志目录mkdir /opt/nginx_logs/abc_www/log/
[5] 日志切割脚本rotate.sh,用rotatelogs实现
#!/bin/sh
baselogdir=/opt/nginx_logs/abc_www
rotatelogs=/opt/nginx_logs/rotatelogs
while [ 1 ]
do
echo `date +"%F %T"`" rotatelogs access start"
$rotatelogs $baselogdir/log/access_%Y%m%d-%H%M%S.log 5M 480 < $baselogdir/access_log
echo `date +"%F %T"`" rotatelogs access stop"
sleep 1;
done
按照5M的大小切割文件
在实际应用中这个值应该设置得比较大,如果需要一天一个日志文件的话5M 改为 86400 = 24 * 60 * 60,也就是一天的秒数
[6] 启动脚本run.sh#!/bin/sh
sh /opt/nginx_logs/abc_www/rotate.sh >> /opt/nginx_logs/abc_www/log/access-rotate.log 2>&1 &
[7] 测试,使用ab工具测试ab -n 100000 -c 1000 "http://localhost/"
##############################
-rw-r--r--. 1 root root 5245560 Apr 11 22:54 access_20150411-225410.log
-rw-r--r--. 1 root root 4251582 Apr 11 22:54 access_20150411-225427.log
-rw-r--r--. 1 root root 5245615 Apr 11 23:10 access_20150411-231035.log
-rw-r--r--. 1 root root 4254385 Apr 11 23:11 access_20150411-231048.log
nginx配置错误检查
另外在测试过程中发现error.log也在不断的增大,都是“Too many open files”错误
进行如下检查:
1. 检查nginx能打开的文件数
引用
ps ax | grep nginx
36756 ? Ss 0:00 nginx: master process nginx
36757 ? S 0:08 nginx: worker process
列出nginx的worker进程,然后 cat /proc/XXX/limits,其中XXX是worker进程的进程号,找到如下是行:
引用
Max open files 1024 4096 files
2. 检查系统打开文件数
引用
sysctl -a | grep file-max
fs.file-max = 98684
系统默认值,这个值比较大暂时不修改
通过检查发现系统能打开的文件数很大,但每个进程的文件数只有1024,这个可以用
ulimit -n来确认
错误修复
因此需要修改配置来实现nginx的文件打开数
1. 在nginx.conf中增加如下行
引用
worker_rlimit_nofile 15360;
2. 修改/etc/security/limits.conf,增加如下两行
引用
* soft nofile 10240
* hard nofile 15360
3. 重启nginx,需要将master也停掉,不能时候用
kill -HUP,然后再查看worker进程的Max open files
引用
Max open files 15360 15360 files
修改成功,在测试时没有再报“Too many open files”
参考:
nginx日志按照天进行分割
分享到:
相关推荐
Nginx 自己没有处理日志的滚动问题,本文笔者介绍如何滚动运行在 docker 中的 nginx 日志文件,感兴趣的朋友一起看看吧
* **日志滚动**:当rename Nginx日志文件,并reload Nginx的时候,需要在*读尽*旧的日志文件之后,从头开始处理新的日志文件 * **并发计算**:解析日志的时候,需要消耗大量的CPU资源,因此使用进程池,降低因复杂...
Nextcloud 的日志阅读器,具有清晰的异常显示、无限滚动等。 安装说明 默认安装 日志阅读器默认安装在 Nextcloud 的最新版本中,因此您无需执行任何其他操作即可使用该应用程序。 手动安装最新的 sable 版本 下载...
【server】优化系统配置页面的样式,在小屏幕设备上会出现多个竖方向上的滚动条,甚至有时候会遮住底部的操作按钮 【server】ssh 终端命令交互优化(改优化取消之前版本快捷解压功能,删除命令检查) 【server】优化...
**后端:** SpringBoot + nginx + docker + SpringSecurity + Swagger2 + MyBatisPlus + Mysql + Redis + elasticsearch + RabbitMQ + MaxWell + Websocket **其他:** 接入QQ,微博、微信第三方登录,接入腾讯云...
本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的...
本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的...
本章学习kubernetes的架构及工作流程,介绍如本章学习kubernetes的架构及工作流程,介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的服务。...
更新日志:V2.04071.更新申请收录提交失败的问题2.更新APP添加相册不适应的问题3.更新首页响应慢的问题4.更新灌水批量乱提交网址的问题V2.0406添加搜索自动索引百度热搜关键词添加首页tab标签模式加载方式切换(ajax...