请问服务端埋点,设计成什么样的实现方式比较好?

237 天前
Breadykid  Breadykid

例如 GA ,神策等,服务端接入,在各个接口调用过程中埋点,什么样的实现方式比较好?
目前看同事们有的在业务代码中间插一脚开个异步线程,有的在方法头上加切面拦截,写的都很临时。
我现在新项目要接埋点了,springboot 项目,请问有什么好方式?

2204 次点击
所在节点   程序员  程序员
14 条回复
pvcxy18
pvcxy18
237 天前
方法切面拦截,或者配置 Filter 过滤吧。 如果还是觉得侵入性强,可以考虑加个中间层
lxw520zxl
lxw520zxl
237 天前
后端埋点就是埋一些业务数据,比如一个发红包事件(红包 id, 红包金额,发红包人...等等信息),就是侵入业务的,没法完全独立出去的,一般来说就是定义好工具类,工具类上用 @Aysnc 注解来实现异步
gl3081
gl3081
237 天前
埋点需求的数据比较多,没办法做统一处理。
不过买点的数据对象,这边建议你考虑下 builder 模式,编辑器一般都有插件可以自动给 class 生成 builder 模式
diagnostics
diagnostics
237 天前
APM 的话一般是 Agent ,也算埋点。。。
xueling
xueling
237 天前
业务埋点其实不太能做到你期望的与业务完全解耦的状态,一般来说通过切面或注解能实现的都是一些相对固定的、标准化的埋点,而对于大多数自定义业务埋点,由于上报参数和上报时机差异太大,所以并不适合这种相对固定的上报形式。

1 、服务端埋点方案设计一般侧重在埋点规范的定义、公共参数和业务参数的区分、统一的埋点的上报和接收方案等方面,确保在埋点上报出现问题后不会影响正常的业务服务就可以了,其实不用太纠结与业务代码的耦合;
2 、埋点接收后将数据写入消息中间件,与数据平台服务解耦,写入消息中间件的数据是一份可以被共用的基础数据(包括实时或离线使用的形式);
3 、围绕着服务端埋点,大多数的数据指标我建议采用通用型流式统计的方案来实现,接入简单,无 SQL ,不容易出错,针对一份埋点数据可以灵活的实现各种自定义指标,运算性能更加强悍,更容易实现指标之间的交叉验证,能够很方便的的在页面管理每个指标的执行状态,可以了解一下我的开源项目: https://github.com/xl-xueling/xl-lighthouse
相比于 OLAP 数据指标的实现方案其实有很多好处,服务端埋点可能会经常变动,包括埋点的上下线或参数的变更,但 OLAP 需要维护全部的埋点序列数据,性能并不高,而且容易产生脏数据。
Breadykid
Breadykid
237 天前
@pvcxy18
@lxw520zxl
@gl3081 看来都是异步或拦截,我封装下试试

@diagnostics elastic apm 有点重了,只是上报几个功能的数据,量不大
xuanbg
xuanbg
237 天前
没听说过过服务端埋点。。。看需求描述的话,统一日志方案例如 ELK ,可以在日志抓取规则中实现提取关键信息的功能。
zm8m93Q1e5otOC69
zm8m93Q1e5otOC69
237 天前
coderzhangsan
coderzhangsan
237 天前
说个题外话,服务端埋点,建议直接接第三方,不然后面一大堆埋点需求,这都不算什么,运营数据核对是个麻烦事。
diagnostics
diagnostics
237 天前
@Breadykid 和 elastic 没啥关系,你没了解过 Prometheus + Grafana 这一套吗?
Breadykid
Breadykid
236 天前
@diagnostics #10 目前接的神策埋点,接入了他们 sdk ,需要调用 sdk 的方法来上报数据,Prometheus + Grafana 用不了

@xuanbg 接三方埋点的话,例如 ga (调用接口),神策(调用 sdk ),走日志获取埋点信息再上报不合适了,要另开应用单独做了

@uselessVisitor
@xueling
你俩的 repository 对于这个服务端只上报 1-2 个事件,5-6 个参数的场景,有点重了
diagnostics
diagnostics
236 天前
@Breadykid #11 你仔细去搜搜可观测性怎么干的,和埋点差不多。

APM 一般都是通用的接口、用 Labe 区分,所以可以一个框架套所有。

一般的做法,对代码侵入少由高到低

- AOP:算是运行时织入吧
- CTW:编译时织入
- LTW:加载时织入

LTW 就是我说的 agent ,要埋点的时候加个启动参数带上 jar 包就好
xueling
xueling
236 天前
@Breadykid 我的项目其实不重,有单机版本,可以不用集群版本那一套,一键部署,只是你没有用过,感觉上会重而已。我的项目优势是核心的统计运算方面的功能比神策强多了,不管是承载的数据量、计算性能、能够支撑的数据指标的数量、还是实时统计方面操作的便捷性。当然,如果你确实数据需求较少,也已经部署神策了,而且他们能满足需求,那就忽略吧~~
Breadykid
Breadykid
233 天前
@diagnostics #12 我学习下,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1053078

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX