1 日志管理

1.1 Nginx日志描述

通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的信息。

1.2 Nginx日志格式

打开nginx.conf配置文件:vim /usr/local/nginx/conf/nginx.conf

日志部分内容:
#access_log  logs/access.log  main;

日志生成的到Nginx根目录logs/access.log文件,默认使用“main”日志格式,也可以自定义格式。

默认“main”日志格式:
log_format main  '$remote_addr $http_x_forwarded_for [$time_local]'
' $host "$request_uri" $status'' "$http_referer" "$http_user_agent"';

参数明细表:

$remote_addr

客户端的ip地址(代理服务器,显示代理服务ip)

$remote_user

用于记录远程客户端的用户名称(一般为“-”)

$time_local

用于记录访问时间和时区

$request

用于记录请求的url以及请求方法

$status

响应状态码,例如:200成功、404页面找不到等。

$body_bytes_sent

给客户端发送的文件主体内容字节数

$http_user_agent

用户所使用的代理(一般为浏览器)

$http_x_forwarded_for

可以记录客户端IP,通过代理服务器来记录客户端的ip地址

$http_referer

可以记录用户是从哪个链接访问过来的

字段

说明

$remote_addr

客户端地址

$remote_user

客户端用户名称

$time_local

访问时间和时区

$request

请求的URI和HTTP协议

$http_host

请求地址,即浏览器中你输入的地址(IP或域名)

$status

HTTP请求状态

$upstream_status

upstream状态

$body_bytes_sent

发送给客户端文件内容大小

$http_referer

url跳转来源

$http_user_agent

用户终端浏览器等信息

$ssl_protocol

SSL协议版本

$ssl_cipher

交换数据中的算法

$upstream_addr

后台upstream的地址,即真正提供服务的主机地址

$request_time

整个请求的总时间

$upstream_response_time

请求过程中,upstream响应时间

nginx.conf使用配置方式:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for"'
 '$connection $upstream_addr '
 'upstream_response_time $upstream_response_time request_time $request_time '; $request_time和$upstream_response_time之间差别:
$request_time包含了用户数据接收时间,而真正程序的响应时间应该用$upstream_response_time
 所以如果用户网络较差,或者传递数据较大时,$request_time会比$upstream_response_time大很多 '[$time_local][$status][$remote_addr][$cookie_udsclientip][$request_time][$cookie_ztedpgssouser]'
                  '[$upstream_http_x_ausername][$cookie_udsversion][$request][$http_user_agent][$http_referer]'
                                           '[$http_cookie][$upstream_addr]';

1.3 Nginx自定义日志

打开nginx.conf配置文件去掉 log_format main 前面的#

在server 节点里面 添加日志

server{
access_log  /data/nginx/logs/aa.access.log  main;
/data/nginx/logs/aa.error.log  info;
    location {
   }
}

配置日志全路径。

1.4 重新读取加载Nginx配置文件:

执行命令:nginx-s reload  

日志就会输出到指定目录指定文件中

1.5 Nginx日志分隔

nginx的日志文件没有rotate功能。编写每天生成一个日志,我们可以写一个nginx日志切割脚本来自动切割日志文件。

第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,Linux是靠文件描述符而不是文件名定位文件。

第二步向nginx主进程发送USR1信号。nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。工作进程立刻打开新的日志文件并关闭重名名的日志文件。然后你就可以处理旧的日志文件了。[或者重启nginx服务]。

nginx日志按每分钟自动切割脚本如下:

新建shell脚本:vi  /usr/local/software/nginx/cut_nginx_log.sh
 #!/bin/bash
  #设置日志文件存放目录  LOG_HOME="/usr/local/software/nginx/logs/"
aa.access.log;
 log_file_commerror=aa.error.log;
pid=/usr/local/software/nginx/logs/nginx.pid
yestime=`date -d '-1 day' +%Y%m%d`
 #删除
#删除过去7天的
 find /data/nginx/logs/ -mtime +7 -name '*log' |xargs rm -rf #备分文件名称
mv ${LOG_HOME}/${log_file_commaccess}   ${LOG_HOME}/${yestime}.${log_file_commaccess}
mv ${LOG_HOME}/${log_file_commerror}   ${LOG_HOME}/${yestime}.${log_file_commerror}
        #向nginx主进程发信号重新打开日志 
pid`
配置crontab 定时,每天0点0分执行,按天保存
#设置日志文件存放目录crontab -e
0 0 * * *  sh /usr/local/software/nginx/cut_nginx_log.sh