第 2 章 Jaeger 架构
2.1. Jaeger 架构
每次用户在某个应用程序中执行一项操作时,一个请求都会在所在的系统上执行,而这个系统可能需要几十个不同服务的共同参与才可以做出相应的响应。Jaeger 提供了分布式追踪功能,可以在组成一个应用程序的多个微服务间记录请求的路径。
分布式追踪是用来将不同工作单元的信息关联起来的技术,通常是在不同进程或主机中执行的,以便理解分布式事务中的整个事件链。开发人员可以视觉化在大型微服务架构中调用的流程。它对理解序列化、并行性和延迟来源会很有价值。
Jaeger 在微服务的整个堆栈中记录了独立请求的执行过程,并将其显示为 trace。trace是系统的数据/执行路径。一个端到端的 trace 由一个或者多个 span 组成。
span 代表 Jaeger 中的逻辑工作单元,它包含操作名称、操作的开始时间和持续时间,以及可能的标签(tag)和日志信息。span 可能会被嵌套并排序以模拟因果关系。
2.1.1. Jaeger 概述
作为服务所有者,您可以使用 Jaeger 来检测您的服务,以收集与服务架构相关的信息。Jaeger 是一个开源的分布式追踪平台,可用来对现代的、云原生的基于微服务的应用程序中组件间的交互进行监控、创建网络配置集并进行故障排除。
使用 Jaeger 可让您执行以下功能:
- 监控分布式事务
- 优化性能和延迟时间
- 执行根原因分析
Jaeger 基于厂商中立的 OpenTracing API 和工具。
2.1.2. Jaeger 特性
Jaeger 追踪提供以下功能:
- 与 Kiali 集成 – 当正确配置时,您可以从 Kiali 控制台查看 Jaeger 数据。
- 高可伸缩性 – Jaeger 后端被设计为没有单一故障点,并可根据需要进行缩放。
- 分布式上下文发布 – 允许您通过不同的组件连接数据以创建完整的端到端的 trace。
- 与 Zipkin 的后向兼容性 – Jaeger 带有 API,让它可以作为 Zipkin 的直接替代项,但红帽在此发行版本中不支持 Zipkin 的兼容性。
2.1.3. Jaeger 架构
Jaeger 由几个组件组成,它们一起收集、存储和显示追踪数据。
- Jaeger Client (Tracer、Reporter、instrumented application, client libraries)- Jaeger client 是 OpenTracing API 的具体语言实现。它们可以用来为各种现有开源框架(如 Camel (Fuse) 、Spring Boot (RHOAR) 、MicroProfile (RHOAR/Thorntail) 、Wilfly (EAP) 等提供分布式追踪工具。
- Jaeger Agent (Server Queue, Processor Workers)- Jaeger 代理是一个网络守护进程,它会监听通过 User Datagram Protocol (UDP) 发送的 span,并发送到收集程序。这个代理应被放置在要管理的应用程序的同一主机上。这通常是通过如 Kubernetes 等容器环境中的 sidecar 来实现的。
- Jaeger Collector (Que,Weue)- 与代理类似,该收集器可以接收 span,并将其放入内部队列以便进行处理。这允许收集器立即返回到客户端/代理,而不需要等待 span 进入存储。
- Storage (Data Store) - 收集器需要一个持久的存储后端。Jaeger 带有一个可插入的机制用于 span 存储。请注意:在这个发行本中,唯一支持的存储是 Elasticsearch。
- Query (Query Service) - Query 是一个从存储中检索 trace 的服务。
- Ingester (Ingester Service) - Jaeger 可以使用 Apache Kafka 作为收集器和实际后备存储 (Elasticsearch) 之间的缓冲。Ingester 是一个从 Kafka 读取数据并写入另一个存储后端 (Elasticsearch) 的服务。
- Jaeger Console – Jaeger 提供了一个用户界面,可让您可视觉地查看所分发的追踪数据。在搜索页面中,您可以查找 trace,并查看组成一个独立 trace 的 span 详情。