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

来源:互联网 发布:农村淘宝服务站的补贴 编辑:程序博客网 时间:2024/05/16 12:49

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

  1. 我有一个网站页面test.html,添加埋点。
<html lang="en"> <head>  <title>Document</title> </head> <body>       <p>这里有很多东西,很多好看的yellow的图片</p> <!---下面的js就是埋点了,有木有似曾相识的赶脚!--->  <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打开注释掉的

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"               prefix="localhost_access_log." suffix=".txt"               pattern="%h %l %u %t &quot;%r&quot; %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 8080: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之类的来处理日志

原创粉丝点击