数据人该知道的埋点体系(一)

楼主
【欢迎点我头像关注我】数据人交流和学习的社区


前言

 

埋点是将用户在App或者网页上各种行为记录下来并且上报的机制。埋点能有效的记录用户各式各样的行为,帮助我们更好的了解用户在我们平台的上行为习惯和使用体验,也能使我们朝着正确的方向迭代产品。本文将向大家介绍埋点的各个核心知识点。

 

埋点数据流向

 

埋点日志数据流向流程图

 

1.1

SDK 数据采集&上报

 

我们公司基于阿里云的开源SDK进行了二次开发,以适配与公司的业务情况。SDK的作用是将采集用户行为并且上报的代码进行打包成一个方法,各个埋点都通用采集的数据统一处理,个性化的采集数据进行抽象化。以便于开发能够快速高效的处理埋点任务。目前我们有iOS SDK、 Android SDK 、web SDK、小程序SDK这4个平台的埋点采集SDK。

 

SDK通用采集的数据主要有:

 

  • app_id 业务App标记Id

  • app_name 业务App标记名称

  • app_version 业务App的版本号

  • os 用户使用设备的系统

  • os_version os的系统版本

  • device_model 用户使用设备的品牌

  • local_timestamp 用户设备本地时间戳

  • reach_time 日志到达服务器时间戳

  • client_ip ip地址

  • carrier 网络类型

  • access 网络运营商

 

SDK采集主要就是以上的通用信息以及自定义的埋点信息(比如:页面、行为、用户Id等等)

 

1.2

日志实时采集与消费(LogHub)

 

我们使用了阿里云的LogHub服务进行日志采集与消费。LogHub主要功能:

 

  • 通过ECS、容器、移动端、开源软件、JS等接入实时日志数据(例如Metric、Event、BinLog、TextLog等)。

  • 提供实时消费接口,与实时计算及服务对接。

 

LogHub简介

 

1.3

日志初步清洗(LogHub-etl )

 

这一步的作用对日志进行一次简单的清洗。主要对加密的日志进行解密处理,变成可阅读的样式。对ip地址进行解析,处理成真正的位置信息。对最外层的json解析成各个字段。

 

1.4

投递数仓(LogShipper)

 

数据在日志系统后,我们需要将日志投递至存储系统中,这里我们也采有阿里云的数仓投递服务LogShipper。阿里云LogShipper服务算是一个稳定可靠的日志投递。将日志中枢数据投递至存储类服务进行存储。支持压缩、自定义Partition、以及行列等各种存储方式。

 

 

1.5

数仓ODS层

 

在数仓ODS层中进行针对性的清洗工作,主要清洗步骤如下图所示:

 

ODS层日志清洗流程图

 

1.6

数仓DW层

 

在数仓DW层各个业务的数据开发同学基于各个业务的情况处理出一些DW层级的日志表给数据分析的同学进行使用。

 

1.7

数仓ADS层

 

数仓的ADS层也就是数据应用层,是数仓中对外展示的部分。也就是运营产品日常工作使用的数据报表或者后台数据看板等等。在这一层也就是基于业务的需要,对用户行为日志进行各种统计汇总成数据指标进行分析。

 

埋点设计思路

 

如何利用埋点完整的记录和描述用户的一次行为,我们公司目前采用的事件模型来记录。

 

埋点事件模型

 

事件模型的埋点数据结构完整地描述了Who、When、Where、How 和 What 五个要素。

Who、When、How 由一般由埋点 SDK 自动生成,埋点设计人员在绝大多数情况下不必关心这三个要素,因此设计的核心是Where,What。

 

  • Page 表示app 中的各个页面的页面名称

  • args_json 表示需要设计的参数,其中较为核心的是以下三个,他们共同描述了‘对什么内容进行了什么操作‘:

  • Bhv_Type:

    具体的用户行为,我们称之为‘事件’;

  • LogTrackInfo:

    包含server上传的server下发内容的信息;

  • LogExtInfo:

    包含客户端上传的本地信息。

 

接下来重点来介绍这些核心参数的含义:

 

1). Page

 

Page定义:app 中的各个页面的页面名称

 

  • Page命名方式:

    业务模块_核心命名_页面类型 (首字母大写)。

    举例:

    育儿页面=Parent;

    商品详情页=Mall_Normal_Detail.

  • Page的规则:

  • 页面具有注册属性:

    即一个页面名只能给一个页面使用;

  • 页面使用前缀来区分业务模块。

  • 页面使用后缀来区分页面类型:

    主页,二级列表页,详情页,tab/楼层页。

 

2). Bhv_Type

 

Bhv_Type定义:具体的用户行为,我们称之为‘事件’,分为:

 

  • 内容事件:

    曝光=View;

    点击=Click。

  • 页面事件:

    页面浏览时长=Page_Read

  • App事件:

    App启动=App_Foreground

 

页面事件和App事件一般比较少,基本上可以枚举。我们重点在来介绍下内容事件。

 

  • 通用交互:

    特定动作;动作过程完成。

    一般就是曝光点击等。

  • 业务事件:

    特定动作;业务特有;动作过程完成。

    包括分享完成、加入购物车等等。

    是一种带着特殊含义的点击行为,需要特殊标记。

  • 按钮类:

    页面按钮;server/客户端本地配置;同类型有多个;

    logTrackInfo信息。

    有不要求过程完成。

    不需要行为结果成功返回,用户触发即可。

    一般用click+按钮名称信息来标记。

 

3). LogTrackInfo

 

LogTrackInfo定义:是server给出的埋点信息的载体,由参数和参数组组成。主要包括如下部分:

 

  • 结构配置信息:

    参数组在解释结构是什么,是哪一个;

    补充说明结构的父类信息;

    确认结构在页面位置。

    一般是多对参数组成,例如itemType,ItemId这种样式。

    有明确的参数规范。

  • 结构内容信息:

    结构内部跳转信息,也就是解释跳转后的内容是什么。

    有明确的参数规范。

  • 业务补充信息:

    除默认参数外额外需要增加参数来说明用户行为的业务补充说明。

    可以自由定义。

 

4). LogExtInfo

 

LogExtInfo定义:包含客户端上传的本地信息。客户端专用参数具有双向唯一性,即Duration只返回时长,返回时长只能用Duration。

 

以上4个埋点业务自定义内容参数就是埋点设计时核心的设计内容,基本能描述清楚90%以上的用户行为,另外复杂的用户行为还可以增加额外的参数来描述,这边就展开讲解。


分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0回帖数 1关注人数 15413浏览人数
最后回复于:2022-12-3 14:36

返回顶部 返回列表