1.Nginx日志管理

1.日志简单介绍

  Nginx提供了日志记录的功能,日志文件在对我们管理网站十分有用,通过访问日志(access_log)我们可以获取请求来源、客户端信息、请求的资源等信息;通过错误日志(error_log)可以获取错误发生时间、错误信息等,方便我们及时定位和修复错误。看一下Nginx中日志相关的指令。

#设置访问日志:访问日志文件为nginx/logs/mysite.access.log,格式为main
  access_log  logs/mysite.access.log  main;
          位置 格式
#设置错误日志:错误日志文件为nginx/logs/mysite.error.log,记录级别为error   error_log logs/mysite.error.log error;
            位置        级别
#定义main格式的日志 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

  在Nginx日志中严重程度:debug<info<notice<warn<error<crit,一般记录warn/error级别;定义日志格式中,$开头的是Nginx中的变量,在前面已经总结过了,为了方便查看本篇底部也放了一份。记录网站的访问/错误日志,十分简单,只需要把access_log/error_log指令放在需要记录的server主机内即可。也可以把access_log/error_log指令放在http中用来记录全局日志。

  看一个简单的Nginx配置文件,为了方便演示,这里只配置了默认主机,并删去了Nginx中一些和日志不相关的配置:

worker_processes 2;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;#定义main格式的日志
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
  #默认主机
  server{
        listen 80;
        server_name localhost;
        location /{
                root html;
                index index.html;
         }
        #访问日志,名字问nginx/logs/mysite.access.log,格式为main格式
        access_log  logs/mysite.access.log  main;
        #错误日志,记录级别为error
        error_log logs/mysite.error.log error;
      }
}

  当我们输入虚拟机IP会访问到默认主机,这时在nginx/logs目录下自动生成访问日志mysite.access.log和错误日志mysite.error.log。内容如下:

mysite.access.log内容

 快速掌握Nginx(四) —— Nginx日志切片和常用配置总结

  访问日志的内容为main格式中定义的信息,某些信息不存在没有显示。我们也可以自定义访问日志的格式。

mysite.error.log内容

快速掌握Nginx(四) —— Nginx日志切片和常用配置总结

  可以看到错误原因是favicon.ico文件找不到,我们也可以知道错误发生的时间,请求,客户端和服务端IP等信息。

 2.日志切片

  上边我们已经知道怎么去设置访问日志和错误日志,但是这样设置有一个弊端:日志文件都放在同一个文件中,长时间运行后日志文件很大,可能达到几个G,甚至十几个G大小,查看起来很不方便。为了解决这个问题就需要进行日志切片,如每小时或者每天的日志放在一个单独的文件中。怎么实现呢?总体思路是:设置一个定时任务,每隔一段时间将日志文件剪切到一个特定的目录下。

  这里以访问日志切片为例,为了方便演示这里把每分钟的访问日志放在一个单独的文件中,首先,添加一个存放日志文件的目录,执行命令 mkdir /usr/local/nginx/logs/mysitelogs ,我们打算把mysite的所有访问日志都放在这个文件夹下。然后添加一个切割日志的脚本,执行命令 vim /usr/local/nginx/mysitelog.sh ,脚本内容如下:

#mysite.com虚拟主机的日志存放路径
LOGPATH=/usr/local/nginx/logs/mysite.access.log
#日志备份文件目录,mysite虚拟主机的备份日志放在logs下的单独目录下
BASEPATH=/usr/local/nginx/logs/mysitelogs
#一分钟记录一次 
bak=$BASEPATH/$(date -d today +%Y%m%d%H%M).mysite.access.log
#重名日志文件
mv $LOGPATH $bak
touch $LOGPATH
#向nginx主进程发送信号,重新写日志
/usr/local/nginx/sbin/nginx -s reopen

最后添加一个定时任务,执行命令 crontab -e ,编辑内容如下,表示每分钟执行一次mysitelog.sh脚本:

* * * * * sh /usr/local/nginx/mysitelog.sh

到这里日志切片就结束了,我们看一个日志文件, cd /usr/local/nginx/logs/mysitelogs 到日志文件夹下,看到日志文件为每分钟存储一次,前缀格式为yyyyMMddhhmm:

 快速掌握Nginx(四) —— Nginx日志切片和常用配置总结

补充:我们在实际使用时一般把一天的日志放在一个文件中(高并发量的除外),下边的脚本实现每天晚上11:30分存储一次日志文件:

#-------------------shell脚本   
#该虚拟主机的日志存放路径
LOGPATH=/usr/local/nginx/logs/mysite.access.log
#日志备份文件目录,mysite虚拟主机的备份日志放在logs下的单独目录下
BASEPATH=/usr/local/nginx/logs/mysitelogs
#一天记录一次,格式为20190326mysite.access.log
bak=$BASEPATH/$(date -d yesterday +%Y%m%d)mysite.access.log
#重名日志文件
echo $bak
mv $LOGPATH $bak
touch $LOGPATH
#向nginx主进程发送信号,重新打开日志
/usr/local/nginx/sbin/nginx -s reopen

#------------------定时任务
30 23 * * * sh /usr/local/nginx/mysitelog.sh
View Code

相关文章:

  • 2021-09-19
  • 2021-06-05
  • 2022-02-07
  • 2021-08-06
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-27
  • 2021-09-06
  • 2022-12-23
  • 2021-08-25
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案