使用OpenTelemetry进行端到端跟踪

【云原生】springboot 整合 OpenTelemetry springboot 整合 OpenTelemetry 阅读详情

作者/ Nicolas Fränkel 

来源/翻译外网

无论您是否实现微服务,您的系统很可能由多个组件组成。最直接的系统可能由反向代理、应用程序和数据库组成。在这种情况下,监控不仅是一个好主意,而且是一项要求。请求可能流经的组件数量越多,要求就越强。

然而,监控只是旅程的开始。当请求开始集体失败时,您需要一个跨所有组件的聚合视图。它被称为追踪,它是可观察性的支柱之一。另外两个是指标和日志。

在这篇文章中,我将只关注跟踪,并描述如何开始你的可观察性之旅。

W3C 跟踪上下文规范

跟踪解决方案应提供跨异构技术堆栈工作的标准格式。这种格式需要遵守规范,无论是正式的还是事实上的。

人们需要了解,规范很少会凭空出现。一般来说,市场已经有几个不同的实现。大多数时候,一个新的规范会导致一个额外的实现,正如著名的 XKCD 漫画所描述的:

然而,有时会发生奇迹:市场遵守新规范。在这里,Trace Context 是一个 W3C 规范,它似乎成功了:

“该规范定义了标准的 HTTP 标头和一种值格式来传播支持分布式跟踪场景的上下文信息。该规范标准化了上下文信息在服务之间的发送和修改方式。上下文信息唯一地标识了分布式系统中的各个请求,还定义了一种方法添加和传播提供者特定的上下文信息。”

文件中出现了两个关键概念:

  • 跟踪遵循跨越多个组件的请求的路径。

  • 跨度绑定到单个组件并通过子父关系链接到另一个跨度。

在撰写本文时,该规范是 W3C 推荐,这是最后阶段。

Trace Context 已经有很多实现。其中之一是 OpenTelemetry。

OpenTelemetry 作为黄金标准
您越接近 IT 的运营部分,您听说OpenTelemetry的机会就越高:

“OpenTelemetry 是工具、API 和 SDK 的集合。使用它来检测、生成、收集和导出遥测数据(指标、日志和跟踪),以帮助您分析软件的性能和行为。

OpenTelemetry 通常可用于多个语言,适合使用。”

OpenTelemetry 是一个由CNCF管理的项目。在 OpenTelemetry 之前有两个项目:

  • OpenTracing,顾名思义就是专注于trace

  • OpenCensus,其目标是管理指标和跟踪

两个项目合并并在顶部添加了日志。OpenTelemetry 现在提供了一组专注于可观察性的“层”:

  • 多种语言的检测 API

  • 规范的实现,同样用不同的语言

  • 基础设施组件,例如收集器

  • 互操作性格式,例如 W3C 的 Trace Context

请注意,虽然 OpenTelemetry 是一个 Trace Context 实现,但它的功能更多。Trace Context 将自身限制为 HTTP,而 OpenTelemetry 允许 span 跨非 Web 组件,例如 Kafka。它超出了这篇博文的范围。

用例

我最喜欢的用例是电子商务商店,所以我们不要更改它。在这种情况下,商店是围绕微服务设计的,每个微服务都可以通过 REST API 访问,并受到 API 网关的保护。为了简化博客文章的架构,我将只使用两个微服务:catalog管理产品和pricing处理产品价格。

当用户到达应用程序时,主页会获取所有产品,获取它们各自的价格并显示它们。

更有趣的是,catalog是一个用 Kotlin 编码的 Spring Boot 应用程序,而pricing一个 Python Flask 应用程序。

跟踪应该允许我们通过网关跟踪请求的路径,包括微服务和(如果可能的话)数据库。

网关处的痕迹

入口点是跟踪中最令人兴奋的部分,因为它应该生成跟踪 ID。在这种情况下,入口点是网关。我将使用Apache APISIX来实现演示:

“Apache APISIX 提供了丰富的流量管理功能,如负载均衡、动态上游、金丝雀发布、断路器、身份验证、可观察性等。”

Apache APISIX 基于插件架构并提供OpenTelemetry 插件:

“该opentelemetry插件可用于根据 OpenTelemetry 规范报告跟踪数据。

该插件仅支持基于 HTTP 的二进制编码 OLTP。”

让我们配置opentelemetry插件:

#1:在独立模式下运行 Apache APISIX 以使演示更易于理解。无论如何,这在生产中是一个很好的做法。

#2:配置opentelemetry为全局插件。

#3:设置服务的名称。它将出现在跟踪显示组件中的名称。

#4:将跟踪发送到jaeger服务。以下部分将对其进行描述。

我们想跟踪每条路由,所以我们应该将插件设置为全局插件,而不是向每条路由添加插件:

#1:跟踪对性能有影响。我们追踪的越多,我们的影响就越大。因此,我们应该仔细平衡性能影响与可观察性的好处。但是,对于演示,我们希望跟踪每个请求。

收集、存储和显示轨迹

虽然 Trace Context 是 W3C 规范,而 OpenTelemetry 是事实上的标准,但市场上存在许多收集、存储和显示跟踪的解决方案。每个解决方案都可以提供所有三种功能或仅提供其中的一部分。例如,Elastic 堆栈处理存储和显示,但您必须依靠其他东西来收集。另一方面,Jaeger和Zipkin确实提供了一个完整的套件来实现所有三个功能。

Jaeger 和 Zipkin 早于 OpenTelemetry,因此每个都有其跟踪传输格式。不过,它们确实提供了与 OpenTelemetry 格式的集成。

在这篇博文的范围内,确切的解决方案并不相关,因为我们只需要功能。我选择 Jaeger 是因为它提供了一个一体化的 Docker 镜像:每个功能都有其组件,但它们都嵌入在同一个镜像中,这使得配置更加轻松。

镜像的相关端口如下:

Docker Compose 位如下所示:

#1:使用all-in-one图像。

#2:非常重要:启用 OpenTelemetry 格式的收集器。

#3:暴露 UI 端口。

现在我们已经建立了基础设施,我们可以专注于在我们的应用程序中启用跟踪。

Flask 应用程序中的跟踪
该pricing服务是一个简单的Flask应用程序。它提供了一个端点来从数据库中获取单个产品的价格。

#1:端点

#2:路线需要产品的ID。

#3:使用 SQLAlchemy 从数据库中获取数据。

#4:真实定价引擎永远不会随着时间的推移返回相同的价格。让我们将价格随机化一点以取乐。

警告:每次调用获取单一价格是非常低效的。它需要与产品一样多的调用,但它提供了更令人兴奋的跟踪。在现实生活中,路由应该能够接受多个产品 ID 并在一个请求-响应中获取所有相关价格。

现在是检测应用程序的时候了。有两种选择:自动仪表和手动仪表。自动是省力和快速的胜利;手册需要专注的开发时间。我建议从自动开始,如果需要,只添加手动。

我们需要添加几个 Python 包:

我们需要配置几个参数:

#1:将跟踪发送给 Jaeger。

#2:设置服务的名称。它将出现在跟踪显示组件中的名称。

#3:我们对日志和指标都不感兴趣。

现在,我们不使用标准flask run命令,而是将其包装:

就这样,我们已经从方法调用和 Flask 路由中收集了 span。

如果需要,我们可以手动添加额外的跨度,例如. :

#1:使用配置的标签和属性添加一个额外的跨度。

Spring Boot 应用程序中的跟踪

该服务是用Kotlin 开发catalog的 Reactive Spring Boot应用程序。它提供了两个端点:

  • 一取单品

  • 另一种是获取所有产品。

两者都先查看产品数据库,然后查询上述pricing服务的价格。

至于 Python,我们可以利用自动和手动检测。让我们从唾手可得的自动化仪表开始。在 JVM 上,我们通过一个代理来实现:

与 Python 一样,它为每个方法调用和 HTTP 入口点创建跨度。它还检测 JDBC 调用,但我们有一个反应式堆栈,因此使用 R2DBC。作为记录,GitHub 问题已开放以添加支持。

我们需要配置默认行为:

#1:将跟踪发送给 Jaeger。

#2:设置服务的名称。它将出现在跟踪显示组件中的名称。

#3:我们对日志和指标都不感兴趣。

至于 Python,我们可以通过添加手动检测来提升游戏。有两个选项可用:程序化和基于注释。除非我们引入 Spring Cloud Sleuth,否则前者有点复杂。让我们添加注释。

我们需要一个额外的依赖:

请注意:该工件是最近从io.opentelemetry:opentelemetry-extension-annotations.

我们现在可以注释我们的代码:

#1:使用配置的标签添加一个额外的跨度。

#2:将参数用作属性,键设置为id,值设置为参数的运行时值。

结果!

我们现在可以使用我们的简单演示来查看结果:

响应并不有趣,但让我们看看 Jaeger UI。我们找到了两条踪迹,每次调用一条:

我们可以深入研究单个跟踪的跨度:

请注意,我们可以在没有上述 UML 图的情况下推断出序列流。更好的是,序列显示组件内部的调用。

每个跨度都包含自动检测添加的属性和我们手动添加的属性:

结论

在这篇文章中,我展示了跟踪跨 API 网关的请求、基于不同技术堆栈的两个应用程序以及它们各自的数据库。我只刷了跟踪的表面:在现实世界中,跟踪可能会涉及与 HTTP 无关的组件,例如 Kafka 和消息队列。

尽管如此,大多数系统还是以一种或另一种方式依赖 HTTP。虽然设置起来并不简单,但也不是太难。跨组件跟踪 HTTP 请求是您实现系统可观察性之旅的良好开端。

【CANdelaStudio编辑CDD】-1.2-给$10服务SessionControl创建一个新Session会话并修改Session state machine会话状态机(UDS诊断) 前一篇:【UDS诊断描述文件CDD】-1.1-ISO_14229中$10服务理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/120375515案例背景: 在CDD中如何给$10服务创建一个新的Session会话; 在CDD中如何给$10服务修改Session state machine会话状态机。 目录 1 查看$10服务中已有的Session会话​ 2 查看$10服务中已有的Session state machine会话状态机 3 在$10... 阅读详情

相关推荐

ANSYS APDL生死单元实战:焊接模拟从入门到精通(附完整命令流)

本文详细介绍了使用ANSYS APDL进行焊接模拟的核心技术——生死单元法。通过一个完整的平板对接焊案例,从原理剖析、模型搭建、命令流编写到移动热源施加和后处理,手把手指导工程师掌握这一动态仿真方法,有效预测焊接过程中的温度场、残余应力与变形。

k6l7m8n9的博客 153

opentelemetry+python+jaeger链路追踪相关使用备注

opentelemetry+python+jaeger链路追踪相关使用

rgc_520_zyl的博客 4142

Cluster Computing投稿

在overleaf中新建picins.sty文件,该文件是导入的包在.tex文件中添加以下内容\usepackage{picins}%实现作者简介%下边这块有几个人复制几段\vspace{0\baselineskip} %这一行控制作者间隔,可视情况改数字!!!!!!!!

这里是萤石ym的学习路途,努力搬砖! 5536

使用OpenTelemetry监控达梦数据库

本文介绍了达梦数据库的一个OpenTelemetry的实现。这也是通过OJR实现OpenTelemetry的一个例子。相对于一般的基于Prometheus的实现,增加了对高基数(High Cardinality)的支持,也有更多的后端系统的支持。

liu_rui_的博客 1916

V-rep机器人仿真(Win10):UR5+RG2+Kinect+YOLOV3+DDPG+Pytorch(第四部分:YOLOV3图像识别)

这是一个V-rep机器人仿真实验,较为简单,适合初学者在入门图像识别、机器学习、机器人学的内容时进行学习与训练。 实验涉及的内容有:V-rep机器人仿真,YOLOV3图像识别,强化学习DDPG,UR5机械臂及RG2机械手,Kinect摄像头。 使用环境:Win10,Pytorch0.4,V-rep 整个实验一共由多篇文章组成,本文是第四部分。 第四部分:YOLOV3图像识别 文章目录第四部分:YO...

weixin_42158966的博客 5838

1.3-----Simplify 3D切片软件:从新手困惑到高效打印的进阶设置指南

本文详细介绍了Simplify 3D切片软件在大型模型打印中的高效设置技巧,包括切片效率、支撑结构智能生成和精细参数调节等核心优势。通过实战案例和进阶参数设置指南,帮助用户从新手快速进阶到高效打印,显著提升3D打印质量和效率。

weixin_42552716的博客 424

OpenTelemetry

我们强调了对正确数据进行检测的重要性,并得出结论,有许多良好的可观察性解决方案,包括开源的和商业的。它带来了一套完整的工具,真正做到了简单的插入,大大减少了所需的资源,并且因为它是一个开放的标准,切换到(或添加)其他后端需要很少的资源。是用于检测的基本接口——不会将实际的遥测数据发送到后端。这也意味着您可以坚持使用您选择的后端,同时能够更改您使用的语言 - 所有受支持的语言都将遵守相同的检测 API 规范。在调试分布式系统时,我面临的最大挑战之一是通过所涉及的所有服务获得事务的完整端到端旅程的可见性。

vvoennvv的博客 1045

kettle多表数据迁移

点击 文件——新建——作业,在左侧的 核心对象 标签下选择 通用,双击添加一个 start ,一个 转换 ,一个 作业 和一个 成功 到右侧的作业面板,这些作业项都可以改名字。点击文件—新建—转换,在左侧的 核心对象 标签下选择 输入 下的 表输入,双击添加到右侧的转换面板,再选择 作业 下的 复制记录到结果 ,双击添加到右侧的转换面板。新建转换,在左侧的 核心对象 标签下选择 作业 下的 从结果获取记录,双击添加到右侧的转换面板,再选择 作业 下的 设置变量 ,双击添加到右侧的转换面板。

u014061745的博客 1343

开源项目:OpenTelemetry C++ 客户端指南

--- ## 项目介绍 OpenTelemetry C++ 客户端是OpenTelemetry项目的一部分,提供了一套稳定且跨平台的工具,用于收集和传输分布式系统中的追踪、指标和日志数据。它遵循OpenTelemetry规范,支持C++14、C++17以及C++20标准,并在多种开发平台上进行了全面的构建与测试。这使得开发者能够轻松地为自己的应用程序添加观测性功能,从而更好地理解和优化系统性能...

gitblog_00045的博客 730

【深度学习新浪潮】OpenClaw跟机器人行业有哪些很好的研究结合点?

OpenClaw正通过"AI大脑+机器人肢体"的深度融合,重新定义机器人与人类的交互方式和自主操作能力。近期ROSClaw框架发布、人形机器人集成和空间计算试验等进展,标志着OpenClaw已从概念验证阶段进入实际应用落地期,为机器人行业带来了自然语言控制普及化具身智能平民化和跨平台开发标准化三大变革机遇。

专注:太空算力、AI infra、异构调度、大模型成本工程 229

镜头调焦的 调整的是焦距还是像距?

在镜头 “调焦”(即日常拍照时的)中,调整的核心是,而非焦距。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 1352

OpenTelemetry-开发人员入门

OpenTelemetry 可以帮助您!您希望让您的依赖项自动为您发出可观测数据。您的目标是通过编写代码获得可观测性。

MCC_MCC_MCC的博客 441

使用 MATLAB/Simulink + Simscape Electrical + Simulink Design Optimization,构建一个基于SiC/GaN的Z源逆变器在储能系统中的软启

《手把手教你学Simulink:Z源逆变器在储能系统中的应用》摘要 本文详细介绍了使用MATLAB/Simulink构建Z源逆变器储能系统仿真模型的全过程。Z源逆变器凭借其独特的阻抗网络结构,解决了传统逆变器在直通保护和升压能力方面的痛点。文章通过6个关键步骤:主电路搭建、调制策略设计、软启动实现、仿真分析、效率对比和工程问题解决方案,完整展示了Z源逆变器从理论到仿真的实现路径。重点讲解了直通零矢量SPWM调制策略和渐进式升压比控制方法,验证了系统93.3%的效率和优异的抗扰性能。该模型为光伏储能、电动汽车

MHD0815的博客 122

如何使用OpenTelemetry进行端对端跟踪

微服务架构引入了一种全新的方式来扩展具有多个独立服务的应用程序。与单体架构相比,它确实有助于提高弹性、可扩展性、生产力、效率。然而,其自身也带来一些复杂性,例如难以追踪错误或监控整个基础设施的流量。因此,为了消除这些复杂性,很多组织采用了分布式跟踪方法。这种方法有助于解决高级调试问题并提高网络中的可见性。它还通过缩小端到端延迟、特定服务或功能等当前所遇到的错误为开发人员提供支持。本文旨在介绍分布式...

qianshanding0708的博客 419

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

使用 AOP 在 Spring Boot 中实现跟踪和日志记录

此外,Jaeger、Zipkin 和 OpenTelemetry 等分布式跟踪工具可以帮助您跟踪跨多个服务的请求,从而使微服务中的调试和监控变得更加容易。在现代应用程序中,尤其是使用微服务构建的应用程序,跟踪和日志记录在跟踪流经各种服务的请求方面起着至关重要的作用。从前端生成的代码在 Spring Boot 应用程序中实现跟踪和日志记录,我们还将探索在微服务环境中进行分布式跟踪的选项。有助于追踪用户在系统中的旅程,但在更复杂的微服务架构中,通常需要分布式跟踪工具才能获得跨多个服务的整体视图。

adminmail的博客 1649

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用 OpenTelemetry 和 Langtrace 的 Elastic 分发跟踪基于 RAG 的聊天机器人

如何使用 Elastic 观察基于 OpenAI RAG 的应用程序。使用 Langtrace 对应用程序进行检测,收集日志、跟踪、指标,并了解 LLM 在 Kubernetes 上使用 OpenTelemetry 的 Elastic Distributions 的运行情况。目前,大多数 AI 驱动的应用都专注于提升最终用户(例如 SRE)从 AI 中获得的价值。其中,主要的应用场景是各种的构建。这些聊天机器人不仅依赖,还结合等框架以及方法,以在对话过程中提升上下文信息的准确性。

Elastic 中国社区官方博客 944

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

使用 Elastic 中的 OpenTelemetry 为 Nginx 实现端到端分布式追踪的实用指南

摘要:本文介绍了如何通过OpenTelemetry为Nginx实现端到端分布式追踪,解决现代架构中入口层监控缺失的问题。文章详细说明了在Debian系统上安装Nginx OpenTelemetry模块的步骤,包括全局配置和站点配置方法,以及如何将追踪数据发送到Elastic APM。通过这种集成,可以获得完整的请求链路追踪、精确的延迟分析、清晰的错误诊断以及准确的服务拓扑图,从而提升系统可观测性。该方法基于开放标准,适用于各类云环境和混合架构。

Elastic 中国社区官方博客 1124

使用opentelemetry-go操作Jaeger

分布式链路追踪

qq_43756091的博客 3490

OpenTelemetry 可观测建设

建设可观测性需要解决的问题 链路追踪怎么前后端串联? 链路追踪关联相应日志和指标? 1、OpenTelemetry 实现了不同语言的SDK,前端链路主要通过opentelemetry-js 实现,后端也有相关语言的实现,比如 Java、Go、Python 等,不同语言将各自的 trace 信息统一上报到 opentelemetry-collector(以下简称otel-collector)。 2、以 Java 语言为例,opentelemetry-java(以下简称“Agent”)通过javaage

liurui_wuhan的专栏 1522

OpenTelemetry,缺失的成分

我们强调了对正确数据进行检测的重要性,并得出结论,有许多良好的可观察性解决方案,包括开源的和商业的。它带来了一套完整的工具,真正做到了简单的插入,大大减少了所需的资源,并且因为它是一个开放的标准,切换到(或添加)其他后端需要很少的资源。是用于检测的基本接口——不会将实际的遥测数据发送到后端。这也意味着您可以坚持使用您选择的后端,同时能够更改您使用的语言 - 所有受支持的语言都将遵守相同的检测 API 规范。在调试分布式系统时,我面临的最大挑战之一是通过所涉及的所有服务获得事务的完整端到端旅程的可见性。

wouderw的博客 388

Opentelemetry简介

目录简介为什么使用Opentelemetry数据类型TracingMetricsLoggingBaggage包含哪些内容跨语言的规范CollectorReceiverProcessorExporter客户端参考 简介 OpenTelemetry 是一组 API、SDK、工具和集成,旨在创建和管理遥测数据,例如Trace、Metrics和Logs。该项目提供了一个与供应商无关的实现,可以将其配置为将遥测数据发送到您选择的后端。它支持各种流行的开源项目,包括 Jaeger 和 Prometheus。 主要解决的

qq_27749613的博客 1万+

什么是 OpenTelemetry?

​OpenTelemetry (OTel) 是一个开源可观测性框架,允许开发团队以单一、统一的格式生成、处理和传输遥测数据(telemetry data)。它由云原生计算基金会 (CNCF) 开发,旨在提供标准化协议和工具,用于收集和路由指标、日志和跟踪到监控平台。OpenTelemetry 提供与供应商无关的 SDK、API 和工具,因此你的数据可以发送到任何可观测性后端进行分析。OpenTelemetry 正迅速成为云原生应用程序中占主导地位的可观测性遥测标准。对于希望为未来的数据需求做好准备

Elastic 中国社区官方博客 5114

OpenTelemetry 笔记 (OTel)

OpenTelemetry 笔记 (OTel)

云满笔记 5552

Jenkins OpenTelemetry 插件使用教程

Jenkins OpenTelemetry 插件使用教程 1. 项目介绍 Jenkins OpenTelemetry 插件是一个开源项目,它能够帮助用户监控和观察 Jenkins 的运行情况,通过 OpenTelemetry 将 Jenkins 的作业和流水线执行可视化成分布式跟踪。该插件支持多种监控后端,如 Jaeger、Zipkin、Prometheus、Elastic Observabili...

gitblog_00669的博客 519

终极指南:如何实现gRPC-web请求跟踪与OpenTelemetry、Jaeger集成

gRPC-web是专为Web客户端设计的gRPC实现,它允许浏览器应用直接与gRPC服务通信。在分布式系统中,请求跟踪是排查问题和优化性能的关键。本文将详细介绍如何在gRPC-web项目中集成OpenTelemetry和Jaeger,实现端到端的请求跟踪,帮助开发者轻松定位和解决服务通信中的问题。 ## 为什么需要请求跟踪? 在微服务架构中,一个用户请求可能会经过多个服务。当出现问题时,很难确

gitblog_00809的博客 315
上一篇: 优维低代码:Context 上下文
下一篇: 云原生一体化运维助力百丽国际夯实数字化基石
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值