Nginx日志分析

1. 访问日志

由  ngx_http_log_module 模块负责  官方文档

 格式定义   log_format

规定一个日志格式 (默认配置)

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;

 配置位置在 http 标签内。log_format 为日志格式的参数关键字,不能改变。

main 是为日志格式指定的标签,记录日志时通过这个main标签选择指定的格式。其后所接的所有内容都是可以记录的日志信息。注意,所有的日志段以空格分隔,一行可以记录多个列

 

如果nginx位于负载均衡器,.squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址了。 

$remote_addr      获取反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址...

 

$http_x_forwarded_for        当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的http_x_forwarded_for设置

 

$remote_user      记录客户端用户名称, 一般默认为空

 

$request         记录请求的URL和HTTP协议

 

$body_bytes_sent    发送给客户端的字节数,不包括响应头的大小. 该变量与Apache模块mod_log_config里的“%B”参数兼容。

 

$bytes_sent         发送给客户端的总字节数。

 

$connection_requests   当前通过一个连接获得的请求数量。

 

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

 

$http_user_agent     记录客户端浏览器相关信息

 

$request_length       客户端请求的长度(包括请求行,请求头和请求正文)。

 

$request_time       请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

 

$time_local         记录访问时间

 

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

 

$request_body       记录POST数据

 

$request_length       客户端请求的长度

 

$upstream_status      upstream状态,成功是200

 

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

 

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

 

日志选项   access_log 

access_log  logs/access_www.log  main  gzip buffer=32k  flush=5s;

buffer=size为存放访问日志的缓冲区大小,flush=time为将缓冲区的日志刷到磁盘的时间,gzip[=level]表示压缩级别,[if=condition]表示其他条件。一般这些参数都无须配置,极端优化时才可能会考虑这些参数。

access_log中的off,表示不记录访问日志。

access_log 可在 http  server  location  中

 

 解压缩日志
   直接看压缩的日志  zcat access.log-20180101.gz |less
[root@smartclass-web-server nginx]# gunzip access.log-2010627.gz
[root@smartclass-web-server nginx]# awk '{print $NF}' /var/log/nginx/access.log-20190627|sort |uniq -c |sort -nr |head  -3                                                        
36043 "-"                                               
16117 "171.90.88.197"   
2730 "171.90.86.182"    
[root@smartclass-web-server nginx]# gzip access.log-2010627

 

日志分析 

统计访问ip前十

awk '{print $1}' access.log|sort |uniq -c |sort -nr |head

 

最近5分钟访问量前十

cat /var/log/nginx/access.log| awk 'BEGIN{ "date -d \"-5 minute\" +'%H:%M:%S'" | getline min5ago } { if (substr($4, 14) > min5ago) print $0 }'|awk '{print $NF}'|sort |uniq -c |sort -nr |head

 

 

 

cat /var/log/nginx/access.log| awk 'BEGIN{ "date -d \"-5 minute\" +'%H:%M:%S'" |getline min5ago } { if (substr($4, 14) > min5ago) print $0 }'|awk '{print $NF}'|sort|uniq -c |sort -nr |sed -n '1p'|awk '{if($2 == "\"-\""){print 99}else print$1}'

 

[root@smartclass-web-server ~]# awk '{print $NF}' /var/log/nginx/access.log-20190621|sort |uniq -c |sort -nr |sed -n '1p' 
34451 "-" [root@smartclass-web-server ~]# awk '{print $NF}' /var/log/nginx/access.log-20190621|sort |uniq -c |sort -nr |sed -n '1p'|awk '{if($2 == "\"-\""){print 100}else print$1}'
100 [root@smartclass-web-server ~]# awk '{print $NF}' /var/log/nginx/access.log-20190621|sort |uniq -c |sort -nr |sed -n '2p'|awk '{if($2 == "\"-\""){print 100}else print$1}'
9571

 

 

总请求数

less  access.log |wc -l

 

访问的独立IP总数

awk '{print $1}' access.log|sort |uniq |wc -l

 

每秒客户端请求数前十

awk '{print $6}' access.log|sort|uniq -c|sort -rn|head

 

访问最频繁的URL

awk '{print $7}' access.log|sort |uniq -c |sort -nr |head

 

响应大于5秒的URL

awk '{if ($7 > 5){print $6}}' access.log|sort|uniq -c|sort -rn |head

 

HTTP状态码(非200)统计

awk '{if ($11 != 200){print $11}}' access.log|sort|uniq -c|sort -rn|head -5

 

分析请求数大于50000的源IP

cat access.log|awk '{print $NF}'|sort |uniq -c |sort -nr|awk '{if ($1 >50000){print $2}}'

 

 

                                                                                                                                                                     

 

posted @ 2019-06-18 17:05  mingetty  阅读(233)  评论(0)    收藏  举报