数据埋点
文章目录
- 数据埋点
-
- 整体流程
- 数据采集
- 数据传输
- 数据存储
- 数据统计分析
- 数据可视化
- sdk包设计
- 日志收集设计
- 分析服务设计
- 可视化设计
- 指标设计
整体流程
采集流程
文章图片
架构图
文章图片
数据采集
立方体模型
文章图片
立方体建模是为了细化采集指标,最大限度得复用数据,减轻埋点工作量,统一埋点口径
埋点事件事件定义:为了对用户行为进行统计和分析,我们使用一类被称为 “事件” 的消息来记录用户行为。?
事件组成
- who:用户信息
- when:时间信息
- where:环境信息 ,设备环境、网络环境、业务环境
- what:事件信息 ,事件标识、事件参数,比如点击了a商品。
事件维度
- 访问级维度,浏览器访问还是移动设备访问。
- 页面级维度,访问的哪一个页面,首页还是个人信息页。
事件类型
- 无埋点事件,指不需要额外开发,通过监听、通知进行的埋点。
- 埋点事件,指开发阶段,手动进行的埋点。
手动埋点类型
- 前端埋点
- 后端埋点
埋点方式
- 硬编码
统一口径定义前端sdk与后端sdk包
方法列表clickProduct(String userId,Date clickTime,int env,String productId)
payOrder(String userId,Date payTime,int env,String orderId)
login(String userId,Date loginTime,int env,String status)
addShoppingCart(String userId,Date addTime,int env,String productId)
其中最后一个参数可以进行扩展,填充json数据
数据传输
数据传输方式可以使用websocket或http,需要对该方式进行池化处理
日志收集服务可使用netty的IO复用模型实现日志收集,收集的日志存入kafka与数据库
数据存储 数据从两个点存储
- 日志收集服务存入数据库
- 分析服务分析后的数据存入数据库
备份只存储当前时间窗口一年以内的数据,其它数据通过调度定时存入冷备数据库
数据统计分析
分析方式
- 实时分析
- 离线分析
实时分析kafka数据,消费并进行实时分析,存入数据进入数据库,主要针对增量指标,实时指标
离线分析通过调度任务,对数据库的数据,进行定时调度,主要针对数据库存量指标,例如:月指标、周指标、年指标
数据存储分析后数据存储进入到redis集群,按如下格式存入
key :
业务线:${userId}:下单量
数据可视化
可视化框架https://echarts.apache.org/zh/index.html
后端
根据请求实时取redis中的数据,进行组合形成前端需要的数据返回
例如,展示本周的访问量
文章图片
- 从redis中获取 visit:week:count
- 组装成{“code”:0,“msg”:“success”,“data”: [120, 200, 150, 80, 70, 110, 130]}
类与接口设计顶级事件接口 Event
- boolean add(T t)
- Thread wrapper(T t)
- protected static Executor executor,
- protected int eventLength
- protected Enum state
- public abstract boolean add(T t)
- private static SocketPool socketPool
- 构造方法XXXXEvent(){ executor = new ThreadPoolExecutor();
socketPool=new SocketPool();
} 根据实际情况配置核心线程,最大线程,任务队列,过期策略等参数
- public Thread wrapper(T t){},从Socket线程池中获取具体的连接, 然后发送,最后归还到线程池
- public boolean add(T t){},先对传入对象做处理,比如加上userId,env等信息,调用wrapper转成Thread对象,放入到executor线程池中等待调度处理
- public static void start(){} 启动socketPool与executor
- public static void end(){} 销毁socketPool与executor
类图
文章图片
日志收集设计
IO模型IO多路复用
框架
- netty 实现监听
- kafka 实现消息堆积
数据清洗无用或不符合规格的数据全部舍弃,响应{“code”:-1,“msg”:“useless data or data does not meet specifications”,“data”:null}
时序图
文章图片
分析服务设计
kafka 消费模式at least onece模式
pull/pushpull(防止消息堆积)
分析获取数据后对对应数据库存储的指标进行操作,例如基础访问量指标+1,购物车指标+某某商品,redis旁路一份数据
数据类型
- 实时数据
监控kafka消费处理
- 历史数据
通过调度凌晨定时处理
数据组装根据表图需要的信息,从redis获取数据,进行组装,并返回
刷新事件
- 前端定时刷新
- 前端点击刷新
需求指标
基础指标
【方案|数据埋点实现】数据结构
推荐阅读
- 跨分片方案 总结
- 可视化运维解决方案-构建数据大屏 华汇数据
- 字节跳动基于 Apache Hudi 的多流拼接实践方案
- 城市天然气地下泄漏监测系统软件方案
- 步兵分队作战协同训练系统软件方案
- ETCD 应急方案
- 乐鑫|乐鑫 ESP RainMaker? 加速企业智能转型,私有云方案助力客户打造自有品牌
- #yyds干货盘点#跨域问题之Spring的跨域的方案
- 字节跳动 iOS Heimdallr 卡死卡顿监控方案与优化之路