`
jack_boy
  • 浏览: 134842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nginx 日志滚动

阅读更多
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日志按照天进行分割
分享到:
评论

相关推荐

    滚动 docker 中的 nginx 日志思路详解

    Nginx 自己没有处理日志的滚动问题,本文笔者介绍如何滚动运行在 docker 中的 nginx 日志文件,感兴趣的朋友一起看看吧

    一个基于Python和Flume的日志收集和解析系统+源代码+文档说明

    * **日志滚动**:当rename Nginx日志文件,并reload Nginx的时候,需要在*读尽*旧的日志文件之后,从头开始处理新的日志文件 * **并发计算**:解析日志的时候,需要消耗大量的CPU资源,因此使用进程池,降低因复杂...

    logreader::scroll: Nextcloud 的日志阅读器

    Nextcloud 的日志阅读器,具有清晰的异常显示、无限滚动等。 安装说明 默认安装 日志阅读器默认安装在 Nextcloud 的最新版本中,因此您无需执行任何其他操作即可使用该应用程序。 手动安装最新的 sable 版本 下载...

    Jpom项目监控软件-其他

    【server】优化系统配置页面的样式,在小屏幕设备上会出现多个竖方向上的滚动条,甚至有时候会遮住底部的操作按钮 【server】ssh 终端命令交互优化(改优化取消之前版本快捷解压功能,删除命令检查) 【server】优化...

    基于Springboot + Vue 开发的前后端分离博客(PC端自适应+移动端微信小程序+移动端App)+源代码+文档说明

    **后端:** SpringBoot + nginx + docker + SpringSecurity + Swagger2 + MyBatisPlus + Mysql + Redis + elasticsearch + RabbitMQ + MaxWell + Websocket **其他:** 接入QQ,微博、微信第三方登录,接入腾讯云...

    Kubernetes/K8S企业容器云平台入门与进阶实战

    本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的...

    搞定K8s企业级DevOps实践

    本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的...

    5小时学会kubernetes架构

    本章学习kubernetes的架构及工作流程,介绍如本章学习kubernetes的架构及工作流程,介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的服务。...

    Too Naughty网址导航主题-PHP

    更新日志:V2.04071.更新申请收录提交失败的问题2.更新APP添加相册不适应的问题3.更新首页响应慢的问题4.更新灌水批量乱提交网址的问题V2.0406添加搜索自动索引百度热搜关键词添加首页tab标签模式加载方式切换(ajax...

Global site tag (gtag.js) - Google Analytics