nginx日志配置

日志级别: debug > info > notice > warn > error > crit > alert > emerg

默认nginx定义了log_format名称为combined
在这里插入图片描述

我们也可以自定义日志格式

log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /spool/logs/nginx-access.log compression buffer=32k;

常用的日志变量解释

$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user记录客户端用户名称
$request记录请求的URL和HTTP协议(GET,POST,DEL,等)
$status记录请求状态
$body_bytes_sent发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent发送给客户端的总字节数。
$connection连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent记录客户端浏览器相关信息
$request_length请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local通用日志格式下的本地时间。

access_log指令指定日志文件存放路径
在nginx0.7.4之后的版本,access_log指令中的日志文件路径可以包含变量,如access_log /data1/logs/$server_name.log combined;

日志文件路径中含有变量的话,会有如下一些限制:
(1)权限问题,nginx进程设置的用户和组必须有对该路径创建文件的权限。
(2)缓冲将不会被使用
(3)对于每一条日志记录,日志文件都将先打开文件,再写入日志记录,然后马上关闭。性能较差,为了提高包含变量的日志文件存放路径的性能,需使用open_log_file_cache指令。

语法格式:   open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
                     open_log_file_cache off;
默认值:     open_log_file_cache off;
作用域:     http, server, location

默认值是off

max:设置缓存中的最大文件描述符数量,如果缓存被占满,采用LRU算法将描述符关闭。
inactive:设置存活时间,默认是10s
min_uses:设置在inactive时间段内,日志文件最少使用多少次后,该日志文件描述符记入缓存中,默认是1次
valid:设置检查频率,默认60s
off:禁用缓存

举例:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

nginx日志调试技巧

当你设置日志级别成 debug,如果你在调试一个在线的高流量网站的话,你的错误日志可能会记录每个请求的很多消息,这样会变得毫无意义,在events中配置如下内容,可以使nginx记录仅来自你的ip错误消息

events {
	debug_connection 192.168.86.134;
}

调试nginx rewrite规则

我们都知道,一旦rewrite规则写错,访问的时候只会看见一个404页面,为了调试,我们开启rewrite日志。

server {
	 error_log  /your/path/error.log;
	 rewrite_log on;
}

使用location记录指定URL的日志

在项目中,对日志分别记录,在调试的时候是非常有用的

server {
	error_log /var/logs/nginx/error.log;
	loction /huangbaokang/ {
		error_log /var/logs/huangbaokang.error.log debug;
	}
}

常用的格式:
main格式

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                       '$upstream_addr $upstream_response_time $request_time ';
access_log  logs/access.log  main;

json格式

log_format logstash_json '{"@timestamp":"$time_iso8601",'
       '"host": "$server_addr",'
       '"client": "$remote_addr",'
       '"size": $body_bytes_sent,'
       '"responsetime": $request_time,'
       '"domain": "$host",'
       '"url":"$request_uri",'
       '"referer": "$http_referer",'
       '"agent": "$http_user_agent",'
       '"status":"$status",'
       '"x_forwarded_for":"$http_x_forwarded_for"}';

压缩格式:

log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';

负载均衡格式:

log_format upstream_time '$remote_addr - $remote_user [$time_local] '
                             '"$request" $status $body_bytes_sent '
                             '"$http_referer" "$http_user_agent"'
                             'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"';

参考文档 https://www.cnblogs.com/biglittleant/p/8979856.html

你可能感兴趣的:(nginx)