数据收集---web访问日志收集与统计

本文转载自 http://blog.csdn.net/hugolyl/article/details/50404478
- 话说web访问日志,很多同学对百度统计,谷歌统计(google analytics)很熟悉,就是加点js代码埋点,然后很方便可以从百度等获得网站的访问情况统计。这种方式的确是很方便,自己可以不用管日志的数据,对系统的影响也很小,还可以增加网站排名(?),哈哈,总之,是很方便。如果想了解其工作原理?如果想自己来收集保存这个数据呢?我们一起来看看这个过程吧,做一个自己的统计工具。下面我们来说说整个步骤:

  1. 我有一个网站页面test.html,添加埋点。
<html lang="en">
 <head>
  <title>Documenttitle>
 head>
 <body>

       <p>这里有很多东西,很多好看的yellow的图片p> 

  <script type="text/javascript">
       var _maq = _maq || [];
      _maq.push(['_setAccount', 'testname']);
   (function() {
       var ma = document.createElement('script'); ma.type = 'text/javascript'; ma.async = true;
      ma.src = ('https:' == document.location.protocol ? 'https://localhost:8080' : 'http://localhost:8080') + '/ma.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ma, s);

   })();
   script>
 body>
html>
  1. 这个页面一被浏览器运行,很明显浏览器会触发js脚本,去异步加载访问http://localhost:8080/ma.js。这个就是我们的统计脚本,这个是关键核心哦!

这个脚本运行在tomcat中,我测试用的。ma.js样子是这样的:

(function () {
    var params = {};
    //Document对象数据
    if(document) {
        params.domain = document.domain || ''; 
        params.url = document.URL || ''; 
        params.title = document.title || ''; 
        params.referrer = document.referrer || ''; 
    }   
    //Window对象数据
    if(window && window.screen) {
        params.sh = window.screen.height || 0;
        params.sw = window.screen.width || 0;
        params.cd = window.screen.colorDepth || 0;
    }   
    //navigator对象数据
    if(navigator) {
        params.lang = navigator.language || ''; 
params.apn = navigator.appName || '';
        params.apv = navigator.appVersion || '';
        params.apc = navigator.appCodeName || '';
        params.ua = navigator.userAgent || '';
    }   
    //解析_maq配置
    if(_maq) {
        for(var i in _maq) {
            switch(_maq[i][0]) {
                case '_setAccount':
                    params.account = _maq[i][1];
                    break;
                default:
                    break;
            }   
        }   
    }   
    //拼接参数串
    var args = ''; 
    for(var i in params) {
        if(args != '') {
            args += '&';
        }   
        args += i + '=' + encodeURIComponent(params[i]);
    }   

    //通过Image对象请求后端脚本
    var img = new Image(1, 1); 
    img.src = 'http://localhost:8080/1.gif?' + args;

})();

这里面也很好理解,通过js获得大堆数据,包括自定义的参数,然后拼接乘参数串,加到一个gif图片后面作为参数,可怜的gif文件其实什么也没有,就是用一个1*1的空白图片。访问了我们统计放在的图片,我的服务器当然会记录下来这个过程,因为的的tomcat开启了访问日志记录。

conf/server.xml打开注释掉的

"org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

这样我们就可以到日志记录文件里面去找结果了:

0:0:0:0:0:0:0:1 - - [11/Dec/2015:10:58:25 +0800] "GET /1.gif?domain=&url=file%3A%2F%2F%2FD%3A%2Ftmp%2Ftest.html&title=Document&referrer=&sh=768&sw=1366&cd=24&lang=zh-CN&apn=Netscape&apv=5.0%20(Windows)&apc=Mozilla&ua=Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A42.0)%20Gecko%2F20100101%20Firefox%2F42.0&account=testname HTTP/1.1" 200 808
0:0:0:0:0:0:0:1 - - [11/Dec/2015:11:00:06 +0800] "GET /ma.js HTTP/1.1" 304 -
0:0:0:0:0:0:0:1 - - [11/Dec/2015:11:00:06 +0800] "GET /1.gif?domain=&url=file%3A%2F%2F%2FD%3A%2Ftmp%2Ftest.html&title=Document&referrer=&sh=768&sw=1366&cd=24&lang=zh-CN&apn=Netscape&apv=5.0%20(Windows)&apc=Mozilla&ua=Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20WOW64%3B%20rv%3A42.0)%20Gecko%2F20100101%20Firefox%2F42.0&account=testname HTTP/1.1" 200 808

果然看到了谁从哪里通过什么设备在什么时候访问了test.html,这就达到了我们要记录的目的!!!

  • 想通过图表来做个统计,按时间按设备等等方式来统计,想百度Google统计一样。这个好办,把日志文件抽取出来,写到数据库,然后写SQL来统计,剩下的你懂的,有了数据都好办了。

这个统计还可以用在其他的地方,比如推荐引擎
这个就简单说到这了,下次来个kafka、flume之类的来处理日志

你可能感兴趣的:(PHP,web)