客户端埋点治理 演讲人:王鹏知乎大数据 Contents 目录 埋点设计埋点采集埋点治理埋点管理 01埋点设计 埋点设计概念&难点 •客户端埋点是一种移动端应用开发中的数据采集方式,即在移动应用过程中插入采集逻辑代码,当用户进行某些操作或发生某些事件时,收集用户数据的行为和习惯,从而帮助开发者更好的理解和把握用户体验,实现产品优化以及提高用户满意度。 •对客户端而言,如果开发的功能埋点有问题,则需要等下一个版本才能修复,并且还有版本覆盖度的问题,修复埋点的这个时间窗口一般都比较长,会对业务的产品快速迭代产生很负面的影响。 •从业务的角度来说,客户端在发布功能之前,对于要做的数据分析不见得想得全,无计划收集非常多的埋点,对于埋点设计人员、客户端开发、测试人员来说是很大的工作量。 •反过来说,真正要用数时才发现重要的埋点没有采集,则会「点」到用时方恨少,因此,如何综合规划一个版本要采集的埋点,是一件颇有挑战的事情。 埋点设计事件的组成&维度 WHO 设备标识用户标识 client_id/oaid/idfa/user_hash_id WHEN 事件产生时的时间戳 client_time/send_time/server_time WHERE 事件发生的地点 app_name/client_ip_address/gps_info HOW 用什么方式产生了此次行为 utm/launch_type/push_info/open_url WHAT 用户对什么元素做了什么 channel/page/module/event_type/extra_info App生命周期内相对静态 由用户的具体行为生成 埋点设计事件类型概览 资源类型 资源标识符 事件类型(EventType) 位置标识符 生命周期标识符(runtime) 是否统一包含时长 埋点方式 App AppName AppOpen(程序活跃)AppClose(程序失活)AppCrash(程序崩溃)AppExit(程序进程退出) AppName+EventType App级别生命周期标识符(SDK自动生成):Session/AppRequestID AppClose&AppExit SDK自动埋点 Page PageID PageAppear(页面展示)PageContentLoad(页面内容加载完成)PageDisappear(页面消失) AppName+ChannelID+PageID+EventType 页面级别生命周期标识符(SDK自动生成):PageRequestID PageDisappear 声明式埋点(业务参数需要手动传入,上报时机由SDK统一控制) Module ModuleID ModuleClick(模块点击)ModuleView(模块展示)ModuleSlide(模块滑动)ModuleEdit(模块编辑)… AppName+ChannelID+PageID+ModuleID+EventType 依托于App和Page生命周期 否 声明式埋点+手动埋点 OtherSystemEvent EventID 非用户类的行为统计(网络、帧率等) AppName+ChannelID+EventID 依托于App生命周期 否 手动埋点 OtherBehavior EventID 上述类型不能覆盖的其它用户行为 AppName+ChannelID+PageID+EventID 依托于App和Page生命周期 否 手动埋点 埋点设计用户行为时间线 埋点设计举例回答详情页 •业务需要填充: •此次page_show的页面标识(page_identify) •此次page_show的业务参数(extra) •SDK自动生成此次pageshow的request_id,并填充基础信息 •基础信息包含事件发生时间、当前APP信息、用户启动来源、启动session_id等 •当页面消失时,SDK会自动计算页面停留时长并携带此次request_id上报page_disappear事件 •事件处理ETL流程会将上述page_disappear事件携带的时长补充到page_show供离线数据直接使用 •业务需要填充: •此次click的模块标识(module_identify) •此次click的业务参数(extra) •SDK自动关联此次click所在页面pageshow的request_id •SDK自动填充页面extra到page_extra,并填充基础信息 02埋点采集 优点 缺点 全埋点(无痕埋点) 节约开发成本,不需要提前预置埋点 流量成本高、埋点信息不精确、遗漏重要数据、数据需要预加工、无法避免收集私密信息 圈选埋点(可视化埋点) 节约开发成本,圈选可配置下发 圈选配置定位健壮性极低,很容易因为发版导致定位失败 声明式埋点 开发者只需要填充内容,不需要关心上报时机 研发成本相对较高 手动埋点 准确性高,针对性强,开发者可完全自定义上报内容和上报时机 研发成本高、业务侵入性强、修改不够灵活,需要依赖发版 埋点采集常见的采集方案&知乎实践 •知乎对一些系统级别的事件做了自动化埋点 •SDK会保障统一的在屏时长 •对页面、各类控件分别做了扩展和封装,用来支持声明式埋点 •SDK会保障统一的页面时长 •SDK统一接管曝光、点击时机,研发填充业务参数 •最佳实践:声明式埋点结合业务自定义下发数据 03埋点治理 埋点治理APP时长治理 埋点治理页面时长治理 埋点治理站内归因(埋点染色) 端上染色 •SDK会将关键路径携带到后续事件 •关键路径生命周期与页面回退绑定 •支持自定义染色信息 •可支持应用内来源回溯、漏斗分析、路径分析等 •对于一些订单/支付事件,染色的意义尤其重要 埋点治理业务应用 04埋点管理 埋点管理知乎埋点链路 埋点管理流程管理 埋点管理SDK上报通道质量保证 日志分级上报 •高优(App级别) •普通(强交互类型日志) •低优(模块曝光、APM等其他日志) 埋点链路稳定 •指数退避 •积压数据连续上报 •串行上报队列 埋点管理埋点管理系统 定义埋点语义 •页面语义: •App+频道+页面+类型(PV/PD) •动作语义: •App+频道+页面+模块+动作 •上述组合可以确定唯一一个事件 •语义包含各事件粒度的所有元数据 埋点管理语义埋点实施 埋点管理埋点验证 •选中一批待测语义 •扫码连接测试设备 •操作手机生产日志,验证服务自动关联语义,并校验参数情况 •测试同学手动确定待测语义测试结果 •生成对应的测试报告 —THANKS— 感谢您的观看