第一章 总述
第二章 日志采集
2.1 浏览器的页面日志采集
览器的页面型产品/服务的日志采集可分为如下两大类
(1)页面浏览(展现)日志采集。顾名思义,页面浏览日志是指:一个页面被浏览器加载呈现时采集的日志。此类日志是最基础的互联日志,也是目前所有互联网产品的两大基本指标:页面浏览量(Page View,PV)和访客数(UnigueVisitors,UV)的统计基础。贞面浏览日志是目前成熟度和完备度最高,同时也是最具挑战性的日志采集任务,我们将重点讲述此类日志的采集。
(2)贞面交互目志采集。当贞面加载和染完成之后,用户可以在页面上执行各类操作。随着互联网前端技术的不断发展,用户可在浏览器内与网页进行的互动已经丰富到只有想不到没有做不到的程度,互动设计都要求采集用户的互动行为数据,以便通过量化获知用户的兴趣点或者体验优化点。交互日志采集就是为此类业务场景而生的。
除此之外,还有一些专门针对某些特定统计场合的日志采集需求,如专门采集特定媒体在页面被曝光状态的曝光日志、用户在线状态的实时监测等,但在基本原理上都脱胎于上述两大类。限于篇幅,此内容在本书中就不予展开介绍了。
2.1.1 页面浏览日志采集流程
上面描述了一次典型的网页浏览过程,如果需要记录这次浏览行为,则采集日志的动作必然是附加在上述四个步骤中的某一环节内完成的。在第一步和第二步,用户的请求尚未抵达服务器:而直到第三步完成,我们也只能认为服务器处理了请求,不能保证浏览器能够正确地解析和染页面,尚不能确保用户已确实打开页面,因此在前三步是无法采集用户的浏览日志的。那么采集日志的动作,需要在第四步,也就是浏览器开始解析文档时才能进行。根据前文所述,可以很自然地得出在这一模式下最直接的日志采集思路:在HTML文档内的适当位置增加一个日志采集节点,当浏览器解析到这个节点时,将自动触发一个特定的HTTP请求到日志采集服务器。如此一来,当日志采集服务器接收到这个请求时,就可以确定浏览器已经成功地接收和打开了页面。这就是目前几乎所有互联网网站页面浏览目志采集的基本原理,而业界的各类网页日志采集的解决方案只是在实施的细节、自动采集内容的广度以及部署的便利性上有所不同。
2.1.2 页面交互日志采集
PV目志的采集解决了页面流量和流量来源统计的问题,但随着互联网业务的发展,仅了解用户到访过的页面和访问路径,已经远远不能满足用户细分研究的需求。在很多场合下,需要了解用户在访问某个页面时具体的互动行为特征,比如鼠标或输入焦点的移动变化(代表用户关注内容的变化)、对某些页面交互的反应(可借此判断用户是否对某些页面元素发生认知困难)等。因为这些行为往往并不触发浏览器加载新页面,所以无法通过常规的PV日志采集方法来收集。在阿里巴巴,通过一套名为“黄金令箭”的采集方案来解决交互日志的采集问题。
因为终端类型、页面内容、交互方式和用户实际行为的于变方化不可预估,交互日志的采集和PV日志的采集不同,无法规定统一的采集内容(例如,活动页面的游戏交互和淘宝购物车页面的功能交互两者相比,所需记录的行为类型、行为数据以及数据的结构化程度都截然不同),呈现出高度自定义的业务特征。与之相适应,在阿里巴巴的日志采集实践中,交互日志的采集(即“黄金令箭”)是以技术服务的形式皇现的。
具体而言,“黄金令箭”是一个开放的基于HTTP协议的日志服务需要采集交互志的业务(下文简称“业务方”),经过如下步骤即可将自助采集的交互日志发送到日志服务器。
(1)业务方在“黄金令箭”的元数据管理界面依次注册需要采集交互日志的业务、具体的业务场景以及场景下的具体交互采集点,在注册完成之后,系统将生成与之对应的交互日志采集代码模板。
(2)业务方将交互日志采集代码植入目标页面,并将采集代码与需要监测的交互行为做绑定。
(3)当用户在页面上产生指定行为时,采集代码和正常的业务互动响应代码一起被触发和执行。
(4)采集代码在采集动作完成后将对应的日志通过HTTP协议发送到日志服务器,日志服务器接收到日志后,对于保存在HTTP请求参数部分的自定义数据,即用户上传的数据,原则上不做解析处理,只做简单的转储。
经过上述步骤采集到日志服务器的业务随后可被业务方按需自行解析处理,并可与正常的PV日志做关联运算。
2.1.3 页面日志的服务器端清洗和预处理
(1)识别流量攻击、网络爬虫和流量作弊。
(2)数据缺项补正。
(3)无效数据剔除。
(4)日志隔离分发。
第四章 离线数据开发
4.1 数据开发平台
4.1.1 统一计算平台
1. MaxCompute的体系架构
MaxCompute由四部分组成,分别是客户端(MaxComputeClient)、接人层(MaxComputeFrontEnd)、逻辑层(MaxComputeServer)及存储与计算层(ApsaraCore)。
MaxCompute客户端有以下几种形式。
- Web:以RESTfulAPI的方式提供离线数据处理服务。
- SDK:对RESTfulAPI的封装,目前有Java等版本的实现。
- CLT(CommandLineTool):运行在Windows/Linux下的客户端工具,通过CLT可以提交命令完成Project管理、DDL、DML 等操作。
- IDE:上层可视化ETL/BI工具,即阿里内部名称是在云端(D2),用户可以基于在云端完成数据同步、任务调度、报表生成等常见操作。