头图

网易云音乐开源全链路埋点方案-曙光埋点(dawn)

本文作者: 丁立

网易云音乐开源了曙光埋点 dawn,一个跨多端的全链路埋点解决方案,旨在构造一个完美的数据理想国。曙光埋点创造性的提出了埋点虚拟树(VTree),并在此基础上实现了诸多能力,解决大前端侧埋点困难、精度差、不稳定、质量不高的问题,并且设计一套完整的端侧全链路追踪能力,完美助力大数据用户画像、实时归因/离线归因分析、漏斗分析、大数据推荐场景。

曙光埋点从埋点设计、到大前端(iOS、Android、H5、RN等)开发、以及埋点校验&稽查、再到埋点数据使用的全链路服务,让客户端的埋点变得真正的好用。目前已经广泛应用于云音乐各个主要APP。

行业难点&痛点

  1. 埋点开发成本高:端侧埋点开发,往往是逐个坑位进行,坑位上大量且重复的参数,开发成本高昂;
  2. 埋点精准度低:资源曝光埋点,复杂度高且精确低,缺少全站统一的曝光策略;
  3. 埋点模型不稳定:mspm以及x-path形式的埋点,单独坑位以及自动坑位方案,很难保障埋点模型的稳定;
  4. 链路追踪能力弱:端侧没有链路追踪能力,往往需要借助数据侧对离线数据进行复杂分析得来,成本高;
  5. 埋点质量管控难:从设计、开发,再到验证、以及上线,QA人力来保障成本大、收益小。

特征

  1. 高性能虚拟树:曙光埋点提出了埋点对象和虚拟树(后面称VTree),view声明成一个对象,原始view树高性能的导出一颗VTree,VTree构建了我们整个曙光埋点方案的基石;
  2. 埋点内容结构化:借助于VTree,我们的埋点内容是结构化的,是具备自我描述能力的,天然具备了上下层级关系,继而做到埋点内容承载坑位、内容、上下层级关系,从而得出有意义的、稳定的spm(Super Position Model)以及scm(Super Content Model);
  3. 全站统一的曝光策略:跨多端统一的资源曝光策略,做到所见即曝光开始,不可见即曝光结束,大大减轻了开发人员的开发成本和出错几率;
  4. 全链路追踪能力: 端侧强大的链路追踪能力,100%可追踪用户日志的操作链路关系,完美助力大数据实时归因分析、离线归因分析、漏斗分析、大数据推荐场景,做到不限深度,不限广度的数据分析能力;
  5. 完整的埋点迭代管理:强大的埋点迭代管理平台,专门承载互联网app快速迭代场景,完整管理历史记录和多版本并行;
  6. 多机制的埋点质量保障:线下埋点校验做到开发埋点免去了QA人力,同时保障了埋点上线质量;线上数据稽查保障以全自动的方式发现线上埋点问题;
  7. 全平台覆盖:覆盖iOS、Android、RN、以及站外内H5,而且极易的可扩展Flutter、weex等其他平台。

更多信息可以参见文章 云音乐曙光埋点:还原数据理想国

使用曙光

曙光埋点覆盖了iOS、Android、H5、RN,以及埋点管理平台(easyinsight平台),BI分析师在埋点平台设计埋点VTree,端侧开发人员以极低的开发成本、声明式的开发方式导出VTree,结合easyinsight平台的上线前埋点校验以及线上数据稽查,即提高了开发效率,又保障了埋点质量。

更加详细的曙光埋点使用,参见 曙光埋点-文档

行业对比

曙光 与 x-path系列

x-path系列方式的埋点,比较有代表性的是Mixpanel(游戏)、GrowingIO、网易HubbleData、以及美团,主要特点是强化无痕埋点,埋点坑位后关联,数据后处理;适用的场景主要是一些UI复杂度低,比较固定的场景,这样可以使得从view原始树生成x-path,用来唯一标识一个埋点坑位变得可行。比如典型使用场景是按钮的点击、页面的曝光等场景,对高精度的资源位曝光有些无力。其中美团在自有动态化方案业务场景做可视化埋点,曙光目前也在H5活动场景支持可视化埋点。

但是缺点也很明显,就是不适用复杂业务场景,埋点模型不稳定,对于埋点质量要求特别高的业务来说无法使用该方案。埋点坑位后关联,数据后处理,成本也很大,使用也诸多不便。

功能曙光x-path系列
VTree可视化支持(贯穿全流程)
可视化埋点支持H5支持(美团)
埋点内容结构化层级化 & 可高度定制平铺(参数冗余、信息量少)
埋点模型稳定(spm&scm)高度稳定低(后关联)
端侧开发成本一般(声明式)
全链路链路追踪强大(统一范式)一般(依托大数据后处理)
全平台统一的曝光策略抹平列表&非列表;全平台统一;弱化曝光埋点
埋点校验&数据稽查强大(可视化校验 & 线上稽查)

曙光 与 坑位mspm系列

坑位mspm系列的埋点方案,是目前行业内大多数公司采用的方案,比如腾讯、字节、快手、美团、以及早期的云音乐;该方案埋点坑位独立,往往通过机器生成的 mspm 字符串来标识埋点坑位,但是通常mspm都是无意义的字符串。这个方案可灵活适应各种复杂业务场景,并且依托大公司强大的大数据能力,也可以实现很不错的漏斗分析、数据归因等能力。

但是客户端开发/维护成本高,特别是资源位曝光埋点,做不到端内列表、非列表策略统一,更做不到全平台策略统一,实现起来又比较困难,这也是最容易产生bug的地方。由于端侧不参与链路追踪,精确归因能力大数据侧比较困难,没有统一范式来统一处理。

功能曙光x-path系列
VTree可视化支持(贯穿全流程)
埋点内容结构化层级化 & 可高度定制平铺(参数冗余、信息量少)
端侧开发成本一般(声明式)
全链路链路追踪强大(统一范式)一般(依托大数据后处理)
全平台统一的曝光策略抹平列表&非列表;全平台统一;弱化曝光埋点
曝光埋点高精度高精度(处理遮挡)
埋点校验&数据稽查强大(可视化校验 & 线上稽查)

曙光 与 四段式spm

四段式spm是在坑位mspm系列的基础上,赋予spm层级关系(站点.页面.区块.区块内)信息,阿里大量使用该方案,早期云音乐也做过这方面的尝试;该方案让埋点坑位有一定的意义,在埋点管理过程中也更加方便一些。

但是四段式也就限定了形式,灵活度降低,也缺少端侧明确的VTree结构,对于埋点稳定性、埋点校验/数据稽查、埋点内容结构化,都有一些能力局限。

功能曙光x-path系列
VTree可视化支持(贯穿全流程)
埋点迭代管理可视化、适用迭代并行一般
埋点内容结构化层级化 & 可高度定制平铺(参数冗余、信息量少)
端侧开发成本一般(声明式)
全链路链路追踪强大(统一范式)一般(依托大数据后处理)
全平台统一的曝光策略抹平列表&非列表;全平台统一;弱化曝光埋点
曝光埋点高精度高精度(处理遮挡)
埋点校验&数据稽查强大(可视化校验 & 线上稽查)

云音乐落地

由于曙光埋点可以带来的这些好处,截止到目前为止,云音乐APP已经全面拥抱曙光,覆盖几乎全部的P0/P1业务场景,从双端客户端、H5、RN等,到数仓、大数据推荐等,已经全数切换到曙光。

依托于稳定的VTree结构,以及强大的埋点校验&埋点数据稽查,QA人力已完全释放,数据相关Bug也大幅下降,已经很长时间没有出现过由于资源曝光不精确而导致的数据问题了。

社区

dawn 计划建设一个关于端侧埋点的开放社区,如果你对客户端侧埋点或者埋点数据分析感兴趣,请与我们联系,或者可以在 dawn-discussions 跟我们进行交流。

最后


本文发布自网易云音乐技术团队,文章未经授权禁止任何形式的转载。我们常年招收各类技术岗位,如果你准备换工作,又恰好喜欢云音乐,那就加入我们 grp.music-fe(at)corp.netease.com!

网易云音乐技术团队
网易云音乐大前端技术团队专栏

网易云音乐技术团队

3.3k 声望
3.4k 粉丝
0 条评论
推荐阅读
云音乐低代码 + ChatGPT 实践方案与思考
随着大语言模型(LLM)不断涌现的各种能力,生成式 AI 的应用场景变得越来越广阔。诸如 ChatGPT 这类大语言模型在生成代码方面非常的高效,因此对于如何将 LLM 的能力与低代码产品进行结合,业界已经有了很多的讨...

云音乐技术团队2阅读 122

封面图
安全地在前后端之间传输数据 - 「3」真的安全吗?
在「2」注册和登录示例中,我们通过非对称加密算法实现了浏览器和 Web 服务器之间的安全传输。看起来一切都很美好,但是危险就在哪里,有些人发现了,有些人嗅到了,更多人却浑然不知。就像是给门上了把好锁,还...

边城31阅读 7.2k评论 5

封面图
涨姿势了,有意思的气泡 Loading 效果
今日,群友提问,如何实现这么一个 Loading 效果:这个确实有点意思,但是这是 CSS 能够完成的?没错,这个效果中的核心气泡效果,其实借助 CSS 中的滤镜,能够比较轻松的实现,就是所需的元素可能多点。参考我们...

chokcoco20阅读 2.1k评论 2

在前端使用 JS 进行分类汇总
最近遇到一些同学在问 JS 中进行数据统计的问题。虽然数据统计一般会在数据库中进行,但是后端遇到需要使用程序来进行统计的情况也非常多。.NET 就为了对内存数据和数据库数据进行统一地数据处理,发明了 LINQ (L...

边城17阅读 1.9k

封面图
【已结束】SegmentFault 思否写作挑战赛!
SegmentFault 思否写作挑战赛 是思否社区新上线的系列社区活动在 2 月 8 日 正式面向社区所有用户开启;挑战赛中包含多个可供作者选择的热门技术方向,根据挑战难度分为多个等级,快来参与挑战,向更好的自己前进!

SegmentFault思否20阅读 5.6k评论 10

封面图
过滤/筛选树节点
又是树,是我跟树杠上了吗?—— 不,是树的问题太多了!🔗 相关文章推荐:使用递归遍历并转换树形数据(以 TypeScript 为例)从列表生成树 (JavaScript/TypeScript) 过滤和筛选是一个意思,都是 filter。对于列表来...

边城18阅读 7.7k评论 3

封面图
Vue2 导出excel
2020-07-15更新 excel导出安装 {代码...} src文件夹下新建一个libs文件夹,新建一个excel.js {代码...} vue页面中使用 {代码...} ===========================以下为早期的文章今天在开发的过程中需要做一个Vue的...

原谅我一生不羁放歌搞文艺14阅读 20k评论 9

网易云音乐技术团队

3.3k 声望
3.4k 粉丝
宣传栏