导语:文章主要讲解如何让前端性能监控(RUM)和应用性能监控(APM)串联起来,在腾讯云可观测平台实现全链路高效监控。
RUM 与 APM 面临的挑战
1、行业挑战
监控行业的友商们陆续都提供了全链路能力;
链路追踪无法闭环,查错能力不足。
2、用户挑战
用户使用腾讯云可观测平台 RUM 无法查看链路详情;
用户在腾讯云可观测平台 APM 上无法查看前端链路部分。
基于此,结合 RUM 和 APM 的腾讯云可观测平台全链路方案亟待落地,本文将手把手教你实现全链路监控。
高效快速改造现有业务实现全链路监控
RUM SDK在原有基础上进行了升级改造,通过配置参数实现 TraceId 的透传,并且在用户选择 APM 实例时,无感知地绑定 APM 实例,以实现 APM 反查前端链路第一跳的相关信息,使用户前后端链路彻底打通。
在 RUM 日志页面,用户可在当前页面通过选中 Trace 字段来打开右侧抽屉查看全链路信息。在 APM 侧,您也可以查看到包含前端第一跳的完整链路信息。而以上的新功能,您只需在 RUM- SDK 中配置几个简单参数即可拥有,让我们一起跟着步骤来看看吧!
步骤一:前端接入 RUM SDK
1. 登陆 腾讯云可观测平台-前端性能监控。
2. 在左侧菜单栏中单击数据总览。
3. 在数据总览页中单击应用接入,根据提示填写配置信息。
4. 配置完后单击下一步,进入应用接入页面。根据页面提示接入 RUM SDK,并初始化 SDK。
5. 开启下图对应配置参数,前端方面即已完成链路配置。
(建议前后端均使用 OpenTelemetry 协议的上报方式。)
关键配置
字段 injectTraceHeader 会使 Aegis SDK 给所有监控的接口注入对应的请求头,并
且自动生成相关协议字段。目前支持 Traceparent、sw8、b3、Sentry-Trace。
协议字段 | 说明 |
---|---|
Traceparent | OpenTelemetry 的约定字段(推荐使用) |
sw8 | SkyWalking 的约定字段 |
b3 | Zipkin 跟踪约定字段 |
Sentry-Trace | Sentry 的约定字段 |
步骤二:后端使用 OpenTelemetry 接入 APM
1.在腾讯云可观测平台 应用性能监控 > 资源管理 页面,单击新建,创建业务系统。
2.进入 应用列表 页面接入应用,选择对应的业务系统,选择对应的语言和 OpenTelemetry 方式接入应用。
说明:目前支持 Java、Go、Python、PHP 等应用接入方式。
步骤三:使用方法
当接口发生请求且产生历史日志时,您可在 前端性能监控 > 日志查询 > 历史日志 页面选择字段 Trace,若该日志有 TraceID,可左键单击 TraceID。在弹框中单击自定义跳转配置,绑定 APM 业务系统。
绑定后,可在当前页面查看该条请求在整个链路下的状态。
也可以单击相关链接即可跳转到 APM 链路详情页。
实现调用链路追踪,排查后端链路异常原因,快速定位异常信息。
最佳实践--Trace 打通原理剖析
1、Trace 是如何打通的
接入 OpenTelemetry 后所有打桩的接口都会带上一个请求头,Traceparent 或者 b3,这个请求头是 Trace 打通的核心,它主要由 TraceId 和 SpanId 组成,TraceId 会跟随这个接口一直向下,所有的内部服务和请求都带有该字段,每层服务生成对应的 Span,最后根据 TraceId 把所有 Span 连起来形成了 Trace 数据链。
如果 Aegis SDK 根据用户协议生成对应的 Trace 关键字,并且带入到请求的 header 中,其实也可以实现这个效果:我们在项目验证中,去掉了所有 OpenTelemetry 的引入,并在 Aegis SDK 中 mock 了一个 Traceparent,发现上报正常,Trace 也可以正常生成。
不过对比这个 Trace 的图发现这里 Trace 起点是 tomcat,不是前端的 HTTP 请求,所以可以判断这里是缺少了前端的 Span。
由于没有在前端接入 OpenTelemetry 的 sdk,因此这里也不难理解为什么 Trace 中少了前端的 Span 了。
那么如果用户可以接受忽略 Trace 缺少前端 Span 这种情况,其实当前的方案已经可以满足 90% 的问题查询 case 了,缺点可能就是如果请求链路在网络层或者 CLB 层断掉的话,就没办法发现断掉的原因。除此之外,前端的数据可以在 RUM 上看,后端的链路可以在 APM 上查看。
于是我们对当前 Aegis SDK 进行优化,可以适配不同全链路协议的请求头。
目前适配的协议有:Traceparent、b3、sw8、Sentry-Trace,请根据下游应用选择对应的协议。
2、SDK 全新接入方案
通过 injectTraceHeader 参数,Aegis SDK 会给所有监控的接口注入对应的请求头,并且自动生成相关协议字段。
对比之前需要几十行的接入代码,并且需要非常复杂的 Nginx 转发配置,当前方案极大地减少了开发者的使用负担。
从性能的角度来看,当前方案上报的数据量也远远少于之前的方案,开发者也不需要详细理解 Trace 协议的原理,只需要配置即可,可以说是比较方便地实现了“无侵入接入”。
3、最终方案
上述方案可以解决90%的查询 case 以及“无侵入接入”,但我们终究还是要实现“真全链路”,核心思路就是把缺失的前端第一跳信息补齐,为此我们通过改造 SDK 上报“第一跳请求”发生的时间,APM 展示链路时反查询绑定的 RUM 实例对应 TraceId 的第一跳起始时间,从而形成前端到后台的完整链路信息。
至此,您即可以在 APM 上查看到包含前端第一跳的详细链路信息,也可以在 RUM 本地快捷查看链路信息。
(框中绿色部分为前端应用第一跳的链路信息。)
联系我们
如有任何疑问,欢迎加入官方技术交流群
关于腾讯云可观测平台
腾讯云可观测平台(Tencent Cloud Observability Platform,TCOP)基于指标、链路、日志、事件的全类型监控数据,结合强大的可视化和告警能力,为您提供一体化监控解决方案。满足您全链路、端到端的统一监控诉求,提高运维排障效率,为业务的健康和稳定保驾护航。功能模块有: