网站流量分析(Web Analytics)的工具分为两大类, 一类是以Google Analytics为代表的在线统计系统, 英文称Page tagging。国内的武林榜,51yes,国外的Hitbox, Nielsen NetRatings, OneStat 都属于此类。这一类的重要特点是,分析时需要在里页面嵌入代码,这也是Page Tagging这个词的由来。 另一类就是日志分析,英文称Log Analysis, 特指web服务器的日志分析就是Web Log Analysis。 Nihuo Web Log Analyzer, awstats, analog 都属此类,这一类的特点是不用在页面嵌入代码,而是靠分析web 服务器产生的日志来生成统计报表。
经常有人问起这两种方法哪个更好,解释次数多了,自己都烦了,现在在这里统一回答一下。涉及到两类产品的比较时,就分别以Google Analytics( http://www.google.com/analytics/ )和Nihuo Web Log Analyzer( http://www.loganalyzer.net/ )为例了。
网站流量分析机制的差异
在线网站流量统计(Page tagging)的实现机制
Google Analytics需要在所有需要统计的页面中插入如下的Java Script统计代码,只有插入了代码的页面才能被统计,
这段Java script做的工作如下:
- 判断用户是不是第一次访问这个网站。它是通过cookie来判断, 如果特定Cookie不存在它就会认为是新用户,它会种一个用户标识的cookie,并在cookie中记录下用户第一次访问时的Refrrer,即来源网站。 如果是从搜索引擎过来的,它还会分离出用户搜索用的关键词并记录下来
- 判断用户是不是新的访问(New Visit),并获取当前浏览的页面URL,标题,Referrer(来源网址),客户端信息(如屏幕分辨率,语言,flash版本,是否支持java )
- 创建一个image对象,调用http://www.google-analytics.com/__utm.gif,把上面所有的信息作为图像文件的参数传回去。这个图像文件其实就是1个像素的gif文件,而且这个像素还是透明的,在页面中是看不到的。
其他的在线统计系统与Google Analytic有些细微的差别, 比如Nielsen NetRatings要求嵌入的javascript代码中还包含有如下代码:
这确保了在javascript被禁止的客户端,用户的访问也能被统计。当然,这种情况下能统计的信息很有限了。关于这些在线系统实现方法上的一些细微差别做过专门研究,说起来就很长了,哪天有时间会单独写个文章讲这个话题。
日志分析(Web Log Analysis)的实现机制
Web服务器在工作时会把所有用户发过来的请求和相应情况记录在文件里,这个文件就是日志文件。下面就是从http://www.loganalyzer.net/log-analysis-tutorial/log-file-sample-explain.html 找到的一行日志:
111.111.111.111 – – [08/Oct/2007:11:17:55 -0400] “GET /support.html HTTP/1.1” 200 10801 “http://www.google.com/search?q=log+analyzer&ie=utf-8&oe=utf-8 &aq=t&rls=org.mozilla:en-US:official&client=firefox-a” “Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7”
在这一行里包含了客户端IP(111.111.111.111),时间([08/Oct/2007:11:17:55 -0400] ),请求方法(Get),请求文件(/support.html ),HTTP协议版本(HTTP/1.1),返回状态码(200,表示成功),文件大小(10801 ),Referrer信息(”http://www.google.com/search?q=log+analyzer&ie=utf-8&oe=utf-8 &aq=t&rls=org.mozilla:en-US:official&client=firefox-a”),Agent信息”Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7″)。具体如何详细解读日志会另文阐述,在这里只是展示一下日志中都包含什么信息。
Nihuo Web Log Analyzer就是靠读入日志文件在本地进行统计计算而得出最终报表的。在大部分Web日志文件中,都是靠IP来判断访问者。Nihuo Web Log Analyzer也可以通过Cookie识别用户,但需要在日志中首先输出Cookie信息。
在线统计与日志分析的优缺点比较
上面费比较多的笔墨说两者的实现机制,就是为了大家能更好理解这一段,因为两种方法的优缺点都是由他们的实现机制决定的。
在线网站流量统计(Page tagging)的优点
- 通过Cookie识别访问者,比依靠IP识别要更准确。因为通过IP识别用户在遇到很多用户通过代理服务器(比如网吧)时就会不准确。而且当用户过几天后再访问时,通过Cookie能很好的识别这是已经来过的用户。而日志分析以IP识别用户时,因为用户每次上网拨号可能会被动态分配不同的IP,就会比较难准确判断返回用户。
- 能通过javascript搜集到一些通过日志不能搜集到的客户端信息,屏幕分辨率,语言,flash版本,是否支持java 等
- 使用方便,只要在所有页面插入了统计代码,以后每次直接看报表即可
- 可以做第三方统计, 比如你在blogspot.com开了一个blog,而blogspot是不可能把他们的web日志提供给你的,这时候没有别的选择,只能是用在线统计系统。
在线网站流量统计(Page tagging)的缺点
- 当客户端禁止Javascript或禁止Cookie时,都会影响统计结果,要么是完全统计不到,要么是出现错误的统计
- 存在一定误差,因为在线统计是通过javascript把客户端信息搜集起来再传回服务器实现统计,有时因为网络的延迟,会出现没有统计到的情况。而且和页面的载入速度也有关系,把代码加在页面代码顶部或尾部统计结果都是会有差异的。
- 不能统计用户对图像,视频,音频等文件的访问,因为这些文件不能插入统计代码
- 不能统计带宽信息
- 统计信息被第三方掌握,有安全上的危险
日志分析(Web Log Analysis)的优点
- 没有网络延迟的问题,统计准确
- 可以统计网络蜘蛛(spider ,bot)的访问,这对于做SEO比较重要
- 能够统计非页面文件,如图像,flash文件等等
- 客户端禁止了Javascript和Cookie也不影响统计的结果
- 能够采用丰富的过滤器(Filter)进行数据挖掘(Data mining),可以从多角度分析网站流量和用户的访问行为。一些在线统计也支持Filter, 比如Google Analytics,但是一旦应用过滤器最终数据就被改变,原始数据是找不回来的。
- 可以多域名的日志放在一起分析,在线统计系统对用户的标识是基于Cookie的,而Cookie是不能跨域名的,在这方面日志分析有天然的优势。
- 安全,分析数据是由你自己掌握的
日志分析(Web Log Analysis)的缺点
- 使用比较麻烦,每次要分析日志,而且有的还要配置web服务器以输出合适的日志。
- 用IP追踪用户不如Cookie准确。 不过这个问题可以通过在Web服务器上添加插件或模块来解决。Apache需要添加mod_usertrack模块,并在日志中输出cookie信息。IIS可以装ISAPI的插件(自己用VC6写了一个,可以从http://www.doyj.com/downloads/cookiefilter.dll 下载,不过这个当时只是写来测试的,出了什么问题可别怪我 )。也可通过javascript,php,asp等语言给客户端种植cookie,这讲起来就长了,大家可以google相关资料看看。
- 搜集的客户端信息不如Page Tagging丰富,象flash版本,是否安装java之类从日志是看不出来的
- 日志的存储管理也是挺头痛的事,尤其是当每天都产生几十G日志的时候。
经常有人问这两种方式哪个更好,应该选择哪种,这让我很难回答。 因为这两种方式都各有所长各有所短,只用一种方法很难准确完整的了解网站流量的的全貌,我自己做分析时两种工具都使用的,两个报告互相参考着看,也推荐大家采用这个方式。
注:这篇文章借鉴了一些 http://www.kichus.in/2006/09/23/log-file-analysis-page-tagging/ 的内容
受教了,学到不少东西哈
[quote comment=””]受教了,学到不少东西哈[/quote]
安抚
请问如何”解读日志”,不仅是网页日志的分析.当调出一段日志后, 可以有什么样的算法, 让众多的信息自己分类出来? 有这样的吗?新手,求解
请问有什么算法可以做到”解读日志”,就比如网页日志, 有算法可以直接生成源地址等这些信息吗? 新手,求解
没太理解你的问题,能描述更详细点么?
就是信息安全管理中心(SOC/Security Operation System),或者老外叫(SIEM/Security Informaiton and Event Management), 任何的操作都会有日志,日志的搜集是OK的,现在的问题就是这些搜集起来的日志是怎么被分析的,尤其是它里面的一些算法,比如国外某个公司的某个产品,它是怎么做的, 他里面用的什么算法之类,可否指点迷津!! 多谢多谢!!
你想分析日志的什么信息?说的国外某产品是指哪个?