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

作者:涯海

炎炎夏日,当你打开外卖 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 还支持更加灵活的调用链采样策略、白屏化探针管理、全方位自监控、动态功能降级等高阶特性,更加适合企业级客户的生产环境应用,如下表所示。

image.png

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

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

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

图片

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

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

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

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

image.png

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

从单个应用组件的视角,完成链路插桩和数据采集,能在控制台上看到对应的 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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/664446.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用画图工具修改图片文字

方法思路: 使用背景色将需要修改的文字覆盖,然后在原来的地方加入修改后的字。 第一步: 选中图片后右键,选择“编辑”(默认会使用画图工具打开) 第二步: 选取颜色选取器,如下图 使…

探索Lora:微调大型语言模型和扩散模型的低秩适配方法【原理解析,清晰简洁易懂!附代码】

探索Lora:微调大型语言模型和扩散模型的低秩适配方法 随着深度学习技术的快速发展,大型语言模型(LLMs)和扩散模型(Diffusion Models)在自然语言处理和计算机视觉领域取得了显著的成果。然而,这…

【tomcat 源码分析总结】

文章目录 tomcat官网路径目录结构介绍:Tomcat 系统架构 和 原理剖析http 的请求的处理过程 Tomcat 请求处理大致过程 tomcat官网路径 目录结构介绍: confserver.xml 端口的指定tomcat-users.xml 角色web.xml : tomcat 全局的xmllogging.properties 日志…

项目管理主要文档介绍

1、商业论证:一般由项目发起人创建,用于论证项目是否对组织有财务方面的收益。商业论证创建于项日开始之前,用于判断项目是否需要被开展。 2、项目章程:一般由项日经理创建,并由发起入和关键相关力提供输人,最后经项目…

长难句打卡5.31

In a workplace that’s fundamentally indifferent to your life and its meaning, office speak can help you figure out how you relate to your work—and how your work defines who you are. 在一个对你的生活和生活意义漠不关心的工作场所中,办公室语言可以…

ArcGIS空间数据处理、空间分析与制图;PLUS模型和InVEST模型的原理,参量提取与模型运行及结果分析;土地利用时空变化以及对生态系统服务的影响分析

工业革命以来,社会生产力迅速提高,人类活动频繁,此外人口与日俱增对土地的需求与改造更加强烈,人-地关系日益紧张。此外,土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…

禁用USB端口的办法,哪一种禁用USB端口的方法好

禁用USB端口的办法,哪一种禁用USB端口的方法好 禁用USB端口是保护公司数据安全的一种常见做法,旨在防止未经授权的数据传输和潜在的恶意软件传播。以下是几种常见的禁用USB端口方法及其效果评价。 1、硬件方法: BIOS设置:通过BIO…

Android下HWC以及drm_hwcomposer普法(下)

Android下HWC以及drm_hwcomposer普法(下) 引言 不容易啊,写到这里。经过前面的普法(上),我相信童鞋们对HWC和drm_hwcomposer已经有了一定的认知了。谷歌出品,必须精品。我们前面的篇章见分析到啥来了,对了分析到了HwcDisplay::in…

2024年,抖音小店618十大爆款预测!商家抓紧时间上架!

哈喽~我是电商月月 做电商的玩家都知道,一但到了换季或者是节日大促的时候,销量高,是最容易爆单的阶段 而提前上架一些热卖产品,爆单的几率在自己的店铺机会就越大 而最近的一个大型活动,就是618了,抖音…

【C++ ——— 继承】

文章目录 继承的概念即定义继承概念继承定义定义格式继承关系和访问限定符继承基类成员访问方式的变化 基类对象和派生类对象的赋值转换继承中的作用域派生类中的默认成员函数继承与友元继承与静态成员菱形继承虚继承解决数据冗余和二义性的原理继承的总结继承常见笔试面试题 继…

【Text2SQL 论文】T5-SR:使用 T5 生成中间表示来得到 SQL

论文:T5-SR: A Unified Seq-to-Seq Decoding Strategy for Semantic Parsing ⭐⭐⭐ 北大 & 中科大,arXiv:2306.08368 文章目录 一、论文速读二、中间表示:SSQL三、Score Re-estimator四、总结 一、论文速读 本文设计了一个 NL 和 SQL 的…

DVWA靶场搭建:Apache、MySQL、PHP、DVWA

最近为了能够较为真实地学习Web渗透的各种技术,就想着自己搭建一个专门用于学习的Web演练平台--DVWA“靶场”。 DVWA可以进行暴力(破解)、命令行注入、跨站请求伪造、文件包含、文件上传、不安全的验证码、SQL注入、SQL盲注、弱会话ID、XSS漏…

Open3D(C++) OTSU点云二值化

目录 一、算法原理二、代码实现三、结果展示1、原始点云2、二值化本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 最大类间方差法(Between-class scatter method)是一种用于分割的方法,它通过计算图…

3225mm晶振SG3225CAN专用于蓝牙模块应用

在无线通信技术迅猛发展的今天,蓝牙技术因其低功耗、高传输速率和广泛的应用范围,成为物联网和智能设备的重要组成部分。晶振在蓝牙模块中无处不在,大部分的智能手机,打开设置工具里面就会有一个是蓝牙功能,蓝牙技术引…

52-QSplitter类QDockWidget类

一 QSplitter类 Qt提供QSplitter(QSplitter)类来进行分裂布局&#xff0c;QSplitter派生于QFrame。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~…

Nginx企业级负载均衡:技术详解系列(15)—— 一篇文章教你如何自定义错误日志

你好&#xff0c;我是赵兴晨&#xff0c;97年文科程序员。 在今天的文章中&#xff0c;我将带你深入了解Nginx的一个强大功能——自定义错误日志。无论是对于运维人员还是开发者&#xff0c;掌握这一技能都是提升工作效率、优化系统监控的关键。主要是能装13。图片 自定义错误…

WEB攻防-JAVAWEB项目常见漏洞

知识点 1.JavaWeb常见安全及代码逻辑 2.目录遍历&身份验证&逻辑&JWT 3.访问控制&安全组件&越权&三方组件 本篇主要了解以上问题在javaweb中的呈现&#xff0c; 第一个重点理解URL与javaweb代码框架的对应方式&#xff0c;java在没有代码的情况下是很难…

Echarts 让柱状图在图表中展示,离开X轴

文章目录 需求分析需求 分析 话不多说,直接源码展示 option = {title: {text: Waterfall Chart,subtext: Li

PDF高效编辑器革新:一键智能转换PDF至HTML,轻松开启文件处理全新时代!

信息爆炸的时代&#xff0c;PDF文件因其跨平台、不易修改的特性&#xff0c;成为了商务、教育、出版等领域不可或缺的文件格式。然而&#xff0c;PDF文件的固定性也带来了诸多不便&#xff0c;特别是在需要对其内容进行编辑或格式转换时。这时&#xff0c;一款高效、易用的PDF编…

旅游行业景点门票预订导游入驻攻略社区分享小程序开发

构建一款全新的旅游服务H5小程序&#xff0c;致力于为旅游行业提供全方位的旅游预订、导游服务、行程核销以及旅行见闻分享功能&#xff0c;为用户提供前所未有的便捷与愉悦体验。 以下是该小程序的核心功能概述&#xff1a; 用户端功能亮点&#xff1a; 账户管理多样化的注…