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 年的某个时候最终确定。

API 和 SDK

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

OpenTelemetry Collector

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

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

OpenTelemetry 插桩

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

自动插桩是另一种选择。这些是社区或供应商提供的工具,允许您导出 OTEL 遥测数据,而无需进行任何手动代码更改。许多最流行的框架和每种编程语言的库都已经支持自动插桩。以 Python 为例,Flask 和 Django 都有可用的自动插桩包,完整的仓库在这里。

如何使用您的 OpenTelemetry 数据

那么,一旦收集到这些数据,您应该如何处理呢?让我们看看一些用例和您可以与 OpenTelemetry 一起使用的工具,以从您的数据中获得价值。

存储您的数据

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

存储遥测数据的一些选项

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

分析您的数据

一旦确定了如何存储数据,就可以开始考虑如何分析数据以从中获得见解。第一步可能与可视化数据和创建仪表板有关。为此,您可以使用 Grafana 之类的工具,或者使用您首选的数据可视化库构建自定义 UI。

下一步通常是添加某种形式的监控和警报,以便在出现问题时通知工程师。通过创建警报和自动化操作,您可以开始缓解停机和其他影响用户体验的事情。

最后一步将不仅仅是对问题做出反应,而是真正开始充分了解您的应用程序,以便能够在事情出错之前采取行动。您还可以开始基于历史数据进行预测,并尝试优化并在一段时间内变得更有效率。

可观测性和 OpenTelemetry 的稳步崛起

可观测性继续在开发人员中获得更多的关注和采用。OpenTelemetry 很可能成为可观测性生态系统中的关键部分,有助于将所有不同的工具和供应商联系在一起。因此,开发人员值得熟悉 OpenTelemetry 并开始尝试它可以做什么。