什么是 OpenTelemetry?

OpenTelemetry 的定义、优势和关键组件

OpenTelemetry (OTel) 是一个开源的可观测框架,用于以统一的单一格式收集、处理和导出遥测数据(日志、指标和跟踪)。

它由云原生计算基金会 (CNCF) 开发,旨在标准化遥测数据收集和发送到可观测性后端的方式。OpenTelemetry 提供独立于供应商的 SDK、API 和工具,因此您可以将数据发送到任何符合 OpenTelemetry 的可观测性后端进行分析。

OpenTelemetry 正在快速成为云原生应用程序领域内主导的可观测性遥测数据标准。如果组织想要做好准备以满足未来的数据需求,而且不想被锁定到某一特定供应商,也不想受限于其既有技术,那么采用 OpenTelemetry 对其至为关键。

显示 OpenTelemetry 与 Elastic 集成,用于微服务可观测性的图表


了解遥测数据(日志、指标、跟踪)

遥测数据是现代可观测性的基础。日志、指标和跟踪这三大支柱为开发人员、DevOps 和 IT 团队提供深入了解系统行为、性能和健康状况的见解。

  • 日志:在特定时间记录的离散事件的文本记录
    • 示例:记录了时间戳、用户 ID 和 IP 地址的登录尝试
    • 最适合:故障排查、调试和验证代码执行
  • 指标:长期数值测量结果(时序数据),反映系统性能
    • 示例:CPU 利用率为 85% 或 HTTP 请求速率为 1,200/秒
    • 最适合:实时监测、警报和趋势分析
  • 跟踪:请求或事务通过多个系统组件的路径,分为多个跨度
    • 示例:在电商平台中跟踪跨微服务的结账流程
    • 最适合:发现分布式架构中的性能瓶颈,并解析请求调用链路

有关使用 OpenTelemetry 收集每种遥测数据类型的详细设置指南,请参阅我们的Elastic 中的 OpenTelemetry 入门文档


OpenTelemetry 历史简介

在 OpenTelemetry 出现之前,业界曾依赖 OpenTracingOpenCensus 这两个功能重叠但实现方式不同的项目。为消除技术生态碎片化问题,CNCF 将二者合并为一个项目 OpenTelemetry。

关键旧版组件:

  • OpenTracing:用于发送遥测数据的供应商中立 API
  • OpenCensus:用于收集指标/跟踪的特定语言库

合并结果:OTel 将两者合并为一个单一框架:

  • API
  • SDK
  • 插桩选项
  • 收集器服务

OpenTelemetry 由 OpenTracing 和 OpenCensus 合并而成,结合两者的优势,创建了全球性的单一可观测标准。

有了 OpenTelemetry,开发人员再也无需在 OpenTracing 和 OpenCensus 之间进行选择。OpenTelemetry 提供统一的集合,集合内包括收集和传输数据所需的库、API、代理和收集器服务。


OpenTelemetry 的工作原理

OpenTelemetry 提供了一个标准化的管道,用于收集遥测数据并将其发送到您选择的可观测性后端。它被设计为供应商中立且可扩展。

  • API:特定语言的接口,用于生成遥测数据
  • SDK:实现 API 并进行数据处理、批量处理和导出
  • 插桩:可以是自动插桩(无需更改代码)或手动插桩(自定义指标/事件)
  • 导出器:使用 OTLP 等标准协议,将已处理数据发送到一个或多个目的地

针对具体语言的 OpenTelemetry API 会在您的整个系统上协调完成遥测数据的收集并对您的代码进行插桩。OpenTelemetry SDK 会通过可协助完成数据收集、处理和导出的库来实施和支持 API。OpenTelemetry 还可自动对服务进行插桩,而且支持自定义插桩。您可以使用供应商提供的导出器或 OpenTelemetry 协议 (OTLP) 导出您的遥测数据。


OpenTelemetry 的核心组成要素

OpenTelemetry 的核心组成要素包括:

组件用途示例用法
收集器接收、处理并导出多种格式的遥测数据;不受供应商影响在发送到 Elastic 之前,汇集来自 Kubernetes 集群的日志、指标和跟踪
语言 SDK为特定编程语言实现 OpenTelemetry API使用 Python SDK 为用 Python 编写的应用程序插桩
插桩库用于生成遥测数据的自动插桩流行框架和库自动从 Spring Boot 收集 HTTP 请求指标
自动插桩无需更改代码即可添加遥测功能注入 Java 代理以监测基于 JVM 的微服务
导出器将收集的数据发送到一个或多个可观测性后端将追踪数据导出到 Jaeger,将指标导出到 Prometheus

 

这些组件能够实现灵活、标准化的数据收集,而不依赖于后端的选择。

我们基于 Elastic 文档的 OpenTelemetry Collector 设置方案包含完整的安装操作指南。


OpenTelemetry 的优点

OpenTelemetry 的优点是数据标准化和可适应未来需求的灵活性,进而让您改善可观测性、提高效率并降低成本。

  1. 标准化
    1. 针对多个后端使用单一收集方法:Elastic、Splunk、Datadog 等。
    2. 使用单一可扩展的框架来处理日志、指标和跟踪,以降低管道复杂性。
  2. 供应商中立性
    1. 切换后端,无需对应用程序重新插桩。
    2. 轻松采用新的可观测性工具,无需完全替换。
    3. 在技术堆栈不断升级时,保持灵活性。
  3. 一致的数据
    1. 通过统一的通用模式,使处理和分析工作更轻松。
    2. 在来自不同来源的数据上运行分析、查询、机器学习等。

使用 OpenTelemetry,您能够获得成长所需的可扩展性,可实现跨平台兼容,而且能够轻松与您的既有监测和可观测性工具集成。


OpenTelemetry 与 Elastic 的集成

作为开放标准的长期支持者,Elastic 致力于通过积极贡献和协作推动整个行业采用 OpenTelemetry。

Elastic Observability 无缝集成了 OpenTelemetry 数据,并大规模增加了强大的搜索、分析、机器学习和可视化功能。2023 年,Elastic 将 ECS 与 OpenTelemetry 整合,以帮助统一遥测数据格式。

OpenTelemetry 的 Elastic 发行版 (EDOT) 为 SRE 和开发人员提供了稳定的 OTel 生态系统。由于 Elastic 的“OTel 优先”方法保留了 OpenTelemetry 原生的模式惯例,因此无需进行模式转换。此外,EDOT 还包括超出 OTel 发布周期的修复功能,以及无需专有附加组件的企业级支持。

探索 Elastic 的 OpenTelemetry 优先解决方案


使用 OpenTelemetry 和 Elastic 的 CI/CD 可观测性用例

Elastic 可与 Jenkins、Ansible 和 Maven 等流行 CI/CD 平台结合使用,以插桩采用 OpenTelemetry 的管道。

这可启用:

  • 端到端管道可见性
  • 实时监测仪表板
  • 自动化告警和异常检测
  • 对构建/测试问题进行故障排查

您可以在我们的正式文档中找到将 OpenTelemetry 与 Elastic CI/CD 监测结合使用的设置说明。


OpenTelemetry 常见问答解答

OpenTelemetry 是标准吗?

是的。OpenTelemetry 是一个开源项目,是针对日志、跟踪和指标的统一标准。

可以举一些遥测数据的示例吗?

遥测数据的示例包括系统监测和可观测性中所用到的日志、指标和跟踪。

OpenTelemetry 和 Jaeger 的区别是什么?

OpenTelemetry 帮助您处理并将数据导出到各种开源和商用后端,但它不是像 Jaeger 这样的可观测性后端。OpenTelemetry 提供一些列 API、SDK 和工具来帮助生成和管理遥测数据,而 Jaeger 则是一个开源的分布式跟踪工具。IT 团队会基于微服务架构使用 Jaeger 来对应用程序进行监测和故障排查。Jaeger 不支持日志和指标。

OpenTelemetry API 和 SDK 的区别是什么?

OpenTelemetry API(应用程序编程接口)会在您的整个系统上协调完成遥测数据的收集并对您的代码进行插桩。因为 API 是针对特定语言的,所以它们必须与您的代码的语言匹配。OpenTelemetry SDK(软件开发工具包)会通过可协助完成数据收集、处理和导出至可观测性后端的库来实施和支持 API。

谁开发了 OpenTelemetry?为什么要开发?

OpenTelemetry 由云原生计算基金会 (CNCF) 开发,旨在统一和标准化遥测数据的收集和导出方式。它合并了早期的 OpenTracing 和 OpenCensus 项目,以消除技术生态碎片化现象。

OpenTelemetry 协议 (OTLP) 是什么?为何重要?

OTLP 是 OpenTelemetry 的默认、不受供应商影响的协议,用于在组件和后端之间传输遥测数据。它确保所有数据(日志、指标和跟踪)以一致的格式传输,从而使工具之间的集成更简单、更可靠。

OpenTelemetry Collector 是什么?

OpenTelemetry Collector 是一种不受供应商影响的服务,可接收多个来源的遥测数据,进行处理(过滤、聚合或转换),并将其导出到一个或多个后端。它在单个部署中支持多种协议与格式。

OpenTelemetry 如何与 Elastic 集成?

您可以通过任何第三方 OTel 工具将 OTel 原生的跟踪、日志和指标导入 Elastic,或者使用自定义处理器和导出器从您自己的 OTel 收集器导入,以便在 Elastic 中进行分析和可视化。Elastic 原生支持从 OpenTelemetry 采集 OTLP 数据,并提供可扩展搜索、交互式可视化、实时监测和基于机器学习的异常检测等高级功能。无需进行模式转换。


Elastic 的 OpenTelemetry 资源