数据采集:埋点、采集、存储及分析

一、背景

数据采集层中的用户行为数据采集系统。

用户行为:用户与产品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:数据采集技术简介

原文地址:https://www.cnblogs.com/hider/p/13967167.html