对于数据的埋点,首先要讲服务监控,有了监控才能有埋点
那么服务监控主要监控的对象可以有这些:
- 错误信息
- 网页性能
- 用户行为
===好处:
-
对错误信息进行监控有什么好处,第一:可以将线上的错误收集到,快速的定位到问题,第二bug不可能全部都被测试人员测出来,这时监控可以主动发现,然后我们解决问题。比如js错误、vue错误、接口错误(400、500等)
-
对网页性能的监控:通过网页firstpaint、DCL、Load等参数,如果页面发生白屏、卡顿或渲染时间过长等问题,我们可以通过这些参数定位到是在哪个渲染阶段导致的,然后去优化网页速度。
-
用户行为的监控:可以发现用户使用网页的习惯,让我们更好的去运营、优化项目的操作流程。 比如页面访问次数(pv)、访客数量(uv)、当前页面的停留时间、按钮点击次数、跳转的页面, 还可以检测浏览器或设备类型、版本,因为有些代码可能在其他版本的浏览器会出现卡顿不兼容等问题
错误信息监控:
当我们在监控平台或者同事反馈问题的时候,可以打开监控平台进行查看,如果是js错误-前端很快能排查, 如果是接口异常,我们可以反馈给后端同事,但是后端的服务之间调用关系比较复杂,这个时候排查起来并不是那么容易。
这个时候就需要用到traceId,这个通常由后端生成,它可以记录整个请求过程服务端的链路细节,后端拿到这个id可以去查询某次请求的日志信息,定位到问题。通过后端相关配置之后,可以在http请求后返回给前端,前端,监控sdk便能够收集到这些id,此时前后端就串联起来了。
如果还是很难定位,我们也可以通过收集到用户操作轨迹、设备信息等等,来分析还原当时的场景,辅助排查bug或其他问题。
用户行为监控:
某些监控行为可能频率会比较高,比如监听页面点击了哪些按钮什么时候点的等等操作信息,这个时候如果每次点击都去发送ajax请求,如果用户量比较大的情况,会对服务器有一定性能压力。
这种情况可以做一些细节处理,比如累计点击了30次之后,再将收集到的信息一次性发给后端,减少压力。==》进一步优化:当数据准备上报时,也可能会出现网络不好或者其他情况,导致上传失败,所以还需要监听网络状态、或进行请求重试(细节:通过requestIdeCallback判断浏览器是否空闲、使用异步方式执行代码不影响主线程--比如worker、settimeout等)
性能监控:
主要通过performance.timing获取到网页的各个阶段加载信息。
- firstPaint(FP):页面的首次渲染时间,时间过长会导致白屏太久
- firstContentPaint(FCP):页面首次有内容的渲染,首屏时间,(和上面的时间两者很接近,取哪个做分析都可以,但是当页面内容变得复杂并且很多的时候,两个时间差会变大,取后者来做参考会更好)
- DomContentLoaded(DCL):dom渲染完成
- Load(L):页面资源加载完成
- Largest Contentfull paint(LCP):主要内容渲染完成(最大内容渲染),浏览器在计算LCP时,会识别页面中最大的元素,通常是图片、视频或其他内容,然后在它们开始呈现时记录下时间
===实现:
错误信息:
- js错误,通过 error、unhandlerejection(promise错误) 事件来捕获异常信息
可以收集以上信息
-
vue/错误:errorHandler(全局vue异常,不能和window的error同时使用)、errorCapture(组件级错误,返回false不向上传播)
-
接口错误:比如400、500等(这个具体参照自己的团队规范)