Nginx日志管理与配置详解

发布时间:2019-07-30编辑:脚本学堂
本文详细介绍了nginx日志的管理与配置方法,学习下nginx日志的分割办法,有需要的朋友参考下。

本节主要内容:
nginx日志管理。

1、创建日志目录
nginx 的默认日志目录所在硬盘空间,有时不能满足日益增长的日志需求。
因此,可以根据硬盘的空间状况创建日志目录。
例如:

复制代码 代码示例:
mkdir /backup/nginx_logs

2、修改nginx日志配置文件
配置 nginx 的日志目录,指向(1)中创建的目录。

在配置文件中,添加内容:
 

复制代码 代码示例:
access_log /backup/nginx_logs/access.log combined;
 

根据实际情况写在 server 或 http 或 location 块 , 本例写在 server 块中。

上面的combined为 nginx 的默认日志格式,如果不这样,则需要重新定义。
本例中直接写了combined,这种格式 awstats 也认。

3、使用logrotate管理nginx日志,进行nginx日志分割操作。
logrotate 系统自带,并且会自动定时在凌晨 4:02 份启动
配置文件:
 

复制代码 代码示例:
/backup/nginx_logs {
daily
missingok
rotate 7
nocompress
prerotate
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=yoursite.com
endscript
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}

每次 rotate 之前,会先调用 awstats 产生统计数据, rotate 之后会给 nginx 发信号将日志写人新的空白日志文件
logrotate 会用到/etc/logrotate.conf配置文件和/etc/logrotate.d中所有的配置文件,所以无需改动 logrotate 配置,只需往/etc/logrotate.d加入上面的配置文件即可

编写配置文件时,请务必小心,否则 debug 很麻烦 , 比如把配置文件中的nocompress去掉,以为会默认使用/etc/logrotate.conf中的 compress, 实际上不是这样的。

如果/etc/logrotate.d中的配置文件错误, logrotate 不会用/etc/logrotate.conf替代,而且 /var/log/messages 和系统的发的 mail 中毫无出错信息,除非配置文件有明显的错误,才会 /var/log/messages 和系统的发的 mail 反应出来。

二,如何logrotate进行nginx日志切割,并指定文件名格式呢?

这里以我的一个案例来分析下。

创建一个logrotate的管理脚本,来分割nginx的日志,日志的名字希望是access20130423.log,即access%Y%m%d.log。
本来默认不设置的话,会生成access%Y%m%d,可单位的日志分析系统,必须要.log后缀。

以下shell/ target=_blank class=infotextkey>shell脚本有些问题,最终会生成这样一些文件:
 

复制代码 代码示例:
root@debian:/var/log/nginx# ls -lh
total 40M
-rw-r----- 1 www-data www-data 6.0M Apr 24 09:48 access.log
-rw-r----- 1 www-data www-data    0 Apr 24 06:26 access20130423.log
-rw-r--r-- 1 www-data www-data 1.6K Apr 23 11:10 access2013042320130424.log
-rw-r----- 1 www-data www-data  34M Apr 24 06:26 access20130424.log
-rw-r----- 1 www-data www-data  21K Apr 24 09:40 error.log
-rw-r--r-- 1 www-data www-data 138K Apr 24 06:24 error20130424.log
 

第三个文件是怎么回事,为什么会生成这样一个文件?

是不是 /var/log/nginx/*.log这里,应该明确的指定access.log?
 

复制代码 代码示例:
/var/log/nginx/*.log {
 daily
 dateext
 dateformat %Y%m%d
 extension .log
 create
 rotate 60
 #compress
 #delaycompress
 notifempty
 create 0640 www-data www-data
 sharedscripts
 prerotate
     if [ -d /etc/logrotate.d/httpd-prerotate ]; then
         run-parts /etc/logrotate.d/httpd-prerotate;
     fi
 endscript
 postrotate
     [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
 endscript
}

有高手路过,欢迎指点迷津。

您可能感兴趣的文章:
Nginx 日志分割的小脚本
分享:Logrotate分割nginx日志的脚本
nginx日志配置、Nginx日志分割
Nginx日志按天分割的方法分享(图文)
一个分割ngnix网站日志的Shell脚本
每天自动分割Nginx日志文件的Shell脚本