什么是 Jaeger?
Jaeger 是一种软件,可用于监控和解决互连软件组件(称为微服务)上存在的问题。多个微服务相互通信以完成单个软件功能。开发人员使用 Jaeger 可视化这些微服务交互中的事件链,以便在出现问题时将其隔离。Jaeger 也称为 Jaeger Tracing,因为它通过一系列微服务交互跟踪或追踪请求的路径。
为什么 Jaeger 很重要?
过去,软件设计是整体性的,将多个功能捆绑在一个代码库中。例如,为了设计一个食品订购应用程序,食品菜单、餐厅和支付系统都被捆绑到一个软件单元中。这种类型的软件设计使解决方案更加复杂且难以维护。当开发人员在一个区域进行代码更改时,会影响整个系统,这使更改管理成为一个漫长而繁琐的过程。为了解决这个问题,架构设计变得更加模块化。
微服务
现代应用程序作为称为微服务的较小独立单元的集合。例如,现代食品订购应用程序可能包含以下部分:
- 用于检测客户位置的地理定位服务
- 一项收集订单并将其发送到餐厅的服务
- 具有多种支付选项的支付网关
每个微服务都作为一个独立的应用程序工作,并且可以访问自己的数据库和逻辑。微服务使用请求和响应相互通信,就像 Web 应用程序一样。微服务基础系统也称为分布式系统。
微服务架构故障排除
由于微服务的复杂行为,调查分布式系统中的问题具有挑战性。例如,在模块化应用程序上下订单可能会触发对不同微服务的多个请求。这些请求可以同时且独立地发生,而不必按顺序。如果食品订单出现问题,开发人员需要确定是哪个微服务引起的。传统的问题跟踪方法只能了解请求的一部分,使得微服务故障排除变得十分繁琐。
Jaeger 是一种软件工具,IT 团队使用它来清晰了解整个事件链。他们可以更快地解决问题并改善客户体验。
Jaeger 的作用?
开发人员使用 Jaeger 以几种不同的方式提高分布式系统的性能。下面提供了一些示例。
分布式事务监控
Jaeger 具有监控微服务之间的数据移动的功能。开发人员可以在中断用户体验之前采取积极主动的方法来检测和解决问题。
延迟优化
Jaeger 分析可以定位微服务中降低应用程序速度的瓶颈。开发人员使用 Jaeger 来检查微服务的行为并寻找加快它们的方法。
根本原因分析
在微服务架构中,一个问题可能会导致其他问题。开发人员可以使用 Jaeger 找到应用程序中一系列相关问题的起点。
服务依赖性分析
服务依赖性意味着一个应用程序依赖于几个组件来运行。例如,导航应用程序依赖于移动应用程序上的定位服务。开发人员使用 Jaeger 来了解不同微服务之间的复杂关系。
分布式上下文传播
分布式上下文传播是应用程序与数据一起传递描述性信息的方式。这有助于开发人员从整体上评估微服务性能。例如,Jaeger 使用客户姓名标记订单请求,以便开发人员可以将请求路径与特定客户相关联。
Jaeger 的工作原理是什么?
Jaeger 采用分布式跟踪的原则,并使用 OpenTracing 框架。
分布式跟踪
分布式跟踪是一种监控微服务之间事件序列的软件技术。它跟踪所有连接并提供图表以可视化应用程序中的请求路径。作为一种分布式跟踪工具,Jaeger 通过为每个请求分配一个唯一标识符并在特定服务处理请求时收集信息来跟踪请求移动。
OpenTracing
OpenTracing 是一个开源或免费提供的框架,它提供了在现代软件系统中实现准确、交钥匙分布式跟踪的标准。例如,它提供了一个通用标准,用于定义在微服务之间传输的受监控信息的结构。Jaeger 使用 OpenTracing 提供完整的解决方案来收集、存储、管理、分析和可视化微服务数据。
OpenTracing 数据模型
OpenTracing 数据模型提供了连接来自不同组件的数据的基本定义。它使用的两个主要术语是跨度和跟踪。
跨度
跨度是在分布式跟踪系统中完成的单个逻辑工作单元。每个跨度都包含以下组件:
- 操作名称
- 开始时间和停止时间
- 帮助开发人员分析跨度的标签或值
- 存储微服务生成的任何消息的日志
- 跨度上下文或跨度的附加描述
跟踪
跟踪是属于同一进程的一个或多个跨度的集合。它代表在特定时间发生的事件。属于同一跟踪的跨度共享相同的跟踪 ID。例如,当客户订购食物时生成的跟踪会产生以下跨度:
- 客户提交订单
- 处理付款
- 订单清单被提交给餐厅
- 拣选食物
- 食物送达
Jaeger 有哪些组成部分?
Jaeger 分布式追踪平台由以下组件组成。
Jaeger 客户端
Jaeger 客户端包含使用 Go、JavaScript、Java、Python、Ruby 和 PHP 等编程语言的 OpenTracing API 的特定语言实施。
开发人员使用这些 API 来创建 Jaeger 跨度,而无需编写用于分布式跟踪的源代码。
Jaeger 代理
Jaeger 代理是网络进程守护程序或在后台连续运行以执行其他进程所需功能的进程。它会侦听客户端通过用户数据报协议(UDP)发送的跨度,这是一种允许应用程序通过网络交换消息的通信方法。
代理连接到容器环境中的客户端,如 Amazon Elastic Kubernetes Service。代理组批量创建跨度并将它们发送到收集器。这允许应用程序在不主动向 Jaeger 后端发送跟踪信息的情况下运行。
Jaeger 收集器
Jaeger 收集器是从 Jaeger 收集器检索跟踪的软件组件。它会检查、处理和存储数据库中的跟踪。
存储
Jaeger 跟踪系统接收跨度并将它们存储在持久存储后端或数据库中。持久存储是指即使计算机断电,存储的数据也会完好无损。例如,开发人员使用 AWS OpenSearch Service 作为持久存储来存储和接受跨度。
摄取器
部署 Jaeger 的一种方法是将跟踪数据发送到 Kafka,Kafka 是一个分布式系统,供应用程序存储和检索信息流。摄取器是从 Kafka 读取跟踪数据并单独存储的模块。
查询
查询服务从数据库中检索跟踪信息。开发人员使用查询来查找具有特定时间、标签、持续时间和操作的跟踪。
Jaeger 控制台
Jaeger 控制台是一个具有用户界面的软件程序,您可以使用它来查看和分析跟踪。它以图形和图表的形式显示跟踪数据。
开发人员如何使用 Jaeger?
当开发人员构建应用程序时,他们使用 Jaeger 客户端库来创建跨度。通过向程序添加代码以生成跟踪数据,他们创建了所谓的检测应用程序。检测的应用程序会自动生成以下内容:
- 包含跨度 ID、跟踪 ID、标签、日志和跨度上下文的跨度
- 每个请求的跟踪
开发人员使用 Jaeger 控制台来搜索、筛选、可视化和分析这些分布式跟踪数据。他们可以使用 Jaeger UI 软件来查看详细信息,例如进程持续时间、错误和来自微服务的日志。
Jaeger 采样策略是什么?
只要应用程序运行,检测的应用程序就会自动传输跟踪数据。您可以使用此跟踪数据来衡量应用程序性能。它也称为遥测数据。为防止 Jaeger 后端因遥测数据过多而不堪重负,您可以通过在 Jaeger 实施中配置采样策略来对其进行筛选或采样。以下是一些采样策略:
- 固定采样将为所有类型的跟踪收集相同数量的样本。
- 概率采样将随机收集样本,直到达到一定百分比。
- 速率限制采样每秒检索特定数量的样本。
- 自适应采样会自动调整采样率,以使特定持续时间的跟踪达到一定数量。
什么是 AWS App Mesh?
AWS App Mesh 是一种服务网格或软件基础设施,负责处理繁重的工作,便于更轻松地管理基于微服务的分布式系统。AWS App Mesh 执行以下操作:
- 为您的应用程序提供一致的端到端可见性和高可用性。
- 配置每个服务以导出遥测数据,并在整个应用程序中实现一致的通信控制逻辑。
- 提供网络流量控制,以帮助开发人员构建安全的云应用程序。
您可以将 AWS App Mesh 用作分布式跟踪需求的独立解决方案。它还支持部分非 AWS 的第三方工具(如 Jaeger),您可以使用这些工具监控、记录或跟踪微服务通信。
立即创建 AWS 账户,开始在 App Mesh 上使用 Jaeger。