关于 Alauda Distributed Tracing
Alauda Distributed Tracing 记录单个请求如何在分布式应用中的各个服务之间流转。它帮助团队端到端地跟踪请求路径,理解跨服务边界的延迟,并在 cloud-native microservice 环境中排查故障。
分布式追踪中的关键概念
在现代应用中,单个用户操作通常会触发跨多个服务的工作。分布式追踪会关联这些工作单元,从而可以将完整的执行路径作为一次事务进行分析。
trace 表示请求穿过系统的端到端路径。每个 trace 包含一个或多个 span。
span 表示一个逻辑工作单元。它记录操作名称、开始时间、持续时间,以及 tags 和 logs 等可选元数据。span 可以嵌套,以显示上游和下游操作之间的因果关系。
作为服务所有者,你可以使用 Alauda Distributed Tracing 来为应用添加埋点、理解服务依赖关系、分析延迟以及调查故障。
使用 Alauda Distributed Tracing,你可以:
- 监控分布式事务
- 优化性能和延迟
- 进行根因分析
Alauda Distributed Tracing 可以与其他可观测性组件协同工作:
- Alauda Build of OpenTelemetry v2 用于收集、处理并将 telemetry 数据转发到 Jaeger。
- 与 Kiali 集成 用于从 service mesh 控制台打开 trace 数据。
功能特性
Alauda Distributed Tracing 提供以下能力:
- 与 Kiali 集成。当与 Alauda Service Mesh 配置后,你可以直接从 Kiali 控制台打开分布式追踪数据。
- 高可扩展性。Jaeger 后端旨在随着应用流量和运维增长进行水平扩展。
- 分布式上下文传播。trace 上下文可以跨服务边界传播,从而将相关的 span 连接成完整的端到端 trace。
- Zipkin 兼容性。Jaeger 可以接收 Zipkin 格式的追踪数据,这有助于团队以最小改动从现有的 Zipkin 埋点迁移过来。
有关更全面的功能概述,请参见 Features。
架构
Alauda Distributed Tracing 将 Jaeger v2、Alauda Build of OpenTelemetry v2 和 Elasticsearch 结合起来,在 Kubernetes 上收集、存储和可视化 trace 数据。
主要组件如下:
- Alauda Distributed Tracing (Jaeger):该组件基于 Jaeger v2,提供追踪后端。
- Jaeger Binary。主运行时基于 OpenTelemetry Collector framework 构建,可以运行按角色划分的部署,例如
collector和query,以接收、存储、搜索和可视化 trace 数据。 - Jaeger ES Rollover:该组件负责管理 Elasticsearch rollover 资源,例如 templates、aliases 和索引轮转,以便长期运行的集群能够高效保留追踪数据。
- Jaeger Binary。主运行时基于 OpenTelemetry Collector framework 构建,可以运行按角色划分的部署,例如
- Alauda Build of OpenTelemetry v2:该组件基于开源 OpenTelemetry 项目,提供受支持的发行版,用于接收、处理和导出 telemetry 数据。
- OpenTelemetry Operator:该 Operator 在集群上部署和管理 Jaeger 实例,并协调追踪管道所需的资源。
- OpenTelemetry Collector:该 Collector 是一个 vendor-neutral 组件,可以放置在 Jaeger 前端,用于接收 telemetry、对其进行增强或转换,并将其转发到一个或多个后端。它也是 instrumentation libraries 的常见目标,后者使用 OTLP 等开放标准导出 telemetry 数据。
- Elasticsearch:Elasticsearch 存储 trace 数据以供搜索和分析,并作为 Alauda Distributed Tracing 的后端存储。
有关更全面的架构概述,请参见 Architecture。