2020-07-15

智能化数据埋点建设的探索实践

作者 货拉拉技术

数据采集是数据分析的基础,而埋点是最主要的采集方式。那么数据埋点采集到底都包括哪些问题?怎么做好数据埋点工作?本文作者就此问题给出自己的探索实践,与大家分享。

一、常见的埋点建设方案

1.1 基本流程

数据埋点从业务方提出需求,到最后上线落地实现,一般来说有如下几个步骤:

1.2 常见埋点方案的比较

 代码埋点全埋点可视化埋点
采集说明定义业务关心的事件,手动添加事件埋点相关代码预先接入某类事件的数据采集预先接入某类事件的数据采集,可视化圈选需要的事件
场景以业务价值为出发点的行为分析适用于业务接口中的公共基础数据多适用于用户在UI页面中的操作行为
优势按需采集 业务信息更完善 对数据的分析更简单快捷,开发工作量较少运营过程中开发工作量较少
劣势开发工作量较多,费人费时数据维度单一,无法满足个性化数据需求深度耦合系统框架,缺乏基于业务的解读

二、痛点和需求

一般来说,数据埋点对业务数据分析支持的全面性,和需要耗费的时间人力相比,是一个矛盾。如何处理这样的矛盾,优秀的解决方案总是相似的,那就是把复杂留给自己,对外提供简单的运营使用方法。本人认为,好的智能化数据埋点,简单概况来说,可以总结成简单8个字:随时随地,全面可控。下面详细解释一下。

  • 随时随地:可以支持任何业务方关心的场景,并提供所需的各类数据。
  • 云端控制;可以线上控制,按业务方需求添加支持的场景。一方面减少不必要的数据存储和带宽资源消耗,另一方面又能满足各类场景对数据的需求。
  • 专业性:埋点数据既有常见的设备品牌、型号、操作系统版本、屏幕分辨率等等基础数据外,也有相对来说更加专业的程序运行相关数据,如类、方法、依赖库、代码指令等信息。
  • 全面:埋点数据可以全面地感知和反映当前设备状态。
  • 细粒度:把数据按其意义进行抽象分类,并对每一类的数据进行精确的拆解,从整体概览到原子级的精确表示,都可以支持。
  • 数据清洗:大量原始的埋点采集数据,格式各异,可读性较差,如果有能力对数据进行处理和简化,能够提高数据分析的使用效率。但是处理不同类型的数据,需要各种不同的数据处理工具。
  • 扩展能力:对于不支持的埋点数据,可以比较方便地添加进来,不需要耗费太大的工作量。

三、智能化数据埋点方案

3.1基本数据流程

事件:全面的事件接入,数据埋点的触发源。

过滤:灵活的事件过滤能力可以解决场景支持的全面性,和巨大的性能、资源消耗的矛盾。在不同的业务需求和场景下,可以选择对应需要关注的事件。

采集:对数据进行抽象分类,数据采集功能函数化表达,以便持续扩展。

加工:对采集数据进行格式化、抽取、转换、合并、拆分、精简等处理

发送:按照预先设定的通信协议,对数据进行加密封装和发送

3.2 整体框架

3.3 主要功能模块说明

(1)事件接入

除了自定义的个别特殊事件外,接入的事件按类型划分,统一接入,尽可能减小同类事件的接入成本。

网络事件:通过网络库统一接入网络请求事件。

系统事件:通过系统提供的API接入各类系统事件,包括但不限于网络状态、进程状态等。

UI事件:监听用户在UI页面中的操作行为,如页面进入和退出,按钮点击,文本输入、列表选择等。

事件信息包括但不限于:事件类型、事件名称、事件发生时间、事件数据。其中,不同类型事件的事件数据有不同的数据格式。

  • 过滤器

过滤器分为两层,第一层过滤掉的事件数据,后续处理流程完全中断;经过第二层过滤后的事件,会触发实际的埋点数据上报。而在两层之间的事件,即通过第一层过滤,但是没有通过第二层过滤的事件,其基本信息会被缓存和统计,以便后续事件回溯使用。

使用过滤器来过滤事件时,可以使用条件筛选器来完成条件的匹配。

  • 条件筛选器

条件筛选是一个特殊的运算操作,包含三个元素:输入、操作符、结果。结果是Yes或者No,比如二目条件删选器,包含2个输入参数:

其中,P1可以使用系统实际值,P2可以使用预期值。不同的P1/P2输入类型,可以使用的操作符也不同。常见的操作符,如:

Number类型输入:等于、大于、小于、大于或等于、小于或等于、可整除;

String类型输入:等于、包含、前缀匹配、后缀匹配、正则匹配;

Array类型输入:包含、属于、有交集;

除了最经常使用的二目条件筛选器,还有单目筛选器、三目筛选器等,原理类似,此处就不再一一介绍了。

  • 计数器和计时器
  • 函数

数据的采集、加工以函数形式实现,包括输入数据、输出数据。输入和输出数据可以是常规数据类型,如Number、String、Array、Map等。也可以是无输入数据或无输出数据。

3.4通信协议

框架内的各个模块,都体现在通信协议内,以实现埋点数据的智能化。具体来说,可以选择Json或Prorobuf等主流数据格式作为基础。

四、使用示例

示例1:用户下单时添加用户的位置信息。假设用户下单对应业务接口的网络请求类似:https://x.huolala.cn/user_order?uid=1000&&args=xxx

第一步:过滤匹配网络事件类型

匹配条件设置:event_type = 1

第二步:过滤匹配用户下单的网络请求

匹配条件设置: request_host == x.huolala.cn && request_path = user_order

第三步:添加位置数据

第四步:加密封装上报

五、问题和挑战

全面接入各类事件,技术层面最大的挑战在于如何避免性能瓶颈。处理不当的话,有可能造成操作卡顿等极端现象。

作者介绍:

付超红(chaohong.fu),大数据专家