OpenTelemetry 各组件介绍
OpenTelemetry 的主要组件
OpenTelemetry 目前由几个主要组件组成:
- 规范
- 收集器
- 不同语言的API和SDK实现
- 监控注入仓库
- 导出器
- 无侵入注入
- 资源检测器
- 跨服务传播器
- 采样器
- Kubernetes 控制器
- 函数即服务
OpenTelemetry 让您不再需要特定于供应商的 SDK 和工具来生成和导出遥测数据。
规范
该规范阐述了所有实现跨语言需求和期望。除定义术语外,规范还定义了以下内容:
- API:定义了用于生成和关联跟踪、度量和日志数据的数据类型及操作。
- SDK:定义了API的语言特定实现的要求。此处还定义了配置、数据处理和导出的概念。
- 数据:定义了OpenTelemetry协议(OTLP)和供应商无关的语义约定,这些是遥测后端可以提供支持的内容。
欲了解更多信息,请查看规范文档。
收集器
OpenTelemetry Collector是一个与供应商无关的代理,能够接收、处理并导出遥测数据。它支持以多种格式接收遥测数据(例如OTLP、Jaeger、Prometheus以及许多商业/专有工具的格式),并且能够将数据发送到一个或多个后端。此外,它还支持在遥测数据被导出之前对其进行处理和过滤。
想了解更多详细信息,请查看收集器文档。
不同语言的API和SDK实现
OpenTelemetry还提供了针对特定语言的SDK,使您能够使用OpenTelemetry API生成遥测数据,并将这些数据导出到首选的后端。这些SDK还允许您集成针对常用库和框架的仪器化库,以便您可以将它们与应用程序中的手动仪器化代码结合使用。
欲了解更多详情,请查看监控注入。
监控注入仓库
OpenTelemetry支持大量的组件,这些组件能从受支持语言的流行库和框架中生成相关的遥测数据。例如,来自HTTP库的入站和出站HTTP请求会生成关于这些请求的数据。
OpenTelemetry的一个宏伟目标是让所有流行的库都能够默认地被观测,从而不再需要额外的依赖项。
欲了解更多详情,请查看监控注入仓库。
导出器
将遥测数据发送到OpenTelemetry收集器以确保其正确导出。在生产环境中使用收集器是最佳实践。为了可视化您的遥测数据,可以将其导出到诸如Jaeger、Zipkin、Prometheus或特定供应商后端等存储系统。
仓库中包含了各语言特定的导出器列表。
在所有导出器中,OpenTelemetry协议(OTLP)导出器专为OpenTelemetry数据模型设计,能够无损地发出OTel数据。此外,许多处理遥测数据的工具都支持OTLP(如Prometheus、Jaeger以及大多数供应商),这在需要时为您提供高度的灵活性。要了解更多关于OTLP的信息,请查看OTLP规范。
无侵入注入
如果适用,OpenTelemetry特定语言的实现提供了一种无需修改源代码即可监测您的应用程序的方法。虽然底层机制取决于所使用的语言,但零代码监测会为您的应用程序添加OpenTelemetry API和SDK的功能。此外,它还可能添加一套监测库和导出器依赖项。
更多信息,请查看无侵入注入。
资源检测器
资源代表产生遥测数据的实体,并作为资源属性存在。例如,在Kubernetes容器中运行的一个产生遥测数据的进程,可能具有Pod名称、命名空间以及部署名称等属性。您可以将所有这些属性包含在资源中。
OpenTelemetry特定语言的实现提供了从OTEL_RESOURCE_ATTRIBUTES环境变量及许多常见实体(如进程运行时、服务、主机或操作系统)中检测资源的功能。
更多信息,请查看资源。
跨服务传播器
传播是跨服务和进程移动数据的机制。尽管不限于追踪,但传播允许在任意分布于进程和网络边界的服务之间构建关于系统的因果信息。
对于绝大多数用例,上下文传播是通过监测库自动完成的。如有需要,您也可以亲自使用传播器来序列化和反序列化跨领域关注点,比如跨度的上下文和附属数据。
采样器
采样是一个限制系统生成的追踪数量的过程。每个特定语言的OpenTelemetry实现都提供了几种头部采样器。
更多信息,请查看采样。
Kubernetes 控制器
OpenTelemetry 控制器是 Kubernetes 运算符的一种实现。该运算符负责管理 OpenTelemetry 收集器,并利用 OpenTelemetry 自动化监控工作负载的工具。
欲了解更多详情,请参阅 K8s 控制器。
函数即服务
OpenTelemetry 支持多种方式来监控不同云供应商提供的函数即服务。目前,OpenTelemetry 社区提供了预构建的 Lambda 层,能够自动为您的应用程序添加监控仪器,同时也提供了一个独立的 Collector Lambda 层选项,当手动或自动为应用程序添加监控时可以使用。
欲了解更多详情,请参阅函数即服务。