1、  首先在nginx.conf开启日志记录(如果没设置,默认是开启的)

      #vim /etc/nginx/nginx.conf

    

      //首先在http{}内设置日志的格式 , log_format设置为一下代码
      log_format  main  '$proxy_add_x_forwarded_for - $remote_user [$time_local] "$request" '
                                 '$status $body_bytes_sent "$http_referer" '
                                 '"$http_user_agent" "$http_x_forwarded_for"';
      //如果你只有一个站点,直接在全局这里开启就好了
       access_log  /var/log/nginx/access.log  main;
 
      //如果有多个站则需要到location{}里面设置 , 多个location都需要设置 , 这里是同个站点,所以都是test.log
       location / {
                     …
          access_log /var/log/nginx/test.log main;
      }
 
       location ~ \.php$ {
            …
            access_log /var/log/nginx/test.log main;
        }


2、  设置好之后重启下重启下nginx服务 , 就可以看到nginx的日志生效了

      #service nginx reload


3、  编写一个shell切割脚本

     #vim /root/shell/nginx_log.sh  

      #!/bin/bash 

      #存放nginx log的文件路径 , 刚设置了/var/log./nignx/ 
      LOG_PATH='/var/log/nginx/' 

      #日志文件的名称 , 我们是test.log , 多个请添加进去就好了例如 LOGS=('test' 'test1' 'test2') 
      LOGS=('test') 

      #生成昨天的时间 
      YESTERDAY=`date -d "yesterday" +"%Y-%m-%d"` 

      #循环生成切割当天的日志 
      for LOG in ${LOGS[@]} ; 
      do 
           /bin/mv "$LOG_PATH$LOG.log" "$LOG_PATH$LOG-$YESTERDAY.log" 
      done 

      #重新Nginx , 让Nginx重新生成日志  
      /bin/kill -USR1 `cat /var/run/nginx/nginx.pid`

4、  shell脚本加入到计划任务中

     #chmod +x /root/shell/nginx_log.sh #crontab –e 0 0 * * * /root/shell/nginx_log.sh >> /var/log/nginx/nginx_cut.log 


5、  附注 日志格式解析

$request_time:整个请求的总时间。

$time_iso8601:访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。

$upstream_response_time:请求过程中,upstream的响应时间。

$request_method:客户端请求的动作,通常为GETPOST

$request_uri:是浏览器发过来的值。该值是rewrite后的值。例如做了internal redirects后。

$args:这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;

$query_string:与$args相同。

$proxy_add_x_forwarded_for:变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr用逗号分开,如果没有"X-Forwarded-For" 请求头,则$proxy_add_x_forwarded_for等于$remote_addr

$upstream_addrupstream的地址,即真正提供服务的主机地址。

$status:记录请求返回的http状态码,比如成功是200

$http_user_agent:客户端浏览器信息

$http_range

$sent_http_content_length:发送内容的长度

$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。

$http_referer:记录从哪个页面链接访问过来的。

$host:请求主机头字段,否则为服务器名称。

$http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

$http_user_agent:客户端浏览器信息

$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。

$ssl_protocolSSL协议版本,比如TLSv1

$ssl_cipher:交换数据中的算法,比如RC4-SHA

版权声明:未经博主允许不得转载。http://smister.com/post-16.html