nginx日志分析及其统计PV、UV、IP

一、nginx日志结构

nginx中access.log 的日志结构:
    $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.it300.com
    192.168.100.100
    $status HTTP请求状态 200
    $upstream_status upstream状态 200
    $body_bytes_sent 发送给客户端文件内容大小 1547
    $http_referer url跳转来源 https://www.baidu.com/
    $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

二、PV、UV、IP

PV(访问量):即Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。
UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。
IP(独立IP):即Internet Protocol,指独立IP数。00:00-24:00内相同IP地址之被计算一次。

nginx统计网站访问量:

根据访问ip统计UV
    awk '{print $1}'  access.log|sort | uniq -c |wc -l
根据访问url统计PV量:
    awk '{print $7}' access.log | wc -l    
查询访问最频繁的URL
    awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more
查询访问最频繁的IP
    awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more
查看并发连接数
    netstat -nat|grep ESTABLISHED|wc -l
查询传输时间超过3秒的页面:    
    cat access.log |awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20
统计某路由平均响应时间($upstream_response_time参数)    
    grep "/" access.log | awk '{print  $NF}' | grep -P '\d{3}?$' | awk '{sum += $0;}END {if(sum==0)print 0;else print sum/NR}'
获取每分钟的请求数量,输出到文件    
    cat access.log  | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}' > access.txt    

根据时间节点快速查询、截取日志:

日志截取,从总日志文件中截取昨天一整天的数据出来,并覆盖到新文件中:    
    cat  access.log | awk '$4 >="[14/Mar/2019:00:00:00" && $4 <="[14/Mar/2019:23:59:59"'  > 20190314-access.log
将某一时间段的nginx访问日志输出到文件中
    cat access.log | egrep "2020-11-04" > test.log             #打印一天的日志
    cat access.log | egrep "04/Nov/2020:10" > test.log        #打印一小时的日志
    sed -n '/04\/Nov\/2020:10/,/04\/Nov\/2020:12/p' access.log > test.log   #打印任意时间段的日志

使用的命令:

sort 排序
    sort 默认是升序,sort -r 降序
    sort -u 去除重复行

uniq 去重
     -i 忽略大小写字符
     -c 进行计数
     -u 只显示唯一的行

cut   从文件文件中截取
     -d 后接分割字符
     -f 依据-d的分隔符将信息分割成数段,-f 取出第几段
     -c 以字符的单位取出固定字符区间    
    
wc  统计文件里面有多少单词,多少行,多少字符
    -l  :仅列出行;
    -w  :仅列出多少字(英文单字);
    -m  :多少字符;

 

独处并不是一种逃离行为,它更像是一种回归,一种积极的情绪体验

 

上一篇:翻译11 Unity 透明渲染


下一篇:PV(访问量)、UV(独立访客)、IP(独立IP)