前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >RUM、APM 强强联手实现全链路监控

RUM、APM 强强联手实现全链路监控

作者头像
腾讯云可观测平台
发布2025-02-11 14:17:06
发布2025-02-11 14:17:06
830
举报

导语:文章主要讲解如何让前端性能监控(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 本地快捷查看链路信息。

效果:RUM 查看全链路

效果:APM 查看全链路

(框中绿色部分为前端应用第一跳的链路信息。)

联系我们

如有任何疑问,欢迎加入官方技术交流群

关于腾讯云可观测平台

腾讯云可观测平台(Tencent Cloud Observability Platform,TCOP)基于指标、链路、日志、事件的全类型监控数据,结合强大的可视化和告警能力,为您提供一体化监控解决方案。满足您全链路、端到端的统一监控诉求,提高运维排障效率,为业务的健康和稳定保驾护航。功能模块有:

  • Prometheus 监控:开箱即用的 Prometheus 托管服务;
  • 应用性能监控 APM:支持无侵入式探针,零配置获得开箱即用的应用观测能力;
  • 云拨测 CAT:利用分布于全球的监测网络,提供模拟终端用户体验的拨测服务;
  • 前端性能监控 RUM:Web、小程序等大前端领域的页面质量和性能监测;
  • Grafana 可视化服务:提供免运维、免搭建的 Grafana 托管服务;
  • 云压测 PTS:模拟海量用户的真实业务场景,全方位验证系统可用性和稳定性;
  • ......等等
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云可观测 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 效果:RUM 查看全链路
  • 效果:APM 查看全链路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档