技术文章

JAVA中什么是埋点,应用于什么场景?

埋点大概分成2种

业务埋点

这里埋点的含义就是:预先在用户可能操作的"点",埋下上报的代码,一旦用户发生了操作,我就上报该用户操作的详细信息

一般是要产品或者运营提出需求,在哪里埋点,比如

1.进入某个界面,客户端上报"xx用户进入了xx页面"
2.离开时再上报"xx用户离开了xx页面"

本质上是跟踪用户的行为,用户什么时候打开了应用,点击了哪些标题/功能入口/广告,逗留了多长时间

这就是所谓的大数据了,可以分析出用户对什么样的内容感兴趣,从而更精准的向用户推荐内容

最好就是用户每一个操作都能上报给后台,用户不操作,也会触发上报,比如,"进入了xx页面n秒钟没有操作"

要说明的是,这种埋点和具体你用哪种开发语言无关

监控埋点

这种埋点不是给产品和运营分析用户的,是让开发/运维对自己的程序有个更精准的认识

比如

1.定时采集服务器的cpu负载,内存占用情况,io负载,java 的 gc 信息
2.程序执行某个功能的耗时,进行远程调用时的耗时
3.程序在一段时间内捕捉到了哪些异常
4.在一段时间内,远程接口的平均响应时间,请求次数,成功返回次数,失败次数,超时次数
5.等等

这种埋点有助于开发、运维分析程序的性能问题,监控程序的健康程度,提早进行异常的告警

这样的埋点称为metric,grafana就是一款很优秀的开源的metric监控,你只需要定时把埋点数据提交给它,可以查看各项metric的统计曲线,并设定告警规则,当某个metric达到告警阈值,可以通过邮件、短信、即时通信程序(IM)向你推送告警信息

由于这样的埋点对业务代码有很严重的侵入,所以很多公司会开发通用的埋点框架,采用反射等方式进行运行监控