zoukankan      html  css  js  c++  java
  • 通过Nginx统计网站的PV、UV、IP

    转载:通过Nginx统计网站的PV、UV、IP

    概念

    UV:独立访客;以cookie为依据,假设一台电脑装有3个不同的浏览器,分别打开同一个页面,将会产生3个UV。
    PV:访问量;页面每访问或刷新一次,将会产生一个PV。
    IP:独立IP地址;以公网IP为依据,每个独立IP访问该页面,将会产生一个IP。

    nginx配置

    在vhost的conf文件中配置以下信息,请将此conf文件的权限设为777,否则无法自动生成日志文件。

    #日志格式化
    log_format tongji '$remote_addr - [$time_iso8601]  "$request" '
                            ' - $status "User_Cookie:$guid" ';
    
    server {
        listen      80;
        server_name xxx.com;
        index index.html index.htm index.php;
        root /alidata/www/tongji;
        #将cookie中key为guid,value为字母、数字部分保存为guid
        if ( $http_cookie ~* "guid=([a-zA-Z0-9]*)"){
            set $guid $1;
        }
        if ($time_iso8601 ~ "(d{4}-d{2}-d{2})") {
            set $date $1;
        }
        #访问日志引用“tongji”的格式化,并按照日期分割保存。
        access_log /alidata/www/nginx_log/access_$date.log tongji;
        location ~* ^(.*)$ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 8m;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    js文件

    在需要统计uv的页面引入以下js文件,生成一个当天过期的cookie。

    var cookie = {
        //当天剩下的毫秒数
        leftTime: function() {
            var curTamp = new Date().getTime();
            //当日凌晨的时间戳,减去一毫秒是为了防止后续得到的时间不会达到00:00:00的状态
            var curWeeHours = new Date(curDate.toLocaleDateString()).getTime() - 1;
            var passedTamp = curTamp - curWeeHours;
            var leftTamp = 24 * 60 * 60 * 1000 - passedTamp;
            return leftTamp;
        },
        //n:键名,v:键值,exp:过期时间(ms)
        setCookie: function(n, v, exp) {
            var date = new Date()
            date.setTime(date.getTime() + exp);
            document.cookie = n + "=" + escape(v) +
                ((exp == null) ? "" : ";expires=" + date.toGMTString())
        },
        //n为想要取到的键值的键名
        getCookie: function(n) {
            var reg = /s/g;
            var result = document.cookie.replace(reg, "");
            var resultArr = result.split(";");
            for (var i = 0; i < resultArr.length; i++) {
                var nameArr = resultArr[i].split("=");
                if (nameArr[0] == n) {
                    return nameArr[1];
                }
            }
        }
    };
    
    //生成随机id
    var guid = function() {
        function S4() {
            return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
        }
        return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4());
    };
    //如果guid不存在,则生成guid
    console.log(cookie.leftTime() / 1000 / 60);
    !cookie.getCookie('guid') && cookie.setCookie('guid', guid(), cookie.leftTime());
    document.write(document.cookie);

    日志文件

    内容如下:

    61.141.xxx.xxx - [2019-05-16T15:18:34+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
    61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
    61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
    61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
    61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 
    61.141.xxx.xxx - [2019-05-16T15:18:35+08:00]  "GET /ttt.html HTTP/1.1"  - 304 "User_Cookie:032284f362a63e3d375f8176aad4e0d7" 

    日志分析

    命令:

    //统计IP
    awk '{print $1}' xxx/access.log(你的日志文件路径) | sort -r |uniq -c | wc -l
    //统计PV
    awk '{print $6}' xxx/access.log(你的日志文件路径) | wc -l
    //统计UV
    awk '{print $10}' xxx/access.log(你的日志文件路径) | sort -r |uniq -c |wc -l
    
    
  • 相关阅读:
    Hadoop 学习笔记 (十) hadoop2.2.0 生产环境部署 HDFS HA Federation 含Yarn部署
    hadoop 2.x 安装包目录结构分析
    词聚类
    Hadoop 学习笔记 (十一) MapReduce 求平均成绩
    Hadoop 学习笔记 (十) MapReduce实现排序 全局变量
    Hadoop 学习笔记 (九) hadoop2.2.0 生产环境部署 HDFS HA部署方法
    Visual Studio Code 快捷键大全(Windows)
    Eclipse安装教程 ——史上最详细安装Java &Python教程说明
    jquery操作select(取值,设置选中)
    $.ajax 中的contentType
  • 原文地址:https://www.cnblogs.com/-wenli/p/11715843.html
Copyright © 2011-2022 走看看