组件

构成 OpenTelemetry 的主要组件

OpenTelemetry 目前由几个主要组件组成

OpenTelemetry 让您可以替换供应商特定的 SDK 和用于生成和导出遥测数据的工具。

规范

描述所有实现的跨语言要求和期望。除了术语定义之外,规范还定义了以下内容

  • API: 定义用于生成和关联跟踪、指标和日志数据的数据类型和操作。
  • SDK: 定义特定语言实现 API 的要求。还在此处定义了配置、数据处理和导出概念。
  • 数据: 定义 OpenTelemetry 协议 (OTLP) 和遥测后端可以支持的与供应商无关的语义约定。

有关更多信息,请参阅 规范

Collector

OpenTelemetry Collector 是一个与供应商无关的代理,可以接收、处理和导出遥测数据。它支持以多种格式(例如 OTLP、Jaeger、Prometheus 以及许多商业/专有工具)接收遥测数据,并将数据发送到一个或多个后端。在导出遥测数据之前,它还支持处理和过滤遥测数据。

有关更多信息,请参阅 Collector

特定语言的 API 和 SDK 实现

OpenTelemetry 还提供特定语言的 SDK,让您可以使用您选择的语言的 OpenTelemetry API 生成遥测数据,并将其导出到首选的后端。这些 SDK 还允许您集成常用库和框架的仪器库,您可以使用这些库来连接到应用程序中的手动仪器。

有关更多信息,请参阅 Instrumenting

仪器库

OpenTelemetry 支持大量组件,这些组件可以从支持语言的流行库和框架生成相关的遥测数据。例如,HTTP 库中的入站和出站 HTTP 请求会生成有关这些请求的数据。

OpenTelemetry 的一个宏伟目标是,所有流行的库都应默认支持可观察性,从而无需单独的依赖项。

有关更多信息,请参阅 Instrumenting libraries

导出器

发送遥测数据到 OpenTelemetry Collector,以确保其正确导出。在生产环境中使用 Collector 是一种最佳实践。要可视化您的遥测数据,请将其导出到后端,例如 JaegerZipkinPrometheus特定厂商 的后端。

注册中心包含 特定语言的导出器列表

在导出器中,OpenTelemetry Protocol (OTLP) 导出器是按照 OpenTelemetry 数据模型设计的,可以无损地发出 OTel 数据。此外,许多处理遥测数据的工具都支持 OTLP(例如 PrometheusJaeger 和大多数 厂商),为您提供高度的灵活性。要了解更多关于 OTLP 的信息,请参阅 OTLP 规范

零代码仪器

如果适用,OpenTelemetry 的特定语言实现提供了一种无需修改源代码即可仪器化应用程序的方法。虽然底层机制取决于语言,但零代码仪器会向您的应用程序添加 OpenTelemetry API 和 SDK 功能。此外,它可能还会添加一套仪器库和导出器依赖项。

有关更多信息,请参阅 Zero-code instrumentation

资源探测器

一个 资源 代表产生遥测数据的实体,作为资源属性。例如,在 Kubernetes 容器上运行的产生遥测数据的进程具有 Pod 名称、命名空间以及可能的部署名称。您可以将所有这些属性包含在资源中。

OpenTelemetry 的特定语言实现从 OTEL_RESOURCE_ATTRIBUTES 环境变量以及许多常见实体(如进程运行时、服务、主机或操作系统)提供资源检测。

有关更多信息,请参阅 Resources

跨服务传播器

传播是跨服务和进程移动数据的机制。虽然不限于跟踪,但传播允许跟踪构建关于系统跨任意分布在进程和网络边界中的服务的因果信息。

对于绝大多数用例,上下文传播是通过仪器库进行的。如果需要,您可以使用传播器本身来序列化和反序列化跨领域问题,例如 Span 的上下文和 Baggage

采样器

采样是限制系统生成的跟踪数量的过程。OpenTelemetry 的每种特定语言实现都提供了几种 头部采样器

有关更多信息,请参阅 Sampling

Kubernetes 操作员

OpenTelemetry Operator 是 Kubernetes Operator 的一种实现。该操作员管理 OpenTelemetry Collector 和使用 OpenTelemetry 的工作负载的自动仪器。

有关更多信息,请参阅 K8s Operator

函数即服务资产

OpenTelemetry 支持各种方法来监控不同云供应商提供的函数即服务。OpenTelemetry 社区目前提供预构建的 Lambda 层,能够自动仪器化您的应用程序,以及一个独立的 Collector Lambda 层,当手动或自动仪器化应用程序时可以使用。

有关更多信息,请参阅 Functions as a Service


最后修改于 2025 年 2 月 6 日: [IA] Link normalization step of (#6232) (99a39c5e)