原文源自:http://www.woshipm.com/pmd/751876.html
本文作者将从一个埋点系统设计者的角度通俗系统地讲解埋点的全过程,涉及到埋点基础知识、埋点作用、埋点方法、埋点数据流程、埋点应用、埋点管理等信息。
埋点是互联网领域非常重要的数据信息获取方式。埋点采集信息的过程一般也称作日志采集。
通俗点讲,就是在APP或者web产品中植入一段代码,监控用户行为事件(例如某个页面的曝光)。用户一旦触发了该事件,就会上传埋点代码中定义的、需要上传的有关该事件的信息。
常见的信息包括:用户会话id,用户id,当前页面编码,当前事件编码,触发时间,用户设备id,ip信息等等。
可以看到,除了像电商购物提交的订单报表等信息是用户填写之后,通过业务数据库中进行读取的;用户在APP或web产品上的行为信息,更多需要靠埋点方式进行获取。典型的应用场景就是某个运营活动,页面的点击量(PV)有多少,点击用户数目(UV)有多少,都是用埋点数据进行计算,来对运营活动有数据上的评估。
当然这些信息并不是消费一次就没有用处了。通过埋点收集到的信息,可以作为监控,看到APP的长期表现,也可以作为基础原料,进行复杂的运算,用于用户标签、渠道转化分析、个性推荐等等。
按照信息采集发生的位置来分,埋点可分为客户端埋点、服务端埋点、H5埋点。客户端埋点即监控APP当地发生事件的埋点,例如APP某页面曝光,一旦APP客户端加载了该页面,客户端埋点就会发送相应信息;H5埋点可能是在APP中跳转到的某个H5页面(如运营活动页)上的埋点,也可能是web某页面上的埋点。
下文重点讲的是客户端或H5埋点的方式,服务端埋点一般较少,埋点方式也较为通用。
1、手动埋点
这是埋点最古老的方式。具体的步骤一般是,产品经理在提需求,需要在APP某个页面的某个事件进行埋点,在这个过程中,产品会对该页面和事件按照一套规则进行编码命名(若事件数不多,页面编码命名这一层也可以省略),以便后续通过该编码对上传上来的信息进行辨认;同时,产品也会将这一埋点需要上传的参数告知前端开发。开发明确需求后就会进行埋点。
优点:
缺点:
2、半自动埋点
看了上面的手动埋点描述,可能很多人都会有疑问,所有的埋点都需要手工去埋是否有必要。就比如100个埋点中,可能有80个埋点都是页面曝光事件,这类埋点非常相似,完全可以用一套埋点手段去解决。那么半自动埋点就是为了解决这种问题,把部分人工的工作进行标准化,做成SDK。阿里埋点实践中的“黄金令箭”方案就是半自动埋点的典型例子。PM提埋点需求时候,直接将自己申请的埋点进行注册,调用符合自己要求的埋点SDK,并进行下发,那么APP或web产品中就会集成该段埋点代码,而不再需要沟通前端开发进行埋点。当然,在半自动埋点不完善的阶段,可能调用SDK的工作是由开发完成的。
友盟、神策分析、growing IO等传统的商用化埋点服务,也均是通过埋点SDK这种手段实现的。另外值得一提的是,近来兴起的可视化埋点方案(腾讯MTA、百度移动统计近期也刚新加入了该功能),也算是半自动埋点的一种。通过可视化埋点的方案,PM可以直接看到APP或web产品的界面,在界面上捕捉需要进行埋点的元素如页面或控件等,再通过可视化的点击录入过程,赋予埋点业务含义。也就是说,可视化埋点方案可以通过所见即所得的方式,方便埋点需求方进行埋点。
优点:
缺点:
3、全自动埋点
全自动埋点在一些宣传当中也被称为“无痕埋点”。这种方式和上文的手动和半自动埋点有产生方式上的本质不同。手动和半自动埋点是需求方需要了,才去埋。而全自动埋点则是不管需不需要,将所有的点都埋了。通常这种埋点也是通过SDK实现的,这种SDK不需调用,已经直接嵌入在APP中。因为全自动埋点都是自动生成的,用于对每一个埋点进行标识的埋点编码也是按照既定规则进行生成。通常这种标识是不可读的,需要PM和开发沟通,对埋点编码进行和业务含义上的映射。
全自动埋点方法听起来挺简单粗暴,优点和缺点也同样突出。
优点:
缺点:
因而,全自动埋点适用于产品比较小,页面、控件少,上传的数据也较少的情况。同样,全自动埋点也可以配合可视化埋点方案,此时可视化页面中不仅仅是捕捉到页面或控件,同样可以显示其已存在的埋点编码名称,埋点需求方可将该不易读的编码录入到可读的业务含义上。
正如上文所提的,埋点是互联网公司获取数据信息的重要方式。数据的全流程一般涉及到采集、传输、加工、存储、应用等过程。下面就将按照这个顺序,对埋点全流程进行说明。最后,加入了一个埋点系统设计者对埋点管理过程的理解,期待同行的交流~
上文提到了埋点信息采集的方式,那么具体埋点信息采集的过程是怎么样的呢?
以H5网页某页面曝光埋点为例子,先讲一下网页页面展现的流程。框图如下:
具体细节如下:
这样就完成了一个页面的曝光展示。如果对该曝光事件加上埋点,前两步是没有影响的,在第三步:服务器在返回HTTP内容时,会加入一段与埋点相关的脚本代码(如上文埋点方式部分所说,这段代码可能是手动埋点写入的,也可能是半自动或全自动埋点方式写入的)。
客户端或浏览器解析到这部分内容时,会向埋点日志接收服务器(以下简称埋点服务器)发送一个请求。这个请求中即带有我们通过埋点想获得的宝贵的数据信息。埋点服务器接受到请求后,会返回一个已接收的信息给客户端。同时,埋点服务器会将这些信息传输到后续环节。如下图:
这里再说一下和数据准确性有关的内容。在客户端向埋点服务器发送信息的过程中,可能存在丢包,即数据发送失败信息没有传输过去的情况。该发送过程一般通过POST格式,发送JSON串信息,具体方式分两种:一种是单条发送;一种是在本地打包成zip包,积累一定量后发送。两种方式中,zip的丢包情况更严重些。所以PM在看数据时候,也应当清楚,数据会有一定误差。(据作者实践经验,单条POST格式数据误差一般不超过2%)
传输流程:
埋点数据产生之后,被埋点服务器接收,有些时候会进行解析操作,然后会通过消息订阅通道例如kafka之类进行消息的分发,进入离线或实时的储存中,用于后续的计算和分析。
加工:经过加工存储这一步后,埋点数据基本可以从收集到的原材料状态变为可以为业务服务的有用数据了。上文提到,埋点数据都是一条一条,是用户触发埋点对应事件时上传的。
这些数据可能包括:用户会话id,用户id,当前页面编码,当前事件编码,触发时间,用户设备id,ip信息等,这些零散的信息需要通过加工处理进行聚合,变成更加通用常用的数据,便于后续调用。
例如一些通用的处理:针对APP首页曝光事件,选取当日首页曝光事件上传的数据条数,对用户id去重并加和即可以得到当日的UV。
存储:对于离线存储来说,埋点原始数据会以表(类似excel表)的形式存储于数据仓库的原始数据层,经过上述处理过的数据,会以另外一张表的形式存储于数据仓库的汇总层。如果数据仓库建设比较完善,通用的业务数据,直接从汇总层甚至更上层的应用层中取即可,而不必再去取原始层的埋点数据,省去了每次计算的工作量。
最原始的埋点管理方式是用文档或表格记录下来埋点的编码命名、业务含义及其他必备信息,在埋点业务方内部共享即可。
但当公司的产品越做越多越做越大,相应的埋点就会越多(多达成千甚至上万)。对互联网规模企业,管理大量埋点往往也需要配套的工具:埋点信息管理系统。
埋点信息管理系统主要有的功能:
埋点管理是建立在埋点生成、传输、储存等过程的基础之上的。管理的重点和难点,在于大量埋点物理编码(命名编码)和业务含义的对应。这个对应是将不可读的英文编码字段和易于理解的汉语业务含义连接起来的过程。对应可能是一对多,多对一,甚至多对多的。
1.对应过程在手动埋点中,反应在PM与开发沟通及开发具体埋点行为中。首先PM需要根据业务含义,选择要埋的点并取或生成一个物理编码;之后开发按照这个对应关系,将物理编码写入到业务含义对应的页面或事件上。这个过程是抽象且容易出错的。
2.对应过程在全自动埋点中,反应在PM和开发沟通并“认领”自动埋点的行为中。PM需要向开发了解,已经存在的某物理编码代表的是什么意思即其业务含义是什么,然后将这两者关联。往往还需要将IOS和安卓两个不同的物理编码关联到同一业务含义上,因为这两个物理编码实际就是同一页面或控件。这个过程,也是抽象易错的。
抽象易错,主要是因为需要凭脑中想象将两种文字编码级的内容进行关联。上文提到的可视化埋点则可通过直观的APP展现,显示出物理编码及业务含义,解决抽象的问题。伴随着产品迭代埋点数目增长,似乎有效的可视化埋点是大公司做埋点管理有必要尝试的方向。
原文源自:http://www.woshipm.com/pmd/751876.html
本文作者将从一个埋点系统设计者的角度通俗系统地讲解埋点的全过程,涉及到埋点基础知识、埋点作用、埋点方法、埋点数据流程、埋点应用、埋点管理等信息。
埋点是互联网领域非常重要的数据信息获取方式。埋点采集信息的过程一般也称作日志采集。
通俗点讲,就是在APP或者web产品中植入一段代码,监控用户行为事件(例如某个页面的曝光)。用户一旦触发了该事件,就会上传埋点代码中定义的、需要上传的有关该事件的信息。
常见的信息包括:用户会话id,用户id,当前页面编码,当前事件编码,触发时间,用户设备id,ip信息等等。
可以看到,除了像电商购物提交的订单报表等信息是用户填写之后,通过业务数据库中进行读取的;用户在APP或web产品上的行为信息,更多需要靠埋点方式进行获取。典型的应用场景就是某个运营活动,页面的点击量(PV)有多少,点击用户数目(UV)有多少,都是用埋点数据进行计算,来对运营活动有数据上的评估。
当然这些信息并不是消费一次就没有用处了。通过埋点收集到的信息,可以作为监控,看到APP的长期表现,也可以作为基础原料,进行复杂的运算,用于用户标签、渠道转化分析、个性推荐等等。
按照信息采集发生的位置来分,埋点可分为客户端埋点、服务端埋点、H5埋点。客户端埋点即监控APP当地发生事件的埋点,例如APP某页面曝光,一旦APP客户端加载了该页面,客户端埋点就会发送相应信息;H5埋点可能是在APP中跳转到的某个H5页面(如运营活动页)上的埋点,也可能是web某页面上的埋点。
下文重点讲的是客户端或H5埋点的方式,服务端埋点一般较少,埋点方式也较为通用。
1、手动埋点
这是埋点最古老的方式。具体的步骤一般是,产品经理在提需求,需要在APP某个页面的某个事件进行埋点,在这个过程中,产品会对该页面和事件按照一套规则进行编码命名(若事件数不多,页面编码命名这一层也可以省略),以便后续通过该编码对上传上来的信息进行辨认;同时,产品也会将这一埋点需要上传的参数告知前端开发。开发明确需求后就会进行埋点。
优点:
缺点:
2、半自动埋点
看了上面的手动埋点描述,可能很多人都会有疑问,所有的埋点都需要手工去埋是否有必要。就比如100个埋点中,可能有80个埋点都是页面曝光事件,这类埋点非常相似,完全可以用一套埋点手段去解决。那么半自动埋点就是为了解决这种问题,把部分人工的工作进行标准化,做成SDK。阿里埋点实践中的“黄金令箭”方案就是半自动埋点的典型例子。PM提埋点需求时候,直接将自己申请的埋点进行注册,调用符合自己要求的埋点SDK,并进行下发,那么APP或web产品中就会集成该段埋点代码,而不再需要沟通前端开发进行埋点。当然,在半自动埋点不完善的阶段,可能调用SDK的工作是由开发完成的。
友盟、神策分析、growing IO等传统的商用化埋点服务,也均是通过埋点SDK这种手段实现的。另外值得一提的是,近来兴起的可视化埋点方案(腾讯MTA、百度移动统计近期也刚新加入了该功能),也算是半自动埋点的一种。通过可视化埋点的方案,PM可以直接看到APP或web产品的界面,在界面上捕捉需要进行埋点的元素如页面或控件等,再通过可视化的点击录入过程,赋予埋点业务含义。也就是说,可视化埋点方案可以通过所见即所得的方式,方便埋点需求方进行埋点。
优点:
缺点:
3、全自动埋点
全自动埋点在一些宣传当中也被称为“无痕埋点”。这种方式和上文的手动和半自动埋点有产生方式上的本质不同。手动和半自动埋点是需求方需要了,才去埋。而全自动埋点则是不管需不需要,将所有的点都埋了。通常这种埋点也是通过SDK实现的,这种SDK不需调用,已经直接嵌入在APP中。因为全自动埋点都是自动生成的,用于对每一个埋点进行标识的埋点编码也是按照既定规则进行生成。通常这种标识是不可读的,需要PM和开发沟通,对埋点编码进行和业务含义上的映射。
全自动埋点方法听起来挺简单粗暴,优点和缺点也同样突出。
优点:
缺点:
因而,全自动埋点适用于产品比较小,页面、控件少,上传的数据也较少的情况。同样,全自动埋点也可以配合可视化埋点方案,此时可视化页面中不仅仅是捕捉到页面或控件,同样可以显示其已存在的埋点编码名称,埋点需求方可将该不易读的编码录入到可读的业务含义上。
正如上文所提的,埋点是互联网公司获取数据信息的重要方式。数据的全流程一般涉及到采集、传输、加工、存储、应用等过程。下面就将按照这个顺序,对埋点全流程进行说明。最后,加入了一个埋点系统设计者对埋点管理过程的理解,期待同行的交流~
上文提到了埋点信息采集的方式,那么具体埋点信息采集的过程是怎么样的呢?
以H5网页某页面曝光埋点为例子,先讲一下网页页面展现的流程。框图如下:
具体细节如下:
这样就完成了一个页面的曝光展示。如果对该曝光事件加上埋点,前两步是没有影响的,在第三步:服务器在返回HTTP内容时,会加入一段与埋点相关的脚本代码(如上文埋点方式部分所说,这段代码可能是手动埋点写入的,也可能是半自动或全自动埋点方式写入的)。
客户端或浏览器解析到这部分内容时,会向埋点日志接收服务器(以下简称埋点服务器)发送一个请求。这个请求中即带有我们通过埋点想获得的宝贵的数据信息。埋点服务器接受到请求后,会返回一个已接收的信息给客户端。同时,埋点服务器会将这些信息传输到后续环节。如下图:
这里再说一下和数据准确性有关的内容。在客户端向埋点服务器发送信息的过程中,可能存在丢包,即数据发送失败信息没有传输过去的情况。该发送过程一般通过POST格式,发送JSON串信息,具体方式分两种:一种是单条发送;一种是在本地打包成zip包,积累一定量后发送。两种方式中,zip的丢包情况更严重些。所以PM在看数据时候,也应当清楚,数据会有一定误差。(据作者实践经验,单条POST格式数据误差一般不超过2%)
传输流程:
埋点数据产生之后,被埋点服务器接收,有些时候会进行解析操作,然后会通过消息订阅通道例如kafka之类进行消息的分发,进入离线或实时的储存中,用于后续的计算和分析。
加工:经过加工存储这一步后,埋点数据基本可以从收集到的原材料状态变为可以为业务服务的有用数据了。上文提到,埋点数据都是一条一条,是用户触发埋点对应事件时上传的。
这些数据可能包括:用户会话id,用户id,当前页面编码,当前事件编码,触发时间,用户设备id,ip信息等,这些零散的信息需要通过加工处理进行聚合,变成更加通用常用的数据,便于后续调用。
例如一些通用的处理:针对APP首页曝光事件,选取当日首页曝光事件上传的数据条数,对用户id去重并加和即可以得到当日的UV。
存储:对于离线存储来说,埋点原始数据会以表(类似excel表)的形式存储于数据仓库的原始数据层,经过上述处理过的数据,会以另外一张表的形式存储于数据仓库的汇总层。如果数据仓库建设比较完善,通用的业务数据,直接从汇总层甚至更上层的应用层中取即可,而不必再去取原始层的埋点数据,省去了每次计算的工作量。
最原始的埋点管理方式是用文档或表格记录下来埋点的编码命名、业务含义及其他必备信息,在埋点业务方内部共享即可。
但当公司的产品越做越多越做越大,相应的埋点就会越多(多达成千甚至上万)。对互联网规模企业,管理大量埋点往往也需要配套的工具:埋点信息管理系统。
埋点信息管理系统主要有的功能:
埋点管理是建立在埋点生成、传输、储存等过程的基础之上的。管理的重点和难点,在于大量埋点物理编码(命名编码)和业务含义的对应。这个对应是将不可读的英文编码字段和易于理解的汉语业务含义连接起来的过程。对应可能是一对多,多对一,甚至多对多的。
1.对应过程在手动埋点中,反应在PM与开发沟通及开发具体埋点行为中。首先PM需要根据业务含义,选择要埋的点并取或生成一个物理编码;之后开发按照这个对应关系,将物理编码写入到业务含义对应的页面或事件上。这个过程是抽象且容易出错的。
2.对应过程在全自动埋点中,反应在PM和开发沟通并“认领”自动埋点的行为中。PM需要向开发了解,已经存在的某物理编码代表的是什么意思即其业务含义是什么,然后将这两者关联。往往还需要将IOS和安卓两个不同的物理编码关联到同一业务含义上,因为这两个物理编码实际就是同一页面或控件。这个过程,也是抽象易错的。
抽象易错,主要是因为需要凭脑中想象将两种文字编码级的内容进行关联。上文提到的可视化埋点则可通过直观的APP展现,显示出物理编码及业务含义,解决抽象的问题。伴随着产品迭代埋点数目增长,似乎有效的可视化埋点是大公司做埋点管理有必要尝试的方向。