架构

该架构基于 Istio、OpenTelemetry 和 Jaeger 技术栈,实现了分布式追踪的全生命周期管理。系统由五个核心模块组成:数据采集、传输、存储、查询和可视化。

核心组件

  1. Istio 系统

    • istio-proxy
      一个侧车代理,它自动捕获并生成服务之间通信的追踪数据,无需代码修改。
    • istiod
      控制 istio-proxy 的配置和生命周期,包括服务网格的追踪配置。
  2. OpenTelemetry 系统

    • opentelemetry-operator
      一个集群级别的 Operator,负责部署和管理 otel-collector 组件,提供 OTel 自动注入能力。
    • otel-collector
      接收来自应用程序的追踪数据,进行过滤和批处理,然后将其转发到 jaeger-collector。
    • 追踪 UI
      一种自开发的可视化界面,与 jaeger-query API 集成,支持多维度的查询条件。
  3. Jaeger 系统

    • jaeger-operator
      部署和管理 jaeger-collector 和 jaeger-query 组件。
    • jaeger-collector
      接收由 otel-collector 转发和处理的追踪数据,执行格式转换,并将数据写入 Elasticsearch。
    • jaeger-query
      提供追踪查询 API,支持包括 TraceID 和标签在内的多条件检索。
  4. 存储层

    • Elasticsearch
      一个分布式存储引擎,支持高效写入和检索大量的 Span 数据。

数据流

  • Istio 写入过程
    应用程序 -> jaeger-collector -> Elasticsearch

    istio-proxy 自动捕获服务间通信的追踪数据,随后直接发送到 jaeger-collector,以便在 Elasticsearch 中进行持久化存储。

  • OpenTelemetry 写入过程
    应用程序 -> otel-collector -> jaeger-collector -> Elasticsearch

    应用程序通过 SDK 或自动注入生成 Span 数据,otel-collector 对其进行标准化,随后由 jaeger-collector 持久化到 Elasticsearch。

  • 查询过程
    用户 -> 追踪 UI -> jaeger-query -> Elasticsearch

    用户通过 UI 提交查询条件,jaeger-query 从 Elasticsearch 中检索数据;UI 根据返回数据对结果进行可视化。