php 服务端埋点,客户端埋点方案总结
前言
在软件使用过程中,会产生了大量的用户数据和行为数据,而这些数据记录了用户的行为和习惯等信息,为了给用户提供更好的体验,会对这些用户数据进行分析和利用,用来提升用户的体验,而数据采集作是整个链路上重要的一环,起到了很大作用,而埋点作为数据采集的手段,同样发挥着重要作用。
数据采集流程
一、埋点需求分析
1.埋点需求背景分析
首先我们要清楚埋点需求是什么,埋点主要是进行一些数据收集的行为,通过收集这些数据,数据使用者通过对数据进行分析,来实现各自的需求。产品可以用来分析用户使用习惯,验证产品方案效果,研发可以通过埋点监控应用质量,提升应用品质,AI工程师可以通过数据训练算法,实现搜索推荐等功能。为了达到各方的述求,对埋点数据会有着不同的要求。
2.埋点痛点分析
1)业务方痛点:
开发工期紧张,不能支持埋点添加和修改。
埋点必须跟版本走,不能立即生效。
2)开发痛点:
开发埋点工作量大,会占用业务开发时间。
修改业务代码,可能会影响埋点功能,不能及时发现。
3.埋点数据分析
1)数据时效性:
对于不同的使用方,对数据的时效性要求也不同,对于监控和一些在线系统,往往需要实时数据,而对于一些产品分析,失效要求会降低,比如T+1天就可以满足需求,所以埋点系统需要针对不同的使用方,设计不同的数据采集时效。
2)数据准确性:
数据准确性主要体现为数据采集准确性,特别是对于一些特定流程的数据采集,针对不同需求,进行不同方式的采集,比如页面曝光,页面浏览量,如何做到数据精准,满足产品和研发以及项目管理方的述求。
3)数据多元性:
数据多元性是指从多个维度进行数据采集,不同维度的数据可以展示不同的信息,同时不同维度的信息又有相互关联性,可以多方位了解信息和看待问题。
二、埋点事件
1.1事件定义
为了对用户行为进行统计和分析,我们使用一类被称为 "事件" 的消息来记录用户行为。
1.2事件组成
1.who:用户信息,身高、体重、性别、职业等等
2.when:时间信息,时间发生时间
3.where:环境信息 设备环境、网络环境、业务环境
4.what:事件信息 事件标识、事件参数,比如点击了哪个按钮,按钮标题。
1.3事件维度
1.访问级维度,浏览器访问还是移动设备访问。
2.页面级维度,访问的哪一个页面,首页还是个人信息页。
3.动作级维度, 点击、曝光还是滑动触发。
1.4事件类型
1.无埋点事件,指不需要额外开发,通过监听、通知进行的埋点。
2.埋点事件,指开发阶段,手动进行的埋点。
三、埋点采集方式
1.代码埋点
代码埋点,即在需要埋点的节点调用接口直接上传埋点数据,友盟、百度统计等第三方数据统计服务商大都采用这种方案,主要通过命令式代码调用,如下面这种方式:
[XMData eventId:@"123" param:@{@"pagename":@"首页"}];
优点:
准确性高,针对性强,可以进行特定场景埋点。
可以灵活获取业务数据参数。
缺点:
开发工作量大,每个埋点都需要开发实现。
代码入侵性大,和业务代码混杂在一起,容易出错。
后续维护比较麻烦,每次改动,都要以来开发修改。
修改不够灵活,需要依赖发版。
2.可视化埋点
可视化埋点,即通过可视化工具配置采集节点,在后台配置埋点数据,在客户端自动解析配置并上报埋点数据,从而实现所谓的“无痕埋点”, 代表方案是已经开源的Mixpanel;
优点:
埋点比较简单,不依赖开发。
灵活性大大提高,可以通过后台配置,添加删除埋点。
缺点:
前期开发成本大,SDK和后台开发成本都增加。
只能针对一些简单业务场景,不能获取复杂业务参数。
3.无埋点
无埋点,它并不是真正的不需要埋点,而是客户端利用hook拦截系统的响应事件,自动采集全部事件并上报埋点数据,在后端数据计算时过滤出有用数据,代表方案是国内的GrowingIO。
优点:
数据可回溯性,如果想看某个埋点,可以直接去后台参考,不需要依赖发版。
埋点覆盖面更全面,进行全面行为数据记录。
缺点:
数据量大,数据传输和数据存储要求高。
无用数据较多,浪费资源。
只能记录简单场景埋点。
四、埋点管理
1.埋点项目流程
1)业务产品提出埋点需求
包括业务数据、用户行为等数据
2)数据产品制定埋点方案
根据业务产品需求,制定合理的埋点方案
3)埋点方案评审
包括业务产品、数据产品、开发、测试,一起沟通埋点方案合理性。
4)开发埋点
开发根据业务埋点进行买点开发和自测。
5)测试埋点
测试根据业务埋点方案,进行测试验证。
6)埋点上线
埋点测试合格后,跟随业务一起上线。
7)埋点数据统计和可视化
对产生的业务埋点进行数据分析,后台可视化展示,供相关需求方使用。
埋点项目流程.001.jpeg
2.埋点开发和测试
2.1埋点开发
1.代码开发
主要涉及代码埋点,必须要研发手工埋点。
2.后台配置
可以针对所有埋点,不只是可视化埋点,设置配置项,比如上报网络,上报时效,每日流量熔断等等。
2.2埋点测试
1.日志log查看
测试埋点的时候,由于某些埋点要延时上报,不能实时查看,可以通过埋点log实时查看,还有是否触发。
2.后台数据查看
通过后台数据,可以查看埋点真实上报情况,确认埋点正确性。
3.埋点质量监控
有时因为开发同学错误修改一段代码,没考虑到会影响埋点,导致线上埋点事件丢失,很长时间没有发现,后来被产品发现,但是修复之前的埋点数据就没有,这种情况在实际开发过程中常常发生,如何避免这种事情发生呢?可以通过埋点质量监控来实现。可以检测必传参数是否确实,是否在合理范围等,在后台配置异常情况阈值,如果超出正常范围,发出报警提示,可以及早发现问题。
4.埋点数据分析和可视化
4.1数据分析
根据埋点数据,分析用户行为,比如分析某个业务的转换率,分析页面用户喜欢点击的位置,广告点击率等数据,用于后续业务改进。
4.2数据可视化
以电商数据为例,通过埋点记录的页面PV,UV等数据都可以,可视化的方式展示在页面上,如下图所示。
电商数据
php 服务端埋点,客户端埋点方案总结相关推荐
- ssm配置socket_ssm框架中集成websocket实现服务端主动向客户端发送消息
找了很多配置文档及实例说明,也还是没能成功,最终在csdn博客中发现了基于stomp的消息推送的文章, 下面整理自csdn博客,https://blog.csdn.net/u013627689/art ...
- 服务端渲染vs客户端渲染到前后端同构
关于服务端渲染与客户端渲染的优劣,互联网上已经有过很多的文章进行过分析,在这里我谈一下我个人的见解. 首先,还是来老生常谈一下关于两种渲染方式的主要优劣: 服务端渲染(仅列出当下最突出的优劣): 优: ...
- netty tcp服务端主动断开客户端_「Netty核心技术」6-ChannelPipeline源码
ChannelPipeline是Channelhandler的容器,它负责ChannelHandler的管理和事件拦截与调度. 土话: ChannelPipeline就是用来管理Channelhand ...
- websocket服务端和html客户端进行二进制数据交互
一.概念和理论理解 1.HTTP HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接. 无状态:每次连接只处理一个请求,请求结束后断开连接. 无连接:对于事务处理没有 ...
- 内网穿透-利用frp进行远程桌面控制(window服务端,window客户端)
内网穿透-利用frp进行远程桌面控制(window服务端,window客户端) 参考链接 https://blog.csdn.net/weixin_38416696/article/details/1 ...
- 【踩坑】cat3.x服务端部署, springboot客户端接入
[踩坑]cat3.x服务端部署, springboot客户端接入 前言 服务器部署问题 1. 数据库连不上 2. 不要创建server.xml 客户端注册问题 1. client.xml信息错误 2. ...
- android java websocket client_websocket服务端,android客户端示例
服务端库依赖详见章末 #####spring websocket服务端代码(会话过程) public class HandshakeInterceptor extends HttpSessionHan ...
- 华为云IoT智慧物流案例10 | 广和通L610模组FOTA升级(服务端FileZilla Server客户端FileZilla)
华为云IoT智慧物流案例10 | 广和通L610模组FOTA升级(服务端FileZilla Server客户端FileZilla) 第一章 使用FileZilla Server搭建FTP服务器 第二章 ...
- 服务端渲染与客户端渲染详解(vue)
1.客户端请求 (1)用户在浏览器输入请求的地址例如:172.0.0.1:8080 到服务器 服务器接受到客户端的请求拿到一个没有被数据渲染的空页面 (2)客户端拿到服务端的空字符串页面,然后从上往下 ...
- Socket服务端向指定客户端发送消息
Socket服务端向指定客户端发送消息 解决思想 1.项目背景 2.如何上传与下发指令 3.解决方法 4.流程 解决思想 I.指定客户端远程地址是存起来的. II.服务端直接主动发信息给客户端,问题在 ...
最新文章
- python实现excel数据透视表_用python建立excel的数据透视表
- ViewState的使用
- 开发常见错误解决(7)连接到SQL Server 2005出错
- jvm性能调优实战 -55RPC调用引发的OOM故障
- [剑指offer] 矩阵覆盖
- BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别
- SQL ABAP ST05 hint
- 如何找出SAP Fiori launchpad URL start_up请求发起的具体位置
- 【caffe-Windows】训练自己数据——数据集格式转换
- Redux API之applyMiddleware
- python经典书籍:Python编程实战 运用设计模式、并发和程序库创建高质量程序
- Seastar:多核机器上编写高效复杂的服务器应用程序的 C++ 库
- Star Schema完全参考手册读书笔记五
- linux oracle查看服务,技术|如何查看 Linux 中所有正在运行的服务
- 使用C# WinForm实现打印小票的功能
- define语句换行\后不能有空格
- 关于SUSE linux
- Golang + Qt5 桌面开发终极解决方案
- Arcscan自动矢量化
- 干货丨1.3万字简述,PRD到底怎么写