OpenTelemetry 项目目前主要由以下几个部分组成:

  • 跨语言的统一规范
  • 收集、转换和导出遥测数据的工具
  • 各个语言的 SDK
  • 自动注入的采集库和第三方支持的包

OpenTelemetry 可以帮助你无需依赖某个特定项目的 SDK 或者工具,就能够生成和导出遥测数据。

规范

在规范中,描述了针对所有语言插桩库而言的统一的约束和要求。
除了一些基本的数据定义之外,规范中还包含如下内容:

  • API:定义了在生成和关联Trace、监控指标和日志数据时的数据类型和支持的操作。
  • SDK:定义了在特定语言 API 的实现过程中的一些要求,此外,还包含了配置、数据处理以及数据导出相关概念。
  • DATA:定义了一个支持 OpenTelemetry Line Protocol (OTLP) 的后端服务服务相关的语义约定。

Collector

OpenTelemetry Collector 是一个与供应商(后端存储)无关的一个代理服务,它可以用于接收、处理并导出相关的遥测数据。它支持接收多种形式的遥测数据,例如OTLP、Jaeger、Prometheus等,同时能够将数据发送给多个后端存储服务。此外,它还支持再导出数据前,对数据进行基本的处理和过滤等工作。此外,通过 contrib 包还能够实现对更多中数据格式和后端存储服务的支持。

SDKs

OpenTelemetry 还具有各个语言的 SDK,这些 SDK 可以帮助你在对应的编程语言中使用 OpenTelemetry API 来生成遥测数据并导出给期望的后端存储服务。同时,这些 SDK 还针对了一些通用框架和库实现自动插桩注入,你也可以手动调用这些 SDK 在你的应用中实现手动插桩。各个后端存储服务商通常也会提供一些各个语言的 SDK,从而能够帮助用户更容易的将数据导出到它们的存储后端服务中。

自动插桩库

OpenTelemetry 提供了一批自动插桩库,这些自动插桩库可以针对一些语言的流行的库或者框架来自动生成遥测数据。例如,HTTP 库可能就会包含 HTTP 请求过程中入站和出站过程中的一些相关指标。自动插桩库的使用方式可能会与编程语言相关,对于一些场景,可能只需要在你的项目依赖中增加该组件即可,对于另外一些场景,可能需要在你的代码中显式使用该包。
从长远来看,我们希望针对这些流行的库而言可观测性是其内置的能力,这样,我们就不需要单独再引用相关的组件来实现插桩操作。