网站日志统计案例分析与实现

1.概要

    到这一步,若是按照前面到文章一步走来,不出意外,我想hadoop平台环境应该搭建OK了。下面我以自己工作中实际的案例来梳理一下整个流程。同时参考一些其他的文章来分析,由于很多网站的日志KPI都大同小异,故有些指标直接在文中赘述了。

2.流程

  1. 背景
  2. 前言
  3. 目录
  4. 日志分析概述
  5. 需求分析
  6. 源码

2.1 背景

  从2011年开始,中国进入大数据时代如火如荼,以Hadoop为代表的套件,占据了大数据处理的广阔地盘。开源界及厂商,所有数据软件,纷纷
向Hadoop靠拢。Hadoop也从小规模的试点和使用,变成了大数据开发的标准。在Hadoop原有技术基础之上,出现了Hadoop家族产品,通过
大数据概念的不断创新,推进了Hadoop的发展速度。

  如今,Hadoop2.x的出现,使很多企业纷纷主动去接受Hadoop这个平台,因此,作为IT界的开发人员,了解并掌握Hadoop的技能,成为开发人员必备的一项技能。也是今后主流的一种趋势。

  注:Hadoop2.x的出现为何引起这么大大反响,这里不做赘述。

2.2 前言

  Web日志包含着网站最重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值等。一般中型的网站(10w的PV以上),每天会产生1G以上的Web日志文件。大型或超大型的网站,可能每小时就产生10G的数据量。

       对于日志的这种规模的数据,用Hadoop进行日志分析,是最合适不过了。

2.3 目录

  • Web日志分析概述
  • 需求分析:KPI指标设计
  • 算法模型:Hadoop并行算法
  • 架构设计:日志KPI系统架构
  • 项目构建:Maven构建Hadoop项目

2.4 Web日志分析概述

  Web日志由Web服务器产生,可能是Nginx,Apache,Tomcat等。从Web日志中,我们可以获取网站每类页面的PV值、独立
IP数;稍微复杂一些的,可以计算得出用户所检索的关键词排行榜、用户停留时间最高的页面等;更复杂的,构建广告点击模型、分析用户行为特征等等。

  Web日志中,每条日志通常代表着用户的一次访问行为,例如下面就是一条Nginx日志:

222.68.172.190 - - [18/Sep/2013:06:49:57 +0000] "GET /images/my.jpg HTTP/1.1" 200 19939  "http://www.angularjs.cn/A00n" "Mozilla/5.0 (Windows NT 6.1)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"

  我们可以从中获取8个指标:

  1. Remote_Addr:记录客户端的IP地址,222.68.172.190
  2. Remote_User:记录客户端用户名称,-
  3. Time_Local:记录访问时间与时区:[18/Sep/2013:06:49:57 +0000]
  4. Request:记录请求的URL和HTTP协议,"GET /images/my.jpg HTTP/1.1"
  5. Status:记录请求状态,成功是200,200
  6. Body_Bytes_Sent:记录发送给客户端文件主体内容大小,19939
  7. Http_Referer:用来记录从哪个页面链接访问过来的,http://www.angularjs.cn/A00n
  8. Http_User_Agent:记录客户端浏览器的相关信息,"Mozilla/5.0 (Windows NT 6.1)
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66
    Safari/537.36"

  注:要更多的信息,则需要其它手段去获取,通过javascript代码单独发送请求,使用cookies记录用户访问信息。利用这些日志信息,我们可以深入挖掘网站的秘密了。

  少量数据的情况:

  少量数据的情况(10M,100M,1G),在单机处理尚能接受的时候,我们可以直接利用各种Unix/Linux工具,awk、grep、
sort、join等都是日志分析的利器,再配合perl,python,正则表达式,基本就可以解决所有的问题。
例如,我们想从上面提到的Nginx日志中得到访问量最高前10个IP,实现很简单:

~ cat access.log.10 | awk '{a[$1]++} END {for(b in a) print b"\t"a[b]}' | sort -k2 -r | head -n 10

  结果如果下:

163.177.71.12   972
101.226.68.137  972
183.195.232.138 971
50.116.27.194   97
14.17.29.86     96
61.135.216.104  94
61.135.216.105  91
61.186.190.41   9
59.39.192.108   9
220.181.51.212  9

  数据海量的情况:

  当数据量每天以10G、100G增长的时候,单机处理能力已经不能满足需求。我们就需要增加系统的复杂性,用计算机集群,存储阵列来解决。在
Hadoop出现之前,海量数据存储和海量日志分析都是很困难的,只有少数公司,掌握着高效的并行计算,分布式计算,分布式存储的核心技术。
Hadoop的出现,大幅度的降低了海量数据处理的门槛,让小公司甚至是个人都能够处理海量数据。并且,Hadoop非常适用于日志分析系统。

2.5  KPI指标设计

  下面我们将从一个公司案例出发来全面的诠释,如何进行海量Web日志分析,提前KPI数据。

2.5.1  案例介绍 

  某电商网站,在线团购业务。每日PV数100w,独立IP数5w;用户通常在工作日上午10:00-12:00和下午15:00-18:00访
问量最大;日间主要是通过PC端浏览器访问,休息日及夜间通过移动设备访问最多。网站搜索流量占整个网站的80%,PC用户不足1%的用户会消费,移动用
户有5%会消费。

  通过简短的描述,我们可以粗略的看出这家电商网站的经营状况,并认识到愿意消费的用户是从哪里来,有哪些潜在的用户可以挖掘,网站是否存在倒闭风险等。

2.5.2  KPI指标设计

  • PV:页面访问量统计
  • IP:页面独立IP访问量统计
  • Time:用户每小时PV统计
  • Source:用户来源域名的统计
  • Browser:用户的访问设备统计

    注:很遗憾,由于商业原因,无法提供电商网站的日志。这里我取的是某论坛的日志分析,原理都是一样的,指标也类似。

2.6  项目构建

  这里Hadoop的项目,我们采用Maven结构来构建项目,这样能够保证整个项目的清爽,对依赖包能够统一的进行管理,在项目的打包和发布上也是大有裨益。

  注:如何创建Maven项目这里不做赘述,可以自行查找相应的资料。

3.实现

  指标我们已经分析的很明确了,下面我们来考虑如何实现这些指标,以及实现这些指标需要用到那些技术,下面我画了一个实现的流程图:

由于是在Retina屏下截取的,所以分辨率会有点高,若网络有故障,估计图会展示不了,因而,下面我也用文字描述一下整个流程。

  首先我们需要获取这些日志文件,获取的方式有多种,这里我们只列出了比较工作中使用的2种方式,少量的日志可以直接使用脚本上传到HDFS,海
量日志可以使用Flume进行上传到HDFS,然后我们将上传在HDFS到日志进行清洗(按指标清洗,去掉一些异常数据),将清洗后到数据重定向到新的
HDFS目录中,接下来我们可以按指标来进行统计结果,统计的方式,这里我也列出了工作中使用的2种方式,一种是编写MR任务进行统计,另一种是使用
hive来统计,最后将统计的结果使用sqoop导出到mysql或是oracle中保存(明晰存储在HBase中)。到这里整理工作就算是结束,至于如
何使用统计出来的数据,这里不是我们所考虑的范围。

4.源码

  关于源代码,目前有些部分代码要从源代码中分离出来,到时候我会把这个日志分析系统项目的代码放在Github上,整理完后链接到时候会放在这片博文的下面。另外有什么问题可以加群咨询,或发邮件给我,我会尽我所能给予帮助。与君共勉!

时间: 2024-08-02 22:10:26

网站日志统计案例分析与实现的相关文章

站长必做(一):网站数据统计及分析

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 作为站长,网站的数据统计及分析那是我们必做的事情,通过这些数据,我们可以总结出很多的理论,如:为什么我的网站会被降权?为什么我的网站收录这么差?为什么我的网站外链这么多排名却这么差--那么,作为站长,我们每天要统计的数据是哪些呢? 1,百度相关域:只针对使用在百度上的链接,即指的是百度的反向链接,使用domain:指令就可以查到.百度相关域,

使用shell脚本分析网站日志统计PV、404、500等数据_linux shell

下面的脚本能统计出网站的总访问量,以及404,500出现的次数.统计出来后,我们可以结合监控宝来进行记录,进而可以看出网站访问量是否异常,是否存在攻击,一目了然.还可以根据查看500出现的次数,进而判断网站程序是否出现异常. 复制代码 代码如下: #!/bin/bash#purpose:count nginx or apache or other webserver status code using jiankongbao#how to:run the script every 5 minut

网站404页面返回码错误导致的网站被K案例分析

我站平安的度过了8月的K站风波,然而却在本月不幸中招,终于被K. 近两个月百度的算法调整误伤了很多高质量的网站.但我们依然认为这只是百度的暂时调整,相信百度会认真对待每一个站,只要坚持提供高质量内容得到用户认可,迟早有一天会恢复收录并取得更好的排名. 经过我详细的研究,详细研究各站长工具提供的数据,并分析百度蜘蛛访问日志等,发现本次被K事件的主因是由于网站大规模改版导致的文件丢失导致的大量死链后本站对错误页面的404返回码处理环节出现了重大问题.次要原因是被某些被黑客入侵篡改的高权重网站的外链指

A5优化团队:网站URL结构规划案例分析报告

站长,你的网站为什么迟迟不肯收录?内容做的质量够高,外链做的也非常强悍,但是为什么偏偏有些链接不肯收录呢?本次A5优化团队(http://www.seozhenduan.com)/贺贵江在此揭晓: 一:URL字符长度 URL是影响百度收录的重要因素,常见的URL分为3种类型,第一:动态链接,第二:伪静态,第三静态链接,其中除去第一种外,另外两种都是比较利于搜索引擎抓取与排名的.而在这三者中,有一个共同需要诊断的问题,URL链接长度:   上图中,是A5优化团队的一个诊断案例,本身谷歌PR值为6,

网站优化过度案例分析

请相信我,优化过度永远只是针对于小站,如果你的栏目页超过了10个,你的页面超过了10000,请绕道. 今天以我管理的一个企业站为例,网址:http://www.wldfushi@com/ 这个网站最明显的优化过度现象:网站改版后,2个星期,其中一个关键词广告衫到百度首页,很多副词也相继到了百度首页.在百度维持了1个星期左右时间,产生负面影响:所有关键词基本都倒退了50名次,广告衫排名掉到第九页. 很多人会问,我是怎么产生优化过度行为的?下面是我的优化过度手法,大家无则加勉有则改之. 1,接手这个

seo网站优化方案案例分析

提升权重: 目前商友网为权重1,对于站长工具来说,网站的百度预估流量超过100网站就会提升为权重2,百度预估流量超过500就会被提升为权重3,有指数的关键词获取排名就会提升网站的百度预估流量. 商友网网站信息 如上图所示,目前商友网的关键词库中有指数有排名的关键词数量为37个,百度预估流量为23,想要提升百度的预估流量首先就要提升关键词库中的关键词数量,而想要提升关键词库中的关键词数量首先要保证我们网站内部的内容质量,让百度收录我们网站中更多的高质量内容就会获取更多的关键词排名. 如何提升网站收

MySQL · 最佳实战 · 审计日志实用案例分析

审计日志是RDS安全策略中非常重要的一环,它采集了数据库中所有的访问请求,包括常见的insert,update,delete,select,alter,drop,create语句, 还有一些比如set,commit,rollback命令语句.有了这些日志后可以帮助我们进行问题回溯,分析问题.下面这则案例讲述如何使用审计日志来分析只读实例延迟问题,如果没有审计日志我们很难想象该问题该如何解决. 问题描述: 一客户使用了2个RDS只读节点来承担业务的读流量,两个RDS的资源规格和业务流量完全一样,但

网站日志如何分析之实例解说

因为在端午节前.笔者做过一个实验,并且写了一篇实验报告<探究搜索引擎不收录网站内容与外链因素有无关系的实验>,具体实验内容,在这里就不再多说.因为笔者针对leyuanbaby.com做的这个实验结论,并没有达到想要的效果,所以我还没有死心,就通过网站日志来观察到底蜘蛛有没有爬行我未收录的链接.这个过程中,获得了一些关于分析网站日志心得,在这里分享给大家. 通过网站日志我们可以清晰的看到用户和搜索引擎蜘蛛访问网站的行为,并形成一个数据,这些数据可以让我们知道搜索引擎对于网站的态度,以及网站的健康

大型网站技术架构:核心原理与案例分析

链接 性能优化 Web前端性能优化 应用服务器性能优化 软件质量保证 代码控制 自动化发布 灰度发布 网站运行监控 伸缩性设计 按功能物理分离 负载均衡 分布式缓存 可扩展设计 利用分布式消息队列降低系统耦合性 利用分布式服务打造可服用的业务平台 1 链接 个人博客: alex-my.xyz CSDN: blog.csdn.net/alex_my 本书作者: 李智慧 2 性能优化 1 Web前端性能优化 浏览器优化访问 减少http请求.主要是合并css,合并js,合并图片.将浏览器一次访问所需