使用 OpenTelemetry 进行可观测性入门

导航至

本文发表于 The New Stack

对于大多数开发者来说,软件开发意味着几乎所有事物都有一个 API,硬件通过云进行配置,核心关注点是构建对您的业务最重要的功能。

当然,所有这些集成和现代分布式架构都带来了一系列问题。全面洞察您的应用程序变得更加重要,这现在通常被称为可观测性。能够收集这些洞察所需的数据本身就是一个挑战,因此,我们看到许多主要科技公司共同努力,通过一个名为 OpenTelemetry 的项目来创建一个标准化框架,以简化遥测数据的收集。

什么是 OpenTelemetry?

使用 OpenTelemetry 规范,OpenTelemetry 可以描述为一系列工具、API 和 SDK,用于生成和收集数据,包括指标、日志和跟踪,以帮助分析您的软件性能和行为。OpenTelemetry 是 OpenCensus 和 OpenTracing 项目的合并结果,是一个由云原生计算基金会(CNCF)孵化的项目。

OpenTelemetry 的目的是简化遥测数据的收集和管理,以使开发者能够采用可观测性的最佳实践。OpenTelemetry 获得了科技行业一些最大公司的支持,其中包括 Microsoft、Google、Amazon、Red Hat、Cisco 以及许多其他公司。

OpenTelemetry 的好处是什么?

那么,为什么这么多公司选择采用 OpenTelemetry 呢?好处因您是否使用可观测性工具或是否为供应商而略有不同,但总体而言,结果是每个人的软件生态系统都得到了改善。

OpenTelemetry最大的优势在于它提供了一个标准化的、供应商无关的接口。对于用户来说,这意味着您不必担心被锁定在某个可观察性工具中,因为迁移可能需要大量的代码更改。对于供应商来说,这意味着最好的服务将获胜,因为新来者需要克服的护城河较少。只要供应商支持OTEL,他们就可以获取新用户。这将推动可观察性领域的创新和改进。OpenTelemetry甚至将在开源生态系统中创造竞争。许多库和框架已经将OTEL支持嵌入到他们的项目中,以便开发者可以轻松地获取遥测数据。

另一个好处是,OTEL支持三种主要的遥测数据类型:指标、跟踪和日志。这节省了开发者的时间,因为他们不需要使用不同的工具或库来收集这些数据;他们只需使用OTEL即可。自动检测等特性也使得在不修改代码库的情况下将OpenTelemetry添加到应用程序中成为可能。

灵活性和易用性可能是OpenTelemetry最大的优势。该项目从头开始设计,旨在与云原生应用程序和现代架构协同工作。无论开发者做什么,都可以集成OpenTelemetry。长期使遥测数据的收集更容易将导致每个人都拥有高质量的软件。

OpenTelemetry特性

支持多种数据类型

OpenTelemetry旨在支持三种主要的遥测数据类型:指标、日志和跟踪。目前,指标和跟踪的规范是稳定的,尽管日志规范仍被视为实验性的,但预计将在2022年某个时间最终确定。

APIs和SDKs

OpenTelemetry的APIs和SDKs是项目针对特定编程语言的部分。APIs用于对您的应用程序代码进行检测并生成遥测数据。SDKs充当API与将遥测数据导出到其目标之间的桥梁。SDKs可以在导出之前过滤或采样数据。SDKs还允许数据导出到多个目的地,因此可以将不同类型的数据,如指标或跟踪,发送到更专业的工具。

OpenTelemetry Collector

OpenTelemetry Collector可以用作替代不同后端直接进程导出器。OTEL Collector是完全供应商和语言无关的。这意味着您可以从任何语言SDK发送数据到Collector,并将数据导出到任何支持的后端,而无需修改任何应用程序代码,您也不必将额外的包导入到您的应用程序中。

OTEL Collector由三个主要组件组成:接收器、处理器和导出器。这些组件可以被视为一个管道,并可以使用YAML文件进行配置。Collector有两个部署选项。它可以作为一个在每个应用程序实例上运行的代理或二进制文件的旁路代理部署,也可以作为一个独立服务(网关),它从多个应用程序实例接收遥测数据。

OpenTelemetry检测

检测是将遥测数据生成连接到您应用程序的过程。OpenTelemetry为11种流行的编程语言提供了特定语言的实现。这些库可以导入到您的应用程序中,您编写代码来检测您的应用程序。

自动仪器化是另一种选择。这些是由社区或供应商提供的工具,允许您在不进行任何手动代码更改的情况下导出OTEL遥测数据。许多最流行的编程语言的框架和库已经支持自动仪器化。以Python为例,Flask和Django都提供了自动仪器化包,完整的仓库在此。

如何使用您的OpenTelemetry数据

那么,一旦收集了这些数据,您应该做什么呢?让我们看看一些使用OpenTelemetry从数据中获取价值的使用案例和工具。

存储您的数据

您需要考虑的第一件事是您打算将遥测数据导出到哪里存储。您选择的数据存储将取决于您将存储的数据量、存储时间以及您查询数据的频率。如果您只存储相对少量的数据,您可以使用更通用的解决方案。另一方面,如果您存储大量数据并且对该数据的查询次数很高,那么使用更专业的解决方案可能更有意义。

一些用于存储遥测数据的选项

  • 搜索数据库 — 这些数据存储专为文本搜索设计,对于分析日志很有用。Elasticsearch或Solr将是开源的搜索数据库示例。如果符合您的架构,使用带有RedisSearch模块的内存数据库Redis也是一个选择。
  • 时序数据库时序数据库旨在存储大量写入的数据,并可以跨时间范围查询数据,这是在处理其他数据库难以高效查询的度量指标时经常使用的查询类型。时序数据库也适用于日志和跟踪数据。
  • 多种数据库组合 — 您没有必要将自己限制在单一存储选项上。使用图数据库可能不是您处理遥测数据时的第一想法,但通过从您的主要数据存储中提取数据,然后使用图数据库提供的工具进行分析,您可以找到有价值的见解和关系。您也可以通过使用键值数据库与上述任何一种存储选项结合,为用户提供新的功能或更好地分析您的数据。

分析您的数据

一旦确定了数据的存储方式,您就可以开始考虑如何分析数据以从中获得洞察。第一步很可能是与数据可视化有关,并创建仪表板。为此,您可以使用Grafana或使用您偏好的数据可视化库构建自定义UI。

下一步通常是添加一些形式的监控和警报,以在有问题发生时通知工程师。通过创建警报和自动化操作,您可以开始减轻中断和其他影响用户体验的事情。

最后一步不仅是对问题做出反应,而是真正理解您的应用程序,以便在事情出错之前采取行动。您还可以开始根据历史数据进行预测,并尝试随着时间的推移进行优化和更有效地运行。

可观测性和OpenTelemetry的稳步增长

可观测性持续受到开发者的关注和采用。OpenTelemetry 很可能成为可观测性生态系统中的一个关键组成部分,它有助于将所有不同的工具和供应商连接起来。因此,对于开发者来说,熟悉 OpenTelemetry 并开始尝试它所能做到的事情是非常有价值的。