什么是 OpenTelemetry?

OpenTelemetry 的定义

OpenTelemetry (OTel) 是一个开源可观测性框架,可允许开发团队以统一的单一格式生成、处理和传输遥测数据。它是由云原生计算基金会 (CNCF) 开发的,旨在提供标准协议和工具,以便收集指标、日志和跟踪并将其发送到监测平台。

OpenTelemetry 提供独立于供应商的 SDK、API 和工具,以便您可以将数据发送到任何可观测性后端进行分析。

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

Elastic OpenTelemetry microservices

那么,什么是遥测数据呢?

遥测数据包括从分布式系统收集的日志、指标和跟踪。这三类数据被称为“可观测性的支柱”,能够帮助开发者、DevOps 和 IT 团队理解其系统的行为和性能。

日志:日志是在特定时间点系统中发生的离散事件的文本记录。每次执行代码块时都会生成日志。日志通常包括表示事件发生时间的时间戳以及上下文负载。日志数据格式多样,包括纯文本日志、结构化日志和非结构化日志。日志对于故障排查和代码验证尤其有帮助。

指标:指标是在一段时间内测量的数值,通常被称作时序数据。指标包括诸如时间戳、事件名称以及事件值等属性。在现代系统中,指标能够允许我们监测、分析和回应问题,并协助告警流程。指标能够告诉您有关您的基础架构或应用程序的信息,例如系统错误率、CPU 利用率或者某项服务的请求率。

跟踪:跟踪表示某个请求在分布式系统内的完整路径。OpenTelemetry 中的跟踪是由其跨度进行定义的。一组跨度构成一条跟踪。跟踪能够帮助团队理解请求在不同服务和组件中的端到端历程和行为。分布式跟踪能够允许您跟踪完整执行路径并找出造成问题的代码。跟踪能够提供有关应用程序整体运行状况的可见性,但是对底层基础架构提供的可见性却有限。如要获得您的环境的全景图,您需要可观测性的另外两大支柱:日志和指标。

OpenTelemetry 历史简介

OpenTracing 和 OpenCensus 是为解决缺乏标准数据格式这一问题而独立开发的分布式跟踪项目,但二者的范围有所重合。所以就创建了 OpenTelemetry 来将 OpenTracing 和 OpenCensus 项目的代码库合并到一起,将二者各自的优势整合到由云原生计算基金会托管的单一项目中。

OpenTracing 提供独立于供应商的 API 以将数据发送至后端。OpenCensus 是一系列针对特定语言的库,开发人员会使用这些库来对他们的代码插桩并将数据发送至后端。两个都是开源项目,意味着软件代码是协作开发的,可供任何人使用、修改和分发。

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

OpenTelemetry 的工作原理是什么?

OpenTelemetry 为收集遥测数据和将遥测数据导出到您选择的可观测性后端提供了一个共同框架。它会使用一组标准的、独立于供应商的 API、SDK 和工具来采集、转换和传输数据。

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

OpenTelemetry architecture

OpenTelemetry 的核心组件

OpenTelemetry 的核心组件包括:

收集器

OpenTelemetry 收集器是一个独立于供应商的代理,可接收、处理和导出遥测数据。它支持以多种格式接收遥测数据,以及在导出前对遥测数据进行处理和筛选。

语言 SDK

OpenTelemetry 语言 SDK 允许您使用 OpenTelemetry API 以某种语言生成遥测数据并将数据导出到后端。

插桩库

OpenTelemetry 支持一系列广泛的组件,这些组件能够针对所支持的语言使用热门的库和框架生成相关的遥测数据。

自动插桩

借助针对特定语言的 OpenTelemetry 实施,您无需更改源代码就可对应用程序插桩。

导出器

导出器能够将插桩与您的后端配置分离开,由于无需更改插桩设定,所以您能更轻松地更改后端。导出器还能让您将遥测数据上传到不止一个后端。

OpenTelemetry 的优点

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

数据收集实现标准化

OpenTelemetry 为寻求实现下列目标的 DevOps 团队提供了一套解决方案:找到一致的方法来在无需更改插桩的前提下收集并将遥测数据发送到后端(例如 Splunk、New Relic、Dynatrace 和 Datadog)。借助开放标准和标准化数据收集方法,OpenTelemetry 提高了可见性并简化了可观测性。通过更易于设置的可观测性,您的团队能够更好地理解系统运行状况,找出性能问题,并更快地修复根本原因以免发生服务中断。使用 OpenTelemetry 的组织无需再浪费时间开发自有解决方案或针对诸多应用程序研究各自的工具。通过降低噪音、成本,以及减少配置变更的需求,OpenTelemetry 能够让组织专注于利用数据,而不是数据收集方式。而且可以使用最容易理解的工具和格式将洞察提供给团队,进而改善协作。

避免供应商锁定

OpenTelemetry 能让团队自由选择他们想要的任何后端,而无需绑定特定的供应商,确保其投资能够适应未来需求。它能够适应对系统、后端和流程进行的更改,所以您再也不会被锁定到单一平台、解决方案或合约,让组织能够随着其技术需求的发展进行扩展和调整。这一独立性和灵活性意味着您可以基于是否最有利于您的利润和客户来做出业务决策,而不再受限于技术。

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

搭配 Elastic 使用 OpenTelemetry

虽然 OpenTelemetry 提供了一种标准方式来使用统一遥测数据格式对应用程序进行插桩,但它并不提供后端或分析组件。Elastic 可观测性OpenTelemetry 数据无缝集成到了一个开放且可扩展的 Elasticsearch 平台中。

Elastic 为 OpenTelemetry 协议提供原生支持,从而允许我们采集多种语言的日志、指标和跟踪。它使您能够无比轻松地大规模使用 Elastic 强大的分析和可视化功能。

2023 年 4 月,Elastic 向 OpenTelemetry 贡献了自己的 Elastic Common Schema (ECS),我们的长期目标是将语义约定和 ECS 相结合以打造共同的遥测数据模式。Elastic 计划在 OpenTelemetry 上对其数据架构进行标准化,而且未来还会增加其在 OpenTelemetry 项目上的投资,并加强在 OpenTelemetry 项目上的合作。

OpenTelemetry and the Elastic Stack

Elastic 同时也为 OpenTelemetry 项目做出了重大贡献。为了帮助管理员监测其 CI/CD 平台并进行故障排查,也为了帮助开发人员提高其 CI/CD 管道的速度和可靠性,Elastic 可观测性提供了有关 CI/CD 进程的可见性。为了提供有关管道的监测仪表板、告警和根本原因分析,Elastic 与最热门 CI/CD 平台(包括 Jenkins、Ansible 和 Maven)的社区合作来使用 OpenTelemetry 对工具进行插桩。

Elastic 可观测性是一项企业级解决方案,让组织能够将 OpenTelemetry 插桩收集的数据直接发送到 Elastic 部署。它能为您提供有关您的混合云应用程序的完整可见性,还能让您存储、分析并对所有这些进行可视化。您还可以使用 Elastic 强大的 Machine Learning 功能来缩短分析和恢复时间。

探索 OpenTelemetry 解决方案

OpenTelemetry 常见问答

OpenTelemetry 是标准吗?

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

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

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

OpenTelemetry 和 Jaeger 的区别是什么?

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

OpenTelemetry API 和 SDK 的区别是什么?

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