zoukankan      html  css  js  c++  java
  • 数据采集:埋点、采集、存储及分析

    一、背景

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

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

  • 相关阅读:
    利用jenkins+saltstack+sh 修改nginx配置文件并重新加载
    利用jenkins+saltstack+sh部署项目到多台服务器
    基于9款CSS3鼠标悬停相册预览特效
    基于jquery横向手风琴效果
    基于jQuery图片元素网格布局插件
    基于jQuery左侧大图右侧小图切换代码
    sql2005,sql2008,sql2012清空日志语句
    基于jQuery鼠标悬停上下滑动导航条
    基于jQuery鼠标点击弹出登陆框效果
    纯CSS3悬停图标旋转导航动画代码
  • 原文地址:https://www.cnblogs.com/hider/p/13967167.html
Copyright © 2011-2022 走看看