02.2核心组件 API SDK Collector

分类: OpenTelemetry架构概览

核心组件:API、SDK、Collector

本节将学习:API、SDK、Collector 这三大核心组件。它们分别是什么?它们的作用是什么?它们之间的关系是什么?

三大组件概览

OpenTelemetry 有三个核心组件:API 层、SDK 层、Collector

它们的关系是这样的

  • 应用程序使用 API 层。API 层提供抽象接口,不依赖具体实现。
  • API 层调用 SDK 层。SDK 层提供具体实现,处理数据采集和导出。
  • SDK 层导出数据到 Collector。Collector 处理数据和路由,支持多种后端。
  • Collector 路由到后端存储,比如 Prometheus、Loki、Tempo。

为什么要这样设计呢? 这样设计的好处是分层清晰:

  • API 层:抽象接口定义,不依赖具体实现。这意味着可以切换不同的 SDK,而不需要修改应用代码。
  • SDK 层:具体实现,处理数据采集和导出。不同的语言有不同的 SDK,但是都遵循相同的 API。
  • Collector:数据处理和路由,支持多种后端。可以使用 Collector 处理数据,然后路由到不同的后端存储。

这就是 OpenTelemetry 的三大核心组件。现在让我们深入了解每一个组件。

API 层:抽象接口定义

API 层是什么? API 层是抽象接口定义。它的职责是定义 Traces、Metrics、Logs 的接口,不依赖具体实现,可以切换不同的 SDK。

API 层的核心特点

第一个特点:抽象接口。 API 层定义统一的接口,不依赖具体实现。这意味着可以使用 API,而不需要关心底层是怎么实现的。

第二个特点:语言无关。 不同语言使用相同的 API 概念。例如,Java、Python、Go、JavaScript,它们都使用相同的 API 概念,比如 Tracer、Span、Counter 等等。

第三个特点:可移植性。 可以切换不同的 SDK,而不需要修改应用代码。例如,可以从 Java SDK 切换到其他 SDK,应用代码不需要改变。

第四个特点:标准化。 API 层使用统一的 API 设计,保证一致性。无论使用什么语言、什么 SDK,API 都是一致的。

API 层的代码示例:在 Java 中,可以这样使用 API:

Tracer tracer = GlobalOpenTelemetry.getTracer("my-service");
Span span = tracer.spanBuilder("operation").startSpan();

这个代码使用的是 API 层,它不依赖具体的 SDK 实现。

SDK 层:具体实现

SDK 层是什么? SDK 层是具体实现。它的职责是实现 API 层定义的接口,处理数据采集和导出,管理配置和资源。

SDK 层的核心特点

第一个特点:具体实现。 SDK 层实现 API 层定义的接口。例如,API 层定义了 Tracer 接口,SDK 层实现了 TracerImpl 类。

第二个特点:数据采集。 SDK 层采集 Traces、Metrics、Logs。它在应用运行时采集数据,比如创建 Span、记录 Metrics、写入 Logs。

第三个特点:数据处理。 SDK 层处理、聚合、采样数据。例如,它可以聚合 Metrics,采样 Traces,处理 Logs。

第四个特点:数据导出。 SDK 层导出数据到 Collector 或后端。它可以导出到 OpenTelemetry Collector,也可以直接导出到后端存储。

SDK 层支持哪些语言? OpenTelemetry SDK 支持多种语言,比如 Java、Python、Go、JavaScript/TypeScript、.NET、C++ 等等。每个语言都有自己的 SDK,但是都遵循相同的 API。

SDK 层的代码示例:在 Java 中,可以这样配置 SDK:

OpenTelemetrySdk sdk = OpenTelemetrySdk.builder()
    .setTracerProvider(tracerProvider)
    .build();

这个代码配置的是 SDK 层,它设置了 Tracer Provider,用于创建和管理 Traces。

Collector:数据处理和路由

Collector 是什么? Collector 是数据处理和路由组件。它的职责是接收来自 SDK 的数据,处理、转换、聚合数据,路由到不同的后端存储。

Collector 的架构:Collector 有三个主要组件:Receivers(接收器)、Processors(处理器)、Exporters(导出器)。

  • Receivers:接收来自 SDK 的数据
  • Processors:处理、转换、聚合数据
  • Exporters:导出数据到后端存储

这就是 Collector 的架构。它就像一个数据处理管道,接收数据,处理数据,导出数据。

Collector 的核心特点

第一个特点:数据接收。 Collector 接收来自 SDK 的数据,使用 OTLP(OpenTelemetry Protocol)协议。这个协议是 OpenTelemetry 定义的标准协议。

第二个特点:数据处理。 Collector 处理、转换、聚合数据。例如,它可以转换数据格式,聚合 Metrics,采样 Traces,处理 Logs。

第三个特点:数据路由。 Collector 路由到不同的后端存储。例如,它可以路由到 Prometheus、Loki、Tempo,或者其他的后端存储。

第四个特点:插件系统。 Collector 支持丰富的插件和扩展。可以使用 Receivers、Processors、Exporters 来扩展 Collector 的功能。

Collector 支持的导出器有哪些? Collector 支持多种导出器,比如 Prometheus Exporter、Loki Exporter、Tempo Exporter、Jaeger Exporter,或者自定义 Exporter。

三者关系总结

数据流程是这样的

第一步:应用程序使用 API 层。 应用程序使用 API 层创建 Traces、Metrics、Logs。它不关心底层是怎么实现的。

第二步:API 层调用 SDK 层。 API 层调用 SDK 层实现具体功能。SDK 层采集数据,处理数据,准备导出。

第三步:SDK 层导出数据到 Collector。 SDK 层导出数据到 Collector,使用 OTLP 协议。OTLP 是 OpenTelemetry 定义的标准协议。

第四步:Collector 处理数据并路由到后端存储。 Collector 处理数据,转换数据,路由到不同的后端存储,比如 Prometheus、Loki、Tempo。

关键点

  • API 层:抽象接口,不依赖实现,可以切换不同的 SDK
  • SDK 层:具体实现,处理数据采集和导出,不同的语言有不同的 SDK
  • Collector:数据处理和路由,支持多种后端,可以统一处理数据

这就是三者之间的关系。它们分工明确,各司其职,形成一个完整的可观察性体系。

本节小结

在本节中,我们学习了 OpenTelemetry 的三大核心组件:

第一个是 API 层。 抽象接口定义,不依赖具体实现,可以切换不同的 SDK。

第二个是 SDK 层。 具体实现,处理数据采集和导出,不同的语言有不同的 SDK。

第三个是 Collector。 数据处理和路由,支持多种后端,可以统一处理数据。

三者关系:API → SDK → Collector → 后端存储。它们分工明确,各司其职。

这就是 OpenTelemetry 的三大核心组件。理解这三者的关系,是掌握 OpenTelemetry 的关键。

在下一节,我们将深入了解数据流:从应用到可视化。看看数据是如何从应用采集,经过处理,最终在 Grafana 中可视化的。