欢迎来到皮皮网网首页

【阿里巴巴抢单源码】【webeditor源码】【记事源码】jeager源码解析

来源:门票销售源码 时间:2024-11-24 09:24:27

1.初探 OpenTelemetry
2.OpenTelemetry、Spring Cloud Sleuth、Kafka、Jager实现分布式跟踪

jeager源码解析

初探 OpenTelemetry

       OpenTelemetry 是源码一个由 OpenTracing 和 OpenCensus 合并而成的开放源代码项目,旨在统一软件性能和行为分析的解析 Metrics、Logs 和 Traces 数据格式。源码作为 CNCF 的解析阿里巴巴抢单源码孵化项目,它提供了标准化的源码工具、API 和 SDK,解析使得开发人员能够轻松地在不同后端(如 Prometheus、源码Jaeger 或云服务)之间共享和处理可观测性数据,解析而无需频繁地调整代码或代理配置。源码

       以前,解析由于每个可观测性后端使用不同的源码webeditor源码检测库,缺乏标准化导致数据移植困难,解析维护负担重。源码OpenTelemetry 的解析诞生旨在解决这个问题,它通过创建一个通用的源码 SDK 和 API,使数据能够无缝地在各种工具间流动,记事源码无论是在开源还是商业平台,极大地提升了数据的可移植性和可维护性。

       OpenTelemetry 支持的 Traces 功能强大,记录单个请求的追踪,包括分布式追踪,tphouse 源码以及 Span(工作单元)中的 Span Context、Attributes(元数据)、Events(时间点)、Links(关联)、Status(状态)和 Span Kind(类型)。thinfell源码Metrics 负责实时度量,Logs 则提供详细日志记录,而 Baggage 作为上下文信息,便于跨 Span 传递信息。

       Baggage 的使用需注意,它与 Span 属性独立,且存储在 HTTP 头中,适用于网络内的隐私数据传输。OTel Baggage 可用于保持跨服务的上下文信息,但需谨慎处理,因为没有内置的完整性检查。

       综上,OpenTelemetry 通过标准化和统一的工具,简化了可观测性数据的收集、处理和分享,为开发者和运维人员提供了强大的性能监控和诊断工具。

OpenTelemetry、Spring Cloud Sleuth、Kafka、Jager实现分布式跟踪

        分布式跟踪可让您深入了解特定服务在分布式软件系统中作为整体的一部分是如何执行的。它跟踪和记录从起点到目的地的请求以及它们经过的系统。

       

        在本文中,我们将使用 OpenTelemetry、Spring Cloud Sleuth、Kafka 和 Jaeger 在三个 Spring Boot 微服务 中实现分布式跟踪。

       

        我们先来看看分布式追踪中的一些基本术语。

       

        跨度:表示系统内的单个工作单元。跨度可以相互嵌套以模拟工作的分解。例如,一个跨度可能正在调用一个 REST 端点,然后另一个子跨度可能是该端点调用另一个,等等在不同的服务中。

       

        Trace:所有共享相同根跨度的跨度集合,或者更简单地说,将所有跨度创建为原始请求的直接结果。跨度的层次结构(每个跨度在根跨度旁边都有自己的父跨度)可用于形成有向无环图,显示请求在通过各种组件时的路径。

       

       

        OpenTelemetry ,也简称为 OTel,是一个供应商中立的开源 Observability 框架,用于检测、生成、收集和导出遥测数据,例如 跟踪 、 指标 和 日志 。作为 云原生 计算基金会 (CNCF) 的孵化项目,OTel 旨在提供与供应商无关的统一库和 API 集——主要用于收集数据并将其传输到某处。OTel 正在成为生成和管理遥测数据的世界标准,并被广泛采用。

       

       

        Sleuth 是一个由 Spring Cloud 团队管理和维护的项目,旨在将分布式跟踪功能集成到 Spring Boot 应用程序中。它作为一个典型Spring Starter的 . 以下是一些开箱即用的 Sleuth 工具:

       

       

        Sleuth 添加了一个拦截器,以确保在请求中传递所有跟踪信息。每次调用时,都会创建一个新的 Span。它在收到响应后关闭。

       

        Sleuth 能够跟踪您的请求和消息,以便您可以将该通信与相应的日志条目相关联。您还可以将跟踪信息导出到外部系统以可视化延迟。

       

       

        Jaeger 最初由 Uber 的团队构建,然后于 年开源。它于 年被接受为云原生孵化项目,并于 年毕业。作为 CNCF 的一部分,Jaeger 是云原生 架构 中公认的项目。它的源代码主要是用 Go 编写的。Jaeger 的架构包括:

       

       

        与 Jaeger 类似,Zipkin 在其架构中也提供了相同的组件集。尽管 Zipkin 是一个较老的项目,但 Jaeger 具有更现代和可扩展的设计。对于此示例,我们选择 Jaeger 作为后端。

       

       

        让我们设计三个 Spring Boot 微服务:

       

       

       

       

       

        这三个微服务旨在:

       

       

        这是为了观察 OpenTelemetry 如何结合 Spring Cloud Sleuth 处理代码的自动检测以及生成和传输跟踪数据。上面的虚线捕获了微服务导出的跟踪数据的路径,通过OTLP(OpenTelemetry Protocol)传输到OpenTelemetry Collector,收集器依次处理并将跟踪数据导出到后端Jaeger进行存储和查询。

       

        使用 monorepo,我们的项目结构如下:

       

       

       

       

        第 1 步:添加 POM 依赖项

       

        这是使用 OTel 和 Spring Cloud Sleuth 实现分布式跟踪的关键。我们的目标是不必手动检测我们的代码,因此我们依靠这些依赖项来完成它们设计的工作——自动检测我们的代码,除了跟踪实现、将遥测数据导出到 OTel 收集器等。

       

       

       

        第 2 步:OpenTelemetry 配置

       

        OpenTelemetry 收集器端点

       

        对于每个微服务,我们需要在其中添加以下配置application.yml(请参阅下面部分中的示例片段)。spring.sleuth.otel.exporter.otlp.endpoint主要是配置OTel Collector端点。它告诉导出器,在我们的例子中是 Sleuth,通过 OTLP 将跟踪数据发送到指定的收集器端点pose 服务。

       

        跟踪数据概率抽样

       

        spring.sleuth.otel.config.trace-id-ratio-based属性定义了跟踪数据的采样概率。它根据提供给采样器的分数对一部分迹线进行采样。概率抽样允许 OpenTelemetry 跟踪用户通过使用随机抽样技术降低跨度收集成本。如果该比率小于 1.0,则某些迹线将不会被导出。对于此示例,我们将采样配置为 1.0、%。

       

        有关其他 OTel Spring Cloud Sleuth 属性,请参阅常见应用程序属性。

       

       

        OpenTelemetry 配置文件

       

        我们需要项目根目录下的 OTel 配置文件otel-config.yaml。内容如下。此配置文件定义了 OTel 接收器、处理器和导出器的行为。正如我们所看到的,我们定义了我们的接收器来监听 gRPC 和 HTTP,处理器使用批处理和导出器作为 jaeger 和日志记录。

       

       

        第 3 步:docker-compose 将所有内容串在一起

       

        让我们看看我们需要启动哪些 docker 容器来运行这三个微服务并观察它们的分布式跟踪,前三个微服务在上面的部分中进行了解释。

       

       

       

        运行docker-compose up -d以调出所有九个容器:

       

       

       

        第 4 步:追踪数据在行动

       

        快乐之路

       

        现在,让我们启动customer-service-bff流程的入口点,以创建新客户。

       

       

       

        启动 Jaeger UI, /?target=http%3A//localhost%3A/%2C]按[/url]服务搜索customer-service-bff,单击Find Traces按钮,这是我们看到的创建客户跟踪:它跨越三个服务,总共跨越六个,持续时间 . 毫秒。

       

       

       

        除了 Trace Timeline 视图(上面的屏幕截图),Jaeger 还提供了一个图形视图(Trace Graph在右上角的下拉菜单中选择):

       

       

       

        三个微服务在 docker 中的日志输出显示相同的跟踪 id,以红色突出显示,并根据其应用程序名称显示不同的跨度 id(应用程序名称及其对应的跨度 id 以匹配的颜色突出显示)。在 的情况下customer-service,相同的 span id 从 REST API 请求传递到 Kafka 发布者请求。

       

       

       

       

       

       

       

       

        customer-service让我们在 docker 中暂停我们的PostgreSQL 数据库,然后重复从customer-service-bff. internal server error正如预期的那样,我们得到了。检查 Jaeger,我们看到以下跟踪,异常堆栈跟踪抱怨SocketTimeoutException,再次如预期的那样。

       

       

       

        识别长期运行的跨度

       

        Jaeger UI 允许我们搜索超过指定最大持续时间的跟踪。例如,我们可以搜索所有耗时超过 毫秒的跟踪。然后,我们可以深入研究长期运行的跟踪以调查其根本原因。

       

       

        在这个故事中,我们从 OpenTelemetry、Spring Cloud Sleuth 和 Jaeger 的角度解压了分布式跟踪,验证了 REST API 调用和 Kafka pub/sub 中分布式跟踪的自动检测。我希望这个故事能让你更好地理解这些跟踪框架和工具,尤其是 OpenTelemetry,以及它如何从根本上改变我们在 分布式系统 中进行可观察性的方式。