Iawen's Blog

我喜欢这样自由的随手涂鸦, 因为我喜欢风......

我们能够监测网站上用户的行为, 或者app上用户的行为, 都需要在网站的每一页或者app中加上一些程序代码(基础代码)。这样的程序代码, 在网站上叫监测代码, 在app中叫SDK(Software Development Kit)。

但是你要想收集到所有用户行为的数据, 光有基础代码是不够的, 总有一些特殊的用户操作行为是不能靠基础代码捕获的。这一类基础代码不能捕获的用户操作行为, 最典型的, 是被称为event(事件)的一类行为。至于什么是event(事件), 在网页上, 是那些非http类型的交互: JavaScript的、Flash的、Silverlight的、AJAX的、各种页面插件的交互等等;而在app上, 则包含用户点击在内的所有交互。你可以直接理解一个规律, 那就是凡是遵守http协议的交互(最典型的就是网页的链接), 皆是可以由基础监测代码直接监测到数据的, 但非http类型的用户交互, 基础监测代码都无能为力。app上的所有可点击交互都是event, 因为app不遵循http协议, 所以基础监测代码对它们都无效。

1. 什么是埋点

埋点是数据领域的专业术语, 它的学名叫事件追踪, 对应的英文是Event Tracking。它主要是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。

埋点分为前端埋点和后端埋点:

  • 前端(客户端): 在Web页面/App的源码里面添加行为上报的代码, 当用户的行为满足某一个条件时, 这些代码就会被执行, 向服务器上报行为数据。
  • 后端(服务器端): 开发人员在监测点植入统计代码。

2. 埋点埋什么

埋点埋什么取决于我们想从用户身上获取什么信息

一般主要分为用户的基本属性信息和行为信息

用户的基本属性信息主要包括: 城市、地址、年龄、性别、经纬度、账号类型、运营商、网络、设备等等

行为信息即用户的点击行为和浏览行为, 在什么时间, 哪个用户点击了哪个按钮, 浏览了哪个页面, 浏览时长等等的数据。

3. 埋点设计

在埋点设计时, 要将客户端、m站等平台中全部的页面及按钮按照规律清晰的罗列出来, 并为每个页面, 每个按钮配置唯一的id, 以此来区分每一个页面及按钮.

事件和属性, 就构成了埋点的基础。代码埋点分为前端埋点和后端埋点, 区别在于埋点逻辑是放在前端完成, 还是后端完成。 一种是全埋点, 或者叫无埋点。所谓全埋点, 就是将预先定义的某类事件(通常包括这四种事件类型: APP启动、APP关闭、页面访问、元素点击), 通过SDK实现完全自动上报。比如当用户访问本产品的任何页面时, 都会自动上报PV数据。

实现全埋点时, 需要规范页面和元素的命名规则。比如淘宝就通过SPM码规范, 来标识具体的页面和元素。

3.1 SPM

SPM码的全称是 super position model(超级位置模型), 它通过五个字符串, 将一个页面功能位置, 唯一标识出来, 下面是一个SPM码的格式:

SPM=SPMA.SPMB.SPMC.SPMD.SPME
  • SPMA 唯一标识一个站点
  • SPMB 唯一标识某站点的一个页面
  • SPMC 唯一标识某页面的一个区块
  • SPMD 唯一标识某区块的一个具体位置
  • SPME 随机生成的字串, 跟时间有关系, 在循环页面计算时可以区分点击的时序

举个具体的例子:

SPM=smpc.home.top-news1.6.1600337661320wCquJhc

3.2 无埋点

无埋点无差别地记录用户在前端页面上的行为, 对应的英文是Codeless Tracking。无埋点并不是说不要添加代码, 而是不需要开发人员添加额外代码。无论是埋点的方法, 还是不埋点的方法, 都必须要添加基础代码。

无埋点直接对页面中所有的用户行为进行监听, 因此即使你不需要监测某个部分, 它也仍然会将这部分的用户行为数据和对应发生的信息全收录下来。

无埋点优点:

  • 技术成本低, 对用户非常友好, 不需要重新部署, 配置完成就可以生效
  • 数据可以"回溯"。

无埋点缺点:

  • 上报的数据量比埋点大很多, 里面可能很多是没有价值的数据
  • 不能灵活地自定义属性
  • 传输时效性和数据可靠性欠佳
  • 由于所有的控件事件都全部搜集, 会给服务器和网络传输带来更大的负载。

3.2 可视化埋点

可视化埋点, 即可视化事件监测部署, 指通过可视化工具快速配置采集节点(圈点), 在前端自动解析配置, 并根据配置上传埋点数据。它本质上也是前端全埋点, 用只不过是要求用户以可视化的方式选择具体的埋点元素。只有当用户选定后, 系统才会进行埋点上报, 否则就不处理。它的流程通常是这样:

  • 一是事先在产品上埋一个 SDK
  • 二是通过可视化的方式, 生成配置信息, 也就是事件名称之类的定义
  • 三是将采集的数据按照配置重命名, 进而就能做分析了

4. 埋点系统

4.1 维护埋点事件及埋点事件ID。

比如我们增加了一个页面以及页面上全部的按钮, 按钮点击之后的下一级页面, 那我们需要生成好多埋点id, 这个声场埋点id的功能就在系统中进行维护.

4.2 数据异常报警

对于一些埋点数据不能正常上报, 或者因为其他原因导致埋点数据丢失, 通过埋点系统直观查看哪些点没有正常上报, 第一时间进行检查

5. 数据存储

数据从上报开始——Nginx——Filebeat——Kafka——Spark——Kudu

6. 总结

埋点 无埋点 可视化埋点
前端+后端 前端 前端
基础代码+事件监测代码 基础代码 基础代码+可视化工具

6.1 Case

eg 友盟、百度移动统计、神策数据(sensors data)、GrowingIO、TalkingData、GA(Google analytics)统计 0 1

参考:

埋点(Event Tracking)vs 无埋点(Codeless Tracking) vs 可视化埋点(Visual Event Tracking)