数据采集:埋点、采集、存储及分析
一、背景
数据采集层中的用户行为数据采集系统。
用户行为:用户与产品UI的交互行为(Android、iOS、Web页面、H5)。
- 后端:后端服务日志、业务数据库
- 前端:主动上报
用户行为数据采集系统:从前端采集用户完整的行为信息,用于数据分析和其他业务。
例子1:营销活动注册流程
仅依靠后端业务数据库,只能知道活动带来多少新注册用户。
而通过采集用户在前端的操作行为,可以分析出整个活动的转化情况(转化率分析)。
页面浏览量 → 点击注册跳转 → 获取验证码 → 提交注册 → 真实注册(漏斗分析)
例子2:用户评分系统 —— 抽取数据作为评分依据。
数据采集
结构化数据表 —— 存储数据
前端 API 上报数据
前端位置埋点紊乱
二、解决办法
统一的用户行为采集系统。原则:
- 统一上报方式
- 统一数据格式
- 统一数据集中存储
- 尽可能全量采集
具体到实现上,归纳为三个问题:
1. 采集什么
需要什么数据?抽象出统一的数据格式。
行为包括三类:
- 浏览:页面、元数据
- 输入
- 点击(移动端:滑动):页面的元素、关联信息、元数据
浏览和点击是引起页面变化和逻辑处理的重要事件,而输入总是与点击事件关联在一起。
页面、元素、元数据。
浏览和点击便是我们采集的对象。
- Android & iOS :View名称
- Web页面:URL链接(hostname + pathname)、参数、跟踪代码
用户维度:随机UUID,后端生成,前端缓存。
已登录用户:通过元数据中的用户id关联。
时间维度:数据统计,前端延迟上报,时间自动同步。
例如:
{
"uuid": "2b8c376e-bd20-11e6-9ebf-525499b45be6",
"event_time": "2016-12-08T18:08:12",
"page": "www.example.com/poster.html",
"element": "register",
"attrs": {
"title": "test",
"user_id": 1234
}
}
2.前端怎么采集
前端有效埋点、全量采集的问题。
传统的埋点方式,在需要上报的位置组织数据、调用API、将数据传给后端,比如:百度统计、google analysis。
需要在代码里嵌入调用,也业务逻辑耦合在一起。
“无埋点”概念。
通过在底层hook所有的点击事件,采集所有事件,称之为“全埋点”。
- hook底层点击事件 —— 数据整理
- UI元素属性值设置关联关系
3.后端存储
数据集中存储、易于分析。
数据进入后台,接入kafka队列,采用生产消费者模式(Elasticsearch)处理。
- 功能分离
- 数据缓冲
- 易于扩展
增加5个维度信息:
- 客户端类型(web、android、iOS)
- 事件类型(浏览、点击)
- 事件
- 客户端IP
- User Agent
将Page + element 、事件名称进行关系映射,可进行页面配置,手动关联。
传统的行列二维数据结构。
用户行为数据、日志数据都属于半结构化数据,使用NoSQL数据库作为存储。
ElasticSearch 数据存储
实时分布式搜索引擎和分析引擎,具有很强的数据搜索和聚合分析能力。
三、技术路线图
- 原始数据存储ODS层
- 服务器日志接收
- 服务器日志
- URL解析
- JS回传
- 客户端日志接收
- SDK
- API接口
- 全量/增量/Binlog
- 数据库
- 服务器日志接收
服务器日志,指Web服务器软件,例如Httpd、Nginx、Tomcat等自带的日志,例如Nginx的access.log日志等。
URL解析,指访问服务器时,将URL信息及携带的参数进行解析后,上传服务器,例如访问百度首页:https://www.baidu.com/s?ie=utf-8&wd=你好,我们可以获得本次访问的word为“你好”。
JS回传,指在Web页面上添加的各类统计插件,通过在页面嵌入自定义的Javascript代码来获取用户的访问行为(比如鼠标悬停的位置,点击的页面组件等),然后通过Ajax请求到后台记录日志。
- 统计重要指标
- 页面浏览:PV、UV、IP、跳出率、平均访问时长、转化次数等
- 页面交互:搜索词、控件点击、页面跳转等
- 其他:转化路径分析、设备分析、访客分析、系统环境、地域分布等
用户点击网页 → HTTP请求 → 相应结果返回浏览器 → 解析 → 展示
ODS基础日志
大数据平台半结构化特征
转化为DWD基础日志
数据清洗:数值归一、标准化处理、无效数据剔除
四、漏斗模型介绍
Web端的分析常用到漏斗模型,例如淘宝的SPM体系。
漏斗模型全称为:搜索营销效果转化漏斗。
对应了企业搜索营销的各个环节,反映了从展现、点击、访问、咨询,直到生成订单过程中的客户数量及流失。
漏斗模型是一个线性流程,从开始到结束,用户在每一个环节,都会产生流失,就像漏斗一样。
以电商为例,最常见漏斗模型就是:浏览/搜索-加购-下单-支付-复购。
- 关键环节优化
- 缩短用户路径 优化产品体验
工具:Google GA
对比分析
五、淘宝SPM码
漏斗模型比较优秀的应用案例为淘宝SPM码。
查看淘宝网页的源代码会经常看到http://detail.tmall.com/item.htm?id=XXX&&spm=2014.123456789.1.2这样的例子,这是淘宝提供的SPM是淘宝社区电商业务(xTao)为外部合作伙伴(外站)提供的一套跟踪引导成交效果数据的解决方案。
简单说来,SPM编码是一种用来跟踪页面模块位置的编码,标准SPM编码由4段组成,采用a.b.c.d的格式(建议全部使用数字)。
基于SPM可以得到的效果统计指标:
- PV:通过指定spm编码引导到宝贝详情页面的PV。
- UV:通过指定spm编码引导到宝贝详情页面的UV。
- 支付宝成交人数:通过指定spm编码引导到宝贝详情页面的用户当天对同店商品的支付宝成交人数。
- 转化率=支付宝成交人数/UV,代表通过指定spm编码引导的用户最终转化为购买用户的比率。
六、客户端日志采集
手机 SDK 延迟发送日志
统计数据延迟
根据类型的不同,可以分为页面事件(类比页面浏览)和控件点击事件(类比页面交互)。
- 设备及用户的基本信息,例如IMEI、用户账号等。
- 被访问页面的信息,例如商品ID、浏览店铺等。
- 访问的路径信息,例如上一个页面来源等。
SDK具有聚合和压缩的功能,可以适当的合并日志,减少数据量。
工具:友盟、TalkingData、百度统计、腾讯云分析、GA等第三方统计工具。
- 唯一设备标识符
网页有统一的Cookie进行识别,客户端没有。
IMEI/IMSI/MAC地址、UDID等。
- 原生态APP & H5页面嵌入
Native页面数据统计通过SDK进行,H5页面基于浏览器的页面日志进行。
由于采集方式的不同,很多情况下两个页面互相跳转时,便无法还原用户访问路径,对于数据的统计分析产生很严重的影响。
解决的思路有两种,一种是Native日志归拢到H5日志中,另一种是H5日志归拢到Native日志中,但综合考虑,归拢到Native日志更为合理,因为SDK能够采集更为全面的日子信息。具体实现方式上,可以在H5页面中嵌入JS代码,通过调用WebView框架中的JSBridge接口,来实现参数的传入,并由统计SDK进行日志的封装。当然方法不是万能的,有其他的好方式也可以尝试。
- 日志处理
通过限制流量、消息队列削弱峰值、异步处理、内存缓冲、扩展服务等方式进行,在日志采集环节中,可以通过延迟非核心日志上传的方式,优先处理核心日志,以保障统计效果。
参考链接1:用户行为数据采集系统
参考链接2:数据采集技术简介