智能化数据埋点建设的探索实践
数据采集是数据分析的基础,而埋点是最主要的采集方式。那么数据埋点采集到底都包括哪些问题?怎么做好数据埋点工作?本文作者就此问题给出自己的探索实践,与大家分享。
一、常见的埋点建设方案
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),大数据专家