网站数据的记录过程是如何完成的

想要进行网站数据的分析,就先要知道网站数据是怎么来的。

用户在访问互联网的时候,会向服务器发送服务的请求。发送的请求,就被服务器以一条单独记录的方式记录在服务器的日志中,这就是最原始的网站数据日志。

网站数据的记录过程是如何完成的_网络营销

先看apache的日志:

10.1.1.95 C 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就可以了,
但是如果想知道用户的点击行为,就需要在可以点击的位置上埋点了。

(文章转载于中国统计网)