Nginx访问⽇志(access_log)配置及信息详解
Nginx访问⽇志主要有两个参数控制:
log_format #⽤来定义记录⽇志的格式(可以定义多种⽇志格式,取不同名字即可)
access_log #⽤来指定⽇⾄⽂件的路径及使⽤的何种⽇志格式记录⽇志
#    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                      '$status $body_bytes_sent "$http_referer" '
#                      '"$http_user_agent" "$http_x_forwarded_for"';
access_log的默认值:
#access_log  logs/access.log  main;
log_format
log_format语法格式及参数语法说明如下:
log_format    <NAME>    <Strin g>;
关键字格式标签⽇志格式
关键字:其中关键字error_log不能改变
格式标签:格式标签是给⼀套⽇志格式设置⼀个独特的名字
⽇志格式:给⽇志设置格式
作⽤域    :    http
eg:
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;
log_format格式变量:
参数说明⽰例
$remote_addr客户端地址                                    211.28.65.253
$remote_user客户端⽤户名称--
$time_local访问时间和时区                                18/Jul/2012:17:00:01 +0800
$request请求的URI和HTTP协议"GET /article-10000.html HTTP/1.1"
$http_host请求地址,即浏览器中你输⼊的地址(IP或域名)    www.wang 192.168.100.100
$status                  HTTP请求状态                                  200
$upstream_status        upstream状态                                  200
$body_bytes_sent发送给客户端⽂件内容⼤⼩                        1547
$http_referer            url跳转来源                                  www.baidu/
$http_user_agent⽤户终端浏览器等信息                          "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0;.NET4.0C; $ssl_protocol            SSL协议版本                                  TLSv1
$ssl_cipher交换数据中的算法                              RC4-SHA
$upstream_addr后台upstream的地址,即真正提供服务的主机地址    10.10.10.100:80
$request_time整个请求的总时间                              0.205
$upstream_response_time请求过程中,upstream响应时间                    0.002
access_log
语法格式及参数语法说明如下:
access_log    <FILE>    <NAME>;
关键字⽇志⽂件格式标签
关键字:其中关键字error_log不能改变
⽇志⽂件:可以指定任意存放⽇志的⽬录
格式标签:给⽇志⽂件套⽤指定的⽇志格式
其他语法:
access_log    off;#关闭access_log,即不记录访问⽇志
access_log path ;
access_log path format gzip[=level];
access_log syslog:server=address[,parameter=value];
说明:
buffer=size  #为存放访问⽇志的缓冲区⼤⼩
flush=time  #为缓冲区的⽇志刷到磁盘的时间
gzip[=level]#表⽰压缩级别
#表⽰其他条件
作⽤域(参数的标签段位置)  : http, server, location,if in location, limit_except
eg:
access_log /spool/logs/nginx-access.log compression buffer=32k;
open_log_file_cache
使⽤open_log_file_cache来设置⽇志⽂件缓存(默认是off)。
max:设置缓存中的最⼤⽂件描述符数量,如果缓存被占满,采⽤LRU算法将描述符关闭。
inactive:设置存活时间,默认是10s
min_uses:设置在inactive时间段内,⽇志⽂件最少使⽤多少次后,该⽇志⽂件描述符记⼊缓存中,默认是1次
valid:设置检查频率,默认60s
off:禁⽤缓存
语法格式:  open_log_file_cache max=N ;
open_log_file_cache off;
默认值:    open_log_file_cache off;
作⽤域:    http, server, location
eg:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
nginx⽇志调试技巧
设置 Nginx 仅记录来⾃于你的 IP 的错误
当你设置⽇志级别成 debug,如果你在调试⼀个在线的⾼流量⽹站的话,你的错误⽇志可能会记录每个请求的很多消息,这样会变得毫⽆意义。
nginx和apache区别
在events{…}中配置如下内容,可以使 Nginx 记录仅仅来⾃于你的 IP 的错误⽇志。
events {
debug_connection 1.2.3.4;
}
调试 nginx rewrite 规则
调试rewrite规则时,如果规则写错只会看见⼀个404页⾯,可以在配置⽂件中开启nginx rewrite⽇志,进⾏调试。
server {
error_log    /var/logs/log;
rewrite_log on;
}
rewrite_log on; 开启后,它将发送所有的 rewrite 相关的⽇志信息到 error_log ⽂件中,使⽤ [notice] 级别。随后就可以在error_log 查看rewrite信息了。
使⽤location记录指定URL的⽇志
server {
error_log    /var/logs/log;
location /static/{
error_log /var/logs/nginx/static-error.log debug;
}
}
Nginx配置访问⽇志过程:
(1)创建log_format语句
worker_processes  1;
error_log logs/error.log error;
events {
worker_connections  1024;
}
http {
f;
include      pes;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access.log  main;
server {
listen      80;
server_name  localhost;
rewrite ^/.* www.wl permanent;
}
include vhost/*.conf;
}
(2)插⼊access_log语句
server {
access_log /data/log/www;
listen 80;
server_name abc www.wl;
location /{
root /data/www/www;
index index.html index.htm;
}
error_log    logs/error_www.wl.log    error;
access_log    logs/access_www.wl.log    main;
#新增内容↑
}
(3)重启服务
nginx -t
nginx -s reload
常⽤例⼦
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"}';
解释:
args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使⽤index指令进⾏修改。不包括协议和主机名,例如/foo/bar.html。
uri更改或重写URI。
也就是说:uri则是经过nginx处理请求后剔除参数的URL,所以会将汉字表现为union。
坑点:
使⽤request_uri代替,如⽆特殊业务需求,完全可以替换。
压缩格式
⽇志中增加了压缩的信息。
http {
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
gzip on ;
access_log /spool /logs /nginx -access .log compression ;
...
}
}
upstream 格式
增加upstream消耗的时间。
uri 请求中的当前URI (不带请求参数,参数位于request ri 这个变量等于包含⼀些客户端请求参数的原始URI ,它⽆法修改,请查看u request ri 是原始请求URL ,u uri 可以在nginx 对URL 进⾏更改或重写,但是⽤于⽇志输出可以使⽤
http {
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"';
server {
access_log /spool/logs/nginx-access.log upstream_time;
.
..
}
}
统计信息
统计status 出现的次数
awk '{print $9}' access.log |sort| uniq -c |sort-rn
36461 200
483 500
87 404
9 400
3 302
1 499
1 403
1 301
显⽰返回302状态码的URL。
awk '($9 ~ /302/)' access.log | awk '{print $7}'|sort| uniq -c |sort-rn
1 /wp-login.php
1 /wp-admin/plugins.php?action=activate&plugin=ewww-image-optimizer%2Fewww-image-optimizer.php&_wpnonce=cc4a379131
1 /wp-admin/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。