数据采集作为大数据体系中的第一环节,对如何全面、高性能、规范完成海量数据的采集,并将其传输到大数据平台。
1.浏览器的页面日志采集
1.1 页面浏览日志采集流程
页面浏览日志是最基础的互联网日志,其中页面浏览量(PageView,PV)和访客数(Unique Visitors,UV)是一切互联网数据分析得以展开的基础和前提。
上图是一个典型的网页浏览过程,你认为从哪一个结点开始采集日志最为合适?
答案是④,首先,①-②步骤请求尚未抵达服务器,③只能认为服务器处理了请求,不能保证解析和渲染界面,也不能保证用户已经打开界面。
日志采集思路or原理:在HTML文档内的适当位置增加一个日志采集节点,当浏览器解析到这个节点时,将自动触发一个特定的HTTP请求到日志采集服务器。,当日志服务器接收到这个请求时,就确定浏览器已经成功地接收和打开了页面。
参照阿里巴巴采集过程(以PV日志为主),主要分为:采集 - 发送 - 收集 - 解析存档
1)客户端日志采集
主要采集当前页面参数、浏览行为的上下文信息(如读取用户访问当前页面时的上一步页面)以及一些运行环境信息
2)客户端日志发送
日志采集和日志发送一般存放在一个脚本中,通过HTTP协议与日志服务器通信,采集到的日志信息一般以URL参数形式放在HTTP日至请求的请求行内。
3)服务器端日志收集
日志服务器收到日志请求后,立刻向浏览器发送一个请求成功的响应,同时,会将日志请求内容写入到一个日志缓存区内
4)服务器端日志解析存档
进入缓存区后会按照约定的规则解析,转存入标准的日志文件中并注入实时消息通道供其他后端程序读取和进一步加工处理。
1.2页面交互日志采集
更多的是用户在访问某个界面是具体的互动行为特征,比如鼠标的移动变化、某些页面交互的反应。因为终端类型、页面内容、交互方式和用户实际行为是千变万化,无法规定统一的采集内容。阿里通过“黄金令箭”的采集方案,大致流程如下:
1)业务方在“黄金令箭”的元数据管理界面依次注册需要采集交互日志的业务、具体的业务场景以及场景下的具体交互采集点,在注册完成后,系统会生成与之对应的交互日志采集代码模板。
2)业务方将交互日志采集代码植入目标页面,并将采集代码与需要监测的交互行为做绑定
3)当用户在页面上产生指定行为时,采集代码和正常的业务互动相应代码一起被触发和执行
4)采集完成后通过HTTP协议发送到日志服务器,原则上不做解析处理,只做简单的转储
1.2页面日志的服务器端清洗和预处理
1)识别流量攻击、网络爬虫和流量作弊
对采集的日志进行合法性校验,依托算法识别非正常的流量并归纳出对应的过滤规则集加以滤除。
2)数据缺项补正
在大多数情况下,需要对日志中的一些公用且重要的数据项做取值归一、标准化处理或反向补正
3)无效数据剔除
有时因为业务变更或者配置不当,在采集到的数据中会有一些无意义,不仅会消耗存储空间和运算能力,还有可能干扰正常计算
4)日志隔离分发
1.2 无线客户端的日志采集
目的:
- 服务开发者,协助开发者分析各类设备问题
- APP迭代优化,提升用户体验
1.2.1 页面事件
页面事件主要 记录:
① 设备和用户的基本信息
② 被访问页面的信息
③ 访问基本路径,还原用户完整的访问行为(透传参数)
请思考,进入页面时上报还是离开页面时上报呢?分析其中优点
在页面离开时上报比较好,首先可以获取到用户的页面停留时长
1.2.2控件点击及其他事件
记录了基本的设备信息、用户信息;控件所在的页面名称、控件名称、控件的业务参数
1.2.3特殊场景
为了平衡日志大小,减少流量消耗、采集服务器压力、网络传输压力,采集SDK提供了聚合功能。总体思路就是每个保管的元素一般都属于一个页面,利用页面的生命周期来实现适当的聚合及确定发送时机。
1.2.4 H5&Native日志统一
简单来说,APP分为两种:一种纯NativeAPP;一种既有Native又有H5页面嵌入的APP,即HybridAPP。要想实现Native和H5日志的统一处理,就需要对Hybrid日志有统一的方案。
阿里采用Native部署采集SDK的方式,有以下两点原因:
- 采用采集SDK可以采集到更多的设备相关数据
- 采集SDK处理日志,会先在本地缓存,而后借机上传,在网络不佳时延迟上报,保证数据不丢失
1.2.5 设备标识
主要用于分析访客数(Unique Visitors,UV)使用,当用户不登录访问时,会很难对未登录访问的日志进行有效分析。
PC端使用Cookie信息作为设备的唯一信息,对于APP来说,就需要获取到能够唯一标识设备的信息。历史上,MEI、IMSI、MAC都可以使用,不过随着系统升级和用户安全意识提高,很多基本的设备信息不能轻易获取到,阿里目前使用UTDID作为唯一标识。
1.2.6 日志传输
主要是介绍无线客户端日志的上传、压缩及传输的特殊性。
无线客户端的日志上传,不是生产一条上传一条,而是无线客户端产生日志后,先存储在客户端本地,然后再伺机(时间间隔、日志大小、上传网络耗时)上传。