网站数据是如何记录的

想要进行网站数据的分析,就先要知道网站数据是怎么来的。
 
用户在访问互联网的时候,会向服务器发送服务的请求。发送的请求,就被服务器以一条单独记录的方式记录在服务器的日志中,这就是最原始的网站数据日志。

 
先看apache的日志。
 
10.1.1.95 - user [18/Mar/2005:12:21:42 +0800] “GET /stats/awstats.pl?config=user HTTP/1.1″ 200 899 “http://10.1.1.1/pv/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)”
 
以上是一条apache的标准日志。
 

这行内容由9项构成,上面的例子中有两项空白,但整行内容仍旧分成了9项。

·      第一项信息是远程主机的地址。也就是访问者本机器的IP。服务器就是根据这个IP给访问者发回复的信息的。

·      第二项是空白,用一个”-”占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的 email地址或者其他唯一标识符。这个信息由identd返回,或者直接由浏览器返回。很早的时候,这个位置往往记录着浏览者的email地址。然而,由于有人用它来收集邮件地址和发送垃圾邮件,所以它未能保留多久,很久之前市场上几乎所有的浏览器就取消了这项功能。因此,到了今天,我们在日志记录的第二项看到email地址的机会已经微乎其微了。
·      第三项也是user。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息是不会空白的。但是,对于大多数不要求登录验证的网站来说,日志文件的大多数记录中这一项仍旧是空白的。
·      日志记录的第四项是请求的时间。这个信息用方括号包围,而且采用所谓的”公共日志格式”或”标准英文格式”。因此,上例日志记录表示请求的时间是2005年3月18日12:21:42。时间信息最后的”+0800″表示服务器所处时区位于世界标准时间之后的8小时,事实上国内服务器的时间都是+8000。
·      日志记录的第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器收到的是一个什么样的请求。该项信息的典型格式是”方法 资源 协议”。
在上例中,方法是GET,其他经常可能出现的方法还有POST和HEAD。此外还有不少可能出现的合法方法,但主要就是这三种。
资源是指浏览者向服务器请求的文档,或URL。在这个例子中,浏览者请求的是”/stats/awstats.pl?config=user “。
协议通常是HTTP,后面再加上版本号。
·      日志记录的第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。
·      日志记录的第七项表示发送给客户端的总字节数。它告诉我们传输是否被打断(即,该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
·      日志记录的第八项记录的是客户在提出请求时所在的目录或URL。这次的是”http://10.1.1.1/pv/”即10.1.1.1的pv目录下的首页。大多数情况下,首页会是在httpd.conf中DocumentRoot 指令后面规定的那些类型和名字的web文件。
·      日志记录的第九项表示客户端的详细信息。
 
上面是apache日志的记录的解释。
 
那么换成是IIS的日志呢! 记录也大同小异,只是由identd返回的登录身份验证,由于一直是空的,变成了发送或者接受的cookie内容,还有多了一些协议的子状态的内容。
 
从上面可以看到,我们所有分析的大部分数据都可以得到了,但是还是有一些问题,用户点击浏览器上的前进和后退按钮,客户端的浏览器是先读取缓存的,只有在缓存找不到的情况下,才重新向服务器请求,所以服务器是否能记下用户点击了后退或者前进之后的页面,完全看页面的写法和本机的状态。
 
采用原始日志进行分析的,一些分的很小的ifram等的页面会被分别请求,导致打开一个页面的请求数并不一定是1,这也是原始日志的一些弊端。
 
同时,这些记录主要是为了跟踪服务器状态和服务器安全的,还有一些数据没有被记录下来。
·      页面的之间的关系没有被记录下来,用户到底是从那个页面访问哪个页面的关系没有。
·      不能区分出一个用户来的某一次访问来,尤其是对不需要就能访问的网站。
·      不能记录页面的操作,尤其是点击的操作。
 
于是一些网站制作了自己的记录方法,一般是用JS或者一个一像素图片的请求去记录这些些信息。
 
这样有几个信息又被记录下来了,访问的来源页面refer,session的编号,cookie的编号,以及点击所产生的数据。并且这些数据可以被直接记录进数据库里面。
 
采用这样的方式,的确降低了分析的难度,并且增加了可分析的信息,但是确是牺牲了一定的准确性。可谓是有得有失。
 
·      首先是可记录的数据,由于是在客户端产生的,所有凡是出现服务器错误的情况,数据100%会丢失,服务器根本没有相应,怎么能出数据呢!并且,由于需要启动了js才能呢高进行数据的传送,所有数据也会有一定的丢失,一般,服务器状态不差的情况下,98%的准确率是可以被接受的。

·      来源页面的数据还是会丢失,由于页面间跳转和协议的关系,来源页面中有一定的量会出现丢失的问题, 比较麻烦的是https的页面由于是采用加密的协议进行传输的,无论采用什么方法,到http的页面上都会丢失。

·      受页面语言和协议的影响比较大,页面上的调用,ajax,js什么的都可能影响的记录的准确性。

·      最后是所有页面都要加上代码,别小看这点,如果是页面多的话,这点上还真是个问题,那个页面如果是忘记了,都会去整体的数据产生影响。

·      找不到机器的IP,这点上的IP和日志上IP有一些区别,在某些多机器共用IP的情况下,记录的不是用户最终机器上的IP而是互联网接入路由上的IP。

综合以上,网站分析上面,由于数据的取得方式和网站本身的程序方式的关系比较复杂,所以在分析网站数据的时候,需要比较谨慎,数据中的故障和陷阱随时都可能发生。

一种方式是在点击上埋点的方式,在点击的代码中加入一些代码,例如seed=“submit“ 这样的代码, 跟踪的JS在用户点击的时候向数据记录的服务器回发数据代码的记录。这样的埋点可以放在有跳转产生的链接上,也可以放在例如checkBOX这样的控件上。
 
这样操作的好处是:
        ·成本相对比较低,在整个页面的操作上,由于用户的点击一般不超过页面记录的两倍,所以这个数据的传输量并不是很大。
        · 可以记录用户绝大多数的操作记录,并且可以根据数据分析很多的数据问题。
        · 记录丢失量很小,由于是用户触发的操作,这个数据99.5%以上可以被记录下来。
这个方案存在的一些问题:
        · 没有埋点的空点击无法记录;
        · 所有监控的页面位置都需要进行埋点的处理,这对开发来说是一定的成本。
        · 只能知道用户点击行为,但是不知道这个行为是在那个位置发生。
 
另一种方式是采用点击记录的方式,通过页面上的触发器,鼠标每次点击的时候,向服务器请求一个信息。并且摆放在鼠标当前的坐标上。
 
这样操作的好处是:
        · 无需要对页面进行其他的处理,只要进行添加整体的代码就可以。
        ·  可以记录到详细的每一个点击的行为,只要用户是在这个页面上点击操作都可以记录,即使用户是在页面上空点。
这个方案存在的一些问题:
        · 页面的成本很高,需要监控页面上的所有点击行为,这对页面本身的压力就很大,甚至很可能因此而改变用户的行为。
        · 记录量增大,用户的行为产生的数据量远大于上一个方案中的数据。
        · 页面代码的要求增高,因为是根据坐标定位的,所以定位需要注意。
        · 数据处理极其复杂,受浏览器,屏幕分辨率,CSS代码等问题影响较大。这点的分析上,必须结合浏览器内核和分辨率进行分析。例如自适应的页面,你很可能发现用户在某个位置有空点击,而事实上,在他的分辨率下,按钮正好是在那个位置上。
 
在应用上,记录第一种方案的信息就已经够分析了。第二个方案主要是用在A/B的test上。
 
以一个例子说明各个方式之间的差别:
 
例如分析浏览器的刷新,点击浏览器的刷新会产生一个本页面到本页面的跳转,在页面上点击链接也可能产生一个本页面到本页面的跳转,以B页面命名刷新的页面。A页面上有到B页面的一个链接。
 
        ·      在服务器日志的记录上可能没办法区分出本页面到本页面的跳转,因为上面根本没有来源页面,连着的B页面的记录,可能是在A页面上点击B的链接,,第一次出现B页面,之后刷新B页面。也可能是两次的在A页面上点击B页面的链接。
        ·      但是使用了js或者图片的跟踪系统以后,通过来源页面就可以找到这类的数据,如果来源页面是B和当前页面也是B,那么可以证明是B页面到B页面自身的跳转。但是这个刷新是来自于页面的点击,还是浏览器上的刷新,就不得而知了。
        ·      靠着埋点的方式,如果是页面上的点击的话,则会在B页面到B页面,这条记录之前有一个页面的点击记录。如果存在点击记录,则证明用户是在B页面上点击了一个链接,如果是没有这个点击记录,则证明用户点击的是浏览器的刷新。
 
事实上,点击记录可以做到的事情更多,如果可以在埋点的命名上作一些规则的话,多窗口的操作等等信息,都可以根据埋点的信息分析到。
 
综合以上, 那么如果你想监控网站的安全,日志信息就足够了,如果是想监控网站访问的数据,只要监控的JS就可以了, 但是如果想知道用户的点击行为,就需要在可以点击的位置上埋点了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值