首页 > 其他分享 >一站式链路追踪:阿里云的端到端解决方案

一站式链路追踪:阿里云的端到端解决方案

时间:2024-05-31 17:02:39浏览次数:21  
标签:一站式 解决方案 ARMS OpenTelemetry 链路 埋点 插桩 追踪

作者:涯海

炎炎夏日,当你打开外卖 APP 购买奶茶却发现下单失败;五一佳节,当你自驾游途中发现导航响应缓慢,频繁错过路口;深更半夜,当你辅导孩子功课,却发现 GPT 应用迟迟无法应答。不知你有没有想过,这些程序运行的背后到底是怎样的世界,每一次点击,每一次交互,又到底发生了什么?

如果你是一名 SRE,是否会关注系统的性能瓶颈在哪里?如果你是一名 AppOps,是否关注应用的健康度保持在安全的水位?如果你是一名业务运营,是否关注影响客户行为的关键路径和原因?

上述谜题的答案就是链路追踪,通过记录请求在系统中的流转路径与状态,可以真实还原每一次请求的调用轨迹,快速定位错慢根因,并且通过请求粒度的数据关联实现业务影响面分析、业务异常排查等诉求。

链路追踪的价值就在于“关联”,用户终端、网关、后端应用、依赖组件(如数据库、消息、大模型)等共同构成了链路追踪的轨迹拓扑大图。这张拓扑覆盖的范围越广,链路追踪能够发挥的价值就越大。而端到端链路追踪就是覆盖全部关联 IT 系统,能够完整记录用户行为在系统间调用路径与状态的最佳实践方案。

端到端链路追踪的“三大难题”

不同开发语言、链路框架的实现不尽相同,真正实现端到端链路追踪,需要解决三个难题:链路插桩、链路采集与加工、链路上下文透传。

  • 链路插桩,顾名思义就是在关键方法执行前后添加链路追踪的埋点代码,从而记录相应的方法名称、耗时、状态等信息。链路插桩是一切的基础,只有已插桩方法才会生成 Trace 链路数据,可以被追溯和观测。但是链路插桩的难点是哪些方法需要插桩?如何低成本的新增或管理插桩逻辑?如何保障链路插桩的准确、性能和稳定?
  • 链路采集与加工,就是把已经生成的链路数据收集到指定的后端进行处理与存储,以便后续进行分析。链路采集的难点在于如何确定采集目标并收到完整的链路数据,特别是云产品服务(如网关)生成的链路数据。链路加工的难点在于如何处理非原生 Trace 数据转义(如网关访问日志),或者多源异构链路模型的归一化。
  • 链路上下文透传,是最容易被忽视,也是最难处理的问题。目前业界链路透传协议尚未完全统一,常用的主流协议包括 w3c、b3、jaeger 和 skywalking。不同系统之间由于开发语言、开源框架、产品归属等原因最终选择的链路协议不一致是比较普遍的,从而导致调用链断链不全等问题。另外,在迁移链路框架的过程中,也会出现协议不兼容的情况,比如 Skywalking 与 OpenTelemetry。

阿里云端到端链路追踪解决方案

阿里云 ARMS(含可观测链路 OpenTelemetry 版)目前已经支持用户终端(Web/Andriod/iOS)-> 云网关(ALB/MSE/Ingress/ASM/ApiGateway)-> 后端应用(Java、Go、Python 等)-> 云组件(数据库、消息、大模型等)的端到端全链路打通,如下图所示。

链路插桩:Java/Go 等主流语言推荐 ARMS 自研探针,兼容开源提升多语言覆盖度

针对 Java/Go/Python 等主流语言,推荐接入 ARMS 自研探针提升链路插桩的质量、性能、稳定性和易用性。同时,为了更广泛的支持其他语言,可观测链路 OpenTelemetry 版全面兼容 OpenTelemetry、SkyWalking、Zipkin、Jaeger 4 种主流链路框架 10+ 种多语言的链路插桩与数据上报,如下表所示。

ARMS 与可观测链路 OpenTelemetry 数据完全互通,在多语言场景建议结合使用。

编程语言 ARMS 应用监控 (自研探针,SLA 有保障) 可观测链路 OpenTelemetry 版 (开源客户端,自行管理) 推荐接入方式
Java 自动埋点 自动埋点 ARMS
Go 自动埋点开发中,7月发布 自动埋点 SkyWalking  -> ARMS
Python 自动埋点开发中,7月发布 自动埋点 OpenTelemetry -> ARMS
Node.js 不支持 自动埋点 OpenTelemetry
.NET 不支持 自动埋点 OpenTelemetry
PHP 不支持 自动埋点 OpenTelemetry
Erlang 不支持 自动埋点 OpenTelemetry
C++ 不支持 手动埋点 OpenTelemetry
Swift 不支持 手动埋点 OpenTelemetry
Ruby 不支持 手动埋点 OpenTelemetry
Rust 不支持 手动埋点 SkyWalking

ARMS 今年刚刚发布了 JavaAgent 4.0,全面拥抱 OpenTelemetry 生态,探针底座基于 OpenTelemetry 框架进行了全新升级,并额外提供多种资源监控、性能诊断、应用安全等数据。除了更丰富的数据,ARMS JavaAgent 4.0 还支持更加灵活的调用链采样策略、白屏化探针管理、全方位自监控、动态功能降级等高阶特性,更加适合企业级客户的生产环境应用,如下表所示。

链路采集与加工:深度集成阿里云生态,云产品链路一键接入

企业上云的一个痛点问题就是重度依赖云产品服务可用性,端到端链路追踪可以快速定位错慢请求异常节点,提升故障快恢效率,降低业务损失。那么如何接入云产品的调用链路数据呢?

可观测链路 OpenTelemetry 版与阿里云近 10 款云产品深度合作,完成了云产品内部链路插桩与数据上报。对于企业用户来说,只需在相应的云产品控制台一键启用链路追踪开关,就可以直接看到相应的调用链,大幅简化了链路采集成本,ALB 网关、MSE 网关以及 ARMS 用户体验监控的链路追踪接入效果如下图所示 。

受限于产品特性,不同云产品的链路插桩方案有所区别,配套的链路数据采集大致分为两类:

  • Trace 直接/转发上报:以用户体验监控为例,内部实现链路插桩与 Exporter 直连上报,埋点更精细更灵活。
  • 日志数据转 Trace:以 ALB 网关为例,后台消费访问日志,再转义成 Trace 数据,侵入性更小。

两种方案各有优劣,通常推荐 Trace 直连/转发上报,此种方案更规范。但是在性能要求高或者旧系统改造困难场景下,可以考虑日志转 Trace(前提条件是在日志中添加 TraceId 等链路上下文)。

目前,已经支持接入链路追踪的云产品、协议及接入指南如下表所示。

链路上下文透传:统一阿里云端到端链路协议,自研探针兼容多协议转换

从单个应用组件的视角,完成链路插桩和数据采集,能在控制台上看到对应的 Trace 数据就已经大功告成啦。但是真正的端到端链路追踪必须将上下游的 Trace 以统一的协议进行串联,保证不断链,既有技术层面的挑战,也有协同层面的困难。

目前阿里云可观测已经基于 OpenTelemetry W3C 协议实现端到端链路打通,后续将逐步覆盖更多协议、更多组件的全链路透传,构建更完整、更灵活的链路生态,完整端到端调用链如下图所示。

相比于新应用接入 Trace,存量应用要实现端到端协议栈统一的挑战会更大。特别是面临新旧技术栈切换场景(比如 SkyWalking 迁移至 OpenTelemetry),既要保证存量运维体系持续可用,又要验证新体系的有效性,如何兼容两种不同链路体系共存?是影响存量应用技术栈升级或链路打通的最大难题。

为了解决这个问题,ARMS 自研探针做了大量的兼容性优化,最终实现了双探针共存,保证两套体系能够同时正确、稳定运行,直至迁移完成,如下图所示。

ARMS 自研探针支持多协议识别与透传,在某些特殊场景,如果上下游系统难以变更,可以通过 ARMS Agent 进行协议中转,比如上游 A 应用使用 Jaeger 协议 ->  ARMS Agent(接收 Jaeger,向下透传 Jaeger + Zipkin B3) -> 下游 B 应用使用 Zipkin B3 协议,最终实现 TraceId 的透传与打通。

后续规划:倡导链路追踪行为公约,促进链路生态繁荣生长

链路追踪行为公约: 链路插桩、采集和协议透传只是端到端链路追踪的基础,如何更加有效的使用链路数据解决稳定性运维、业务运营增长等方面的诉求,还需要更多的探索,比如统一的链路行为控制(采样策略、流量标签等)、广泛的数据关联分析(Trace 关联指标、日志、事件等)。

OpenTelemetry 最佳实践: OpenTelemetry 作为可观测的主流开源标准,提供了丰富的链路插桩组件支持。但是,许多企业开发者在将其应用于生产环境时,普遍反馈缺乏最佳实践指导,比如如何实现异步场景链路上下文透传、过滤指定的 Span、关联应用日志、指定透传 Header 格式、将 TraceId 写入 HTTP Response Header 等。阿里云可观测团队秉持着“开源、开放”的精神,致力于提供全面、可靠的 OpenTelemetry 最佳实践指南(代码、文档、视频等),欢迎大家一起参与共建(https://github.com/alibabacloud-observability

促进链路生态发展: 链路追踪实现了跨节点的请求粒度数据透传与关联,基于链路体系能够孵化出丰富的链路生态,比如全链路压测、全链路灰度、架构感知、根因定位与影响面分析等。在 LLM 大模型领域,链路追踪也能发挥巨大的价值,帮助算法工程师或运维人员定位每一次模型训练或推理的过程与结果,有效识别并解决“幻觉”、评估调优等问题,阿里云 LLM Trace 将在 2024 年 5 月正式发布上线,效果如下图所示。

相关链接:

[1] 固定比例采样

https://opentelemetry.io/docs/languages/java/sampling/

[2] 流量自适应采样

https://skywalking.apache.org/docs/skywalking-java/v9.2.0/en/setup/service-agent/java-agent/configurations/

[3] 用户体验监控关联 Trace

https://help.aliyun.com/zh/arms/user-experience-monitoring/use-cases/trace-associated-with-rum-monitoring

[4] 通过 OpenTelemetry 上报 Android 应用数据

https://help.aliyun.com/zh/arms/tracing-analysis/use-opentelemetry-to-submit-trace-data-of-android-applications

[5] 通过 OpenTelemetry 上报 Swift 应用数据

https://help.aliyun.com/zh/arms/tracing-analysis/use-opentelemetry-to-submit-trace-data-of-swift-applications

[6] 通过 ALB 链路追踪实现业务全链路分析

https://help.aliyun.com/zh/slb/application-load-balancer/use-cases/untitled-document-1698045154408

[7] 开启网关链路追踪

https://help.aliyun.com/zh/mse/user-guide/enable-tracing-analysis-for-a-cloud-native-gateway

[8] 配置 Trace 链路追踪

https://help.aliyun.com/zh/api-gateway/user-guide/configure-tracing-analysis

[9] 在 ASM 中实现分布式跟踪

https://help.aliyun.com/zh/asm/user-guide/enable-distributed-tracing-in-asm

[10] 使用 Ingress-tracing 实现链路追踪

https://help.aliyun.com/zh/arms/tracing-analysis/enable-tracing-analysis-for-ingresses

[11] 接入 ARMS 开始监控 Java 应用

https://help.aliyun.com/zh/arms/application-monitoring/getting-started/monitor-java-applications-1/

[12] 接入可观测链路 OpenTelemetry 版

https://help.aliyun.com/zh/arms/tracing-analysis/tutorials/

标签:一站式,解决方案,ARMS,OpenTelemetry,链路,埋点,插桩,追踪
From: https://www.cnblogs.com/alisystemsoftware/p/18224864

相关文章

  • vue项目部署后刷新页面404的原因和解决方案
    在部署Vue.js单页面应用(SPA)时,遇到刷新页面时返回404错误是一个常见问题。这个问题通常是由于服务器不知道如何处理SPA的路由而导致的。原因在Vue.jsSPA中,前端路由由VueRouter处理。当你在应用中导航时,VueRouter可以处理这些路由并加载相应的组件。但是,当你直接刷......
  • 视频融合共享平台LntonCVS视频联网共享平台养殖场应用解决方案
    在当今的畜牧业中,养殖场面临着诸多挑战,如养殖密集、流动量大、差异性大以及环境污染等问题。同时,动物疫情防控、设备设施不完善和政府监管薄弱等情况也给养殖场带来了困扰。因此,智能化养殖已经成为现代畜牧业的发展趋势。为了应对这些挑战,我们提出了基于AI智能分析网关平台Ln......
  • Django 做migrations时出错,解决方案
    在做migrations的时候,偶尔会出现出错。在已有数据的表中新增字段时,会弹出下面的信息运行这个命令时pythonmanage.pymakemigrationsTrackingfilebyfolderpattern:migrationsItisimpossibletoaddanon-nullablefield‘example’tobookwithoutspecify......
  • vue3 vite 脚手架生成项目 prettier 自动格式化失败 vscode插件 Vue - Official 解决
    vue3vite脚手架生成项目prettier自动格式化失败vscode插件Vue-Official解决方案问题以前写的都是vue2的项目,自动格式化都用的vetur,都设置好了。现在新弄了个vue3的项目,脚手架起的vitevue3,搞个代码格式化,发现prettier没好事。解决思路格式化一共俩工具eslintpret......
  • 一文看懂企业HPC环境下数据传输常见问题及解决方案
    HPC通常指的是“高性能计算”(High-PerformanceComputing)。高性能计算是计算机科学的一个分支,专注于构建和使用能够执行计算密集型任务(如模拟、数据分析、可视化等)的计算机系统。这些系统通常包括多个处理器(CPU)、图形处理器(GPU)、专用加速器或其他类型的计算单元,它们通过网络连接......
  • M-LAG(跨设备链路聚合)二层基础配置
    一、拓扑结构  二、接口配制S6850_1S6850_2interfaceVlan-interface999ipaddress1.1.1.1255.255.255.252#interfaceFortyGigE1/0/53portlink-modebridgeportaccessvlan999#interfaceGigabitEthernet1/0/1portlink-modebridgecomboenablefiber......
  • 数据链路层的检错与纠错
    通讯链路都不是完全理想的。比特在传输过程中可能会产生比特差错,即1可能变成0,0也可能变成11帧包含m个数据位(即报文)和r个冗余位(即校验位)。假设帧的总长度为n,则有n=m+r。包含数据和校验位的n位单元,通常称为n位码字奇偶校验\(\color{red}{奇偶校验只能检测出错误,而无......
  • Navicat远程连接阿里云mysql失败,提示2013,2003错误解决方案
    前情提要总结下使用过的各种解决方式,如修改cnf,修改安全组端口,修改防火墙,总有一款方案适合你(如果使用其他方式解决请评论补充,感谢)环境:本文全部使用yum方式安装服务,使用阿里云服务器centos7下文需要格外注意手动配置端口的部分确认已安装好mysql服务(yum安装)......
  • 适用于各行业的数据传输管控解决方案,一文了解!
    数据传输管控是一个重要的领域,它涉及到确保数据在不同系统、用户和组织之间传输时的安全性、合规性以及效率。以下是一些关于数据传输管控的关键点:安全可控的数据交互:随着数据量的爆炸式增长,企业和组织需要确保数据交互是安全和可控的。这包括内部用户和系统之间以及与外部合作伙......
  • vcpkg在vs2022下integrate install之后仍找不到第三方库的解决方案
    首先是vcpkg的安装,许多其他帖子都有,从github上拉取下来之后运行bootstrap-vcpkg.bat即可。不再赘述。接下来是使用部分,假设需要安装pcl库。在vs2022的开发者powershell中输入vcpkginstallpcl此时下载完成,成功拉取了pcl包。接下来按照教程所说为在vs2022的开发者powershell......