Nginx 日志滚动

标签: nginx 日志 | 发表时间:2015-04-14 16:55 | 作者:jack_boy
出处:http://www.iteye.com
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日志按照天进行分割

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [nginx 日志] 推荐:

nginx日志切割

- - haohtml's blog
nginx的日志文件没有rotate功能. 如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件. 第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志. 在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件.

Nginx 日志滚动

- - Linux - 操作系统 - ITeye博客
Nginx 日志滚动配置. 在linux下配置日志滚动一般都用系统自带的logrotate,但是在之前的使用中发现,如果一个daemon只打开一个日志文件写日志,在logroate的配置文件中使用copytruncate,会有少部分日志丢失. 在对日志要求不是特别严格的情况下这是可行的,但有时候这丢失的几行日志很重要,就需要一个比较严格的日志滚动方法.

nginx cronolog日志分割

- 伟伟 - 高进波博客 - 零起点一步配置你的linux服务器,linux博客,linux教程,web架构 [expanded by feedex.net]
八月 3rd, 2011 Posted in Nginx | 阅读次数: 8 次. nginx cronolog日志分割配置文档,根据下面方法,每小时分割一次NGINX访问日志. cronolog必须在nginx启动前启动,如果是ubuntu,可以将cronolog配置那行写到/etc/init.d/nginx start函数那.

nginx 日志文件切割

- - 企业架构 - ITeye博客
转载: http://www.cnblogs.com/benio/archive/2010/10/13/1849935.html. 偶然发现access.log有21G大,所以将其切割. Nginx 是一个非常轻量的 Web 服务器,体积小、性能高、速度快等诸多优点. 但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量非常大,不便于管理.

goaccess分析nginx日志

- - C1G军火库
GoAcces是一款实时日志分析工具. 目前,我们可以通过这款软件查看的统计信息有:. 静态web请求,如图片、样式表、脚本等. 支持超大日志(分析速度很快). GoAccess的基本语法如下:. -b – 开启流量统计,如果希望加快分析速度不建议使用该参数. -s – 开启HTTP响应代码统计. -a – 开启用户代理统计.

shell脚本分析nginx日志

- - 互联网 - ITeye博客
以下脚本都是基于上面日志格式的,如果你的日志格式不同需要调整awk后面的参数. 分析日志中的UserAgent. 上面的脚本将分析出日志文件中最多的20个UserAgent. 分析日志中那些IP访问最多. 分析日志中那些Url请求访问次数最多. 已有 0 人发表留言,猛击->> 这里<<-参与讨论.

shell 分析nginx日志 - 简书

- -
通过日志查看当天访问页面排前10的. 通过日志查看当天ip连接数,统计ip地址的总连接数. 通过日志查看当天访问次数最多的10个IP ,只需要在上一个命令后加上head命令. 通过日志查看当天指定ip访问次数过的url和访问次数. 通过日志查看当天访问次数最多的时间段.

Nginx日志分析常用脚本 |

- -
IP相关统计 统计IP访问量(独立ip访问数量). 查看某一时间段的IP访问量(4-5点). 查看访问最频繁的前100个IP. 查询某个IP的详细访问情况,按访问频率排序. 页面访问统计 查看访问最频的页面(TOP100). 查看访问最频的页面([排除php页面】(TOP100). 查看页面访问次数超过100次的页面.

如何挖掘Nginx日志中隐藏的金矿?

- - 运维派
对很多开发运维人员来说,Nginx日志文件在被删除前可能都不会看上一眼. 但实际上,Nginx隐藏了相当丰富的信息,或许其中便蕴含着未知的金矿等你挖掘. Nginx(读作Engine-X)是现在最流行的负载均衡和反向代理服务器之一. 如果你是一名中小微型网站的开发运维人员,很可能像我们一样,仅Nginx每天就会产生上百M甚至数以十G的日志文件.

Nginx日志实时监控、排查整理工具 - ngxtop

- - VPS侦探
要实时查看日志文件变动我们首先想到的应该是tail -f /path/to/log,但是这样看网站的访问日志是相当崩溃的,好一点可以写个脚本进行筛选,但是大部分人还是不擅长的,今天 VPS侦探就推荐给大家一个Nginx日志工具: ngxtop. 说起top工具有很多如: iftop、htop、ntop等,今天说的ngxtop功能也毫不逊色,不仅能实时监控Nginx日志的访问还可以对以前的日志进行排查整理.