阿里巴巴日志采集体系之浏览器的页面日志采集

2017年4月25日

导读:
数据采集作为阿里大数据系统体系的第一环尤为重要。阿里巴巴日志采集体系包括两大体系:Aplus.JS是Web端(基于浏览器)日志采集技术方案;UserTack是APP端(无线客户端)日志采集技术方案。




网站页面是互联网服务的基本载体, 即使在如今传统互联网形态逐渐让位于移动互联网的背景下, HTML页面依旧是最普遍的业务形态,对于以网页为基本展现形式的互联网产品和服务, 衡量其业务水平的基本指标是网页的被浏览次数(PV)和访客数(UV)。为此, 我们需要采集页面被浏览器加载展现的记录,这是最原始的互联网日志采集需求, 也是一切互联网数据分析得以展开的基础和前提。


浏览器的页面型产品、服务的日志采集可分为如下2大类:


1  页面浏览(展现)日志

顾名思义,当一个页面被浏览器加载呈现时采集的日志。此类日志是最基础的互联网日志, 也是目前所有互联网产品的两大基本指标:页面浏览量(PV, Page View)和访客数(UV, Unique Visitors)的统计基础,页面浏览日志是目前成熟度和完备度最高, 同时也是最具挑战性的日志采集任务, 我们将重点讲述此类日志的采集。


2  页面交互日志

当页面加载和渲染完成之后, 用户可以在页面上执行各类操作,随着互联网前端技术的不断发展, 用户可在浏览器内与网页进行的互动已经丰富到只有想不到没有做不到的程度,互动设计都要求采集用户的互动行为数据, 以便通过量化获知用户的兴趣点或者体验优化点,交互日志采集就是为了此类业务场景而生。

 

除此之外, 还有一些专门针对某些特定统计场合的日志采集需求,如专门采集特定媒体在页面被曝光状态的曝光日志, 用户在线状态的实时监测等,但在基本原理上都脱胎于上述两大类。

 

 

页面浏览(PV)日志采集流程:

目前典型的网页访问过程是以浏览器请求、服务器响应并返回所请求的内容(大多以HTML文档的形式)这种模式进行的,浏览器和服务器之间的通信普遍遵守HTTP协议(超文本传输协议, 目前以HTTP/1.1为主, 逐渐向最新的HTTP/2.0过渡)。浏览器发起的请求被称为http请求(httprequest), 服务器的返回则被称为http响应(httpresponse)。

我们以用户访问淘宝首页(www.taobao.com)为例, 一次典型的页面访问过程可以描述如下:


 

1)用户在浏览器内点击淘宝首页链接(或在地址栏输入www.taobao.com并回车);

2)浏览器向淘宝服务器发起http请求。在我们这里所举的例子中, 用户可以看见的内容只是显示于浏览器地址栏内的http://www.taobao.com,而浏览器在执行时, 会解析用户请求并按照http协议中约定的格式将其转化为一个http请求发送出去。

3)服务器接受并解析请求。服务器端的业务处理模块按业务逻辑处理本次请求并按照http协议规定的格式, 将处理结果以http响应形式发还到浏览器。

4)浏览器接收服务器的响应内容, 并将其按照文档规范展现给用户, 从而完成一次请求。在我们的例子中, 浏览器请求淘宝首页, 服务器返回对应的HTML文档, 浏览器即按照HTML文档规范解析文档并将整个页面渲染在屏幕上。


 

目前阿里巴巴采用的页面浏览日志采集方案的流程框架如下:
 


 

 


上图所示的页面浏览日志采集过程中, 涉及日志相关的几个主要过程简单介绍如下:

 

1)客户端日志采集。日志采集工作一般由一小段被植入页面HTML文档内的JavaScript脚本来执行。采集脚本被浏览器加载解析后运行, 在执行时采集当前页面参数、浏览行为的上下文信息(如读取用户访问当前页面上一步页面)以及一些运行环境信息(如当前的浏览器和分辨率等)。在HTML文档内植入日志采集脚本的动作可以由业务服务器在响应业务请求时动态执行, 也可以开发页面时由开发人员手动植入。在阿里,这两种方式均有采用, 其中前一种模式的占比较高, 这一点与业界的普遍状况有所不同。

2)客户端日志发送。采集脚本执行时, 会向日志服务器发起一个日志请求以将采集到的数据发送到日志服务器。在大多数情况下, 采集完成之后立即执行发送; 但在个别场景下, 日志在采集之后可能经过一段时间的延迟后才会被发出。日志采集和发送模块一般会集成在同一个JavaScript脚本文件内, 且通过互联网浏览器必然支持的HTTP协议与日志服务器通信,采集到的日志信息一般以URL参数形式放在HTTP日志请求的请求行内。

3)服务端日志收集。日志服务器接收到客户端发来的日志请求后一般会立即向浏览器发回一个请求成功的响应,以免对页面的正常加载造成影响;同时, 日志服务器的日志收集模块会将日志请求内容放写入一个日志缓冲区内, 完成此条浏览日志的收集。

4)服务端日志解析存档。服务器接收的浏览日志进入缓冲区后, 会被一段专门的日志处理程序顺序读出并按照约定的日志处理逻辑解析。由日志采集脚本记录在日志请求行内的参数, 将在这个环节被解析(有时候伴随转义和解码)出来并转存入标准的日志文件并注入到实时消息通道内供其他后端程序读取和进一步加工处理。


经过采集——发送——收集——解析存档四个步骤, 我们将一次页面浏览日志成功地记录下来。可见, 除了采集代码在某些场合下需要手动植入之外, 整个过程基本都是依照HTML规范和HTTP协议自动进行的, 这种依赖协议和规范自动运行的采集机制最大限度地减少了人工干预的扰动, 进而保证了日志的准确性。
阿里的页面浏览(PV)日志采集框架, 不仅指定了上述的采集技术方案, 同时也规定了PV日志的采集标准规范,其中规定了PV日志应采集和可采集的数据项, 并对数据格式做了规定。这些格式化日志, 为后续的日志加工和计算得以顺利开展打下了基础。

 

 

页面交互日志采集:

PV日志的采集解决了页面流量和流量来源统计的问题,但随着互联网业务的发展, 仅了解用户到访过的页面和访问路径, 已经远远不能满足用户细分研究的需求。在很多场合下, 需要了解用户在访问某个页面时具体的互动行为特征, 比如鼠标或输入焦点的移动变化(代表用户关注内容的变化), 对某些页面交互的反应(可借此判断用户是否对某些页面元素发生认知困难)等。因为这些行为往往并不触发浏览器加载新页面, 所以无法通过常规的PV日志采集方法来收集。在阿里巴巴, 我们通过一套名为“黄金令箭”的采集方案来解决交互日志采集问题。

因为终端类型、页面内容、交互方式和用户实际行为的千变万化不可预估, 交互日志的采集和PV日志的采集不同,无法规定统一的采集内容(例如活动页面的游戏交互和淘宝购物车页面的功能交互两者相比, 所需记录的行为类型、行为数据以及数据的结构化程度都截然不同), 呈现出高度自定义的业务特征。与之相适应, 在阿里巴巴的日志采集实践中, 交互日志采集是以技术服务的形式呈现的。
具体而言, 黄金令箭是一个开放的基于HTTP协议的日志服务,需要采集交互日志的业务(下文简称业务方), 经过如下步骤即可将自助采集的交互日志发送到日志服务器:

 

a) 业务方在黄金令箭的元数据管理界面依次注册需要采集交互日志的业务, 具体的业务场景, 以及场景下的具体交互采集点,在注册完成之后,系统将生成与之对应的交互日志采集代码模板。

b) 业务方将交互日志采集代码植入需要目标页面, 并将采集代码与需要监测的交互行为做绑定。

c) 当用户在页面上产生指定行为时, 采集代码将和正常的业务互动响应代码一起被触发和执行。

d) 采集代码将在采集动作完成后将对应的日志通过HTTP协议发送到日志服务器,日志服务器在接收日志后, 对于保存在HTTP请求参数部分的自定义数据,即用户上传的数据, 原则上不做解析处理只做简单的转储。


经过上述步骤采集到日志服务器的业务随后可被业务方按需自行解析处理,  并可与正常的PV日志做关联运算。

 

 


页面日志的服务端清洗和预处理

上面介绍了阿里巴巴的两类浏览器类页面日志的采集方案, 并粗略介绍了日志在到达日志服务器之后的解析处理。但在大部分场合下, 经过上述解析处理之后的日志并不直接提供给下游使用. 基于如下几个原因, 在对时效要求较宽松的应用场合下, 一般还需要进行相应的离线预处理。

 

1) 流量攻击、网络爬虫和流量作弊(虚假流量)。页面日志是互联网分析和大数据应用的基础源数据, 在实际应用中, 往往存在占一定比例的虚假或者恶意流量日志, 导致日志相关指标的统计发生偏差或明显谬误。为此, 需要对收集的日志进行合法性校验, 并依托算法识别非正常的流量并归纳出对应的过滤规则集加以滤除,这是一个长期而艰苦的对抗过程。

2) 数据缺项补正。为了便利后续的日志应用和保证基本的数据统计口径一致, 在大多数情况下, 需要对日志中的一些公用且重要的数据项做取值归一、标准化处理或做反向补正。反向补正,即根据新日志对稍早收集的日志中的个别数据域做回补或修订(例如在用户登录后, 对登录前页面日志做身份信息的回补)。

3) 无效数据剔除。在某些情况下, 因业务变更或配置不当, 采集到的日志中会存在一些无意义、已经失效或者冗余的数据项。这些数据项不仅消耗存储空间和运算能力, 而且在偶然的情况下还可能干扰正常计算的进行。为了排除此类异常的发生, 需要定时检查配置并依照配置对数据项将此类数据进行剔除。

4) 日志隔离分发。基于数据安全或者业务特性的考虑, 某些日志需要在进入公共数据环境之前做隔离。


原始日志经过上述的清洗和变形处理之后, web页面日志的采集流程就算完成了。此时的日志已经具备了结构化或者半结构化的特征, 可以方便地被关系型数据库装载和使用。(/End)

 

 

 

欢迎关注【阿里数据:AliData】公众号

其他活动
活动峰会
趋势报告
趣味数据
技术探索