NGINX.COM
Web Server Load Balancing with NGINX Plus

OpenTelemetry (OTel) 是一个开源项目,为收集、处理和导出来自分布式系统(例如微服务架构)的遥测数据提供了一个厂商中立的标准。这一简化、通用的可观测性方法支持开发人员更轻松地分析软件的性能和行为,从而更容易地诊断和排除应用问题。OTel 收集以下数据:

OTel 不是一门编程语言或一个产品。该开源项目于 2019 年问世,目前由云原生计算基金会 (CNCF) 维护。

请观看此视频,了解如何上手使用 OTel:

 

OTel 生成的数据类型

链路

链路(trace)记录操作过程中发生的事件,例如单个请求的处理。链路由多段 spans(跨度)组成,每个 span 代表一个工作(work)单元。

举例来说,一个 Web 请求的链路可能包含三个 span:

  • 接收请求
  • 查询数据库
  • 返回响应结果

链路将一个可能包括多个 service 的数据流分成一系列按时间顺序排列的数据块,以便于您理解:

  • 在每个数据块中执行的所有步骤
  • 数据块的执行顺序
  • 每个步骤的持续时间
  • 关于每个步骤的元数据

生成链路后,OTel 会将它们导出到链路后端或工具中进行分析。OTel 为 JaegerZipkinAWS X‑Ray 等常用后端平台提供了一套导出程序。这些服务可以提供链路的数据分析和可视化工具。

指标

在 OTel 中,指标(metrics)衡量操作系统的特定行为,并不断以键值对 [key-value pair](称为“指标标签 [metric label]”)的形式收集。这些键值对提供了持续的指标衡量的上下文。举例来说,针对 Web 服务的响应时间指标,可能包括的标签有 HTTP 状态代码、端点(endpoint)和 HTTP 方法。所有指标也都带有时间戳,这也是为了能够按时间顺序排列。

日志

日志(logs)是了解特定服务状况的最古老、最常用的方法。它们一般以文本形式生成,必须经过解析才能生成洞察信息。OTel 对于日志的支持仍处于试验阶段。

如欲详细了解我们的解决方案架构师对 OTel 的可观测性特性集与其他可观测性工具的比较结果,请参阅我们的博文《现代应用参考架构之 OpenTelemetry 集成 – 进展报告》。

 

OTel 工具

OTel 集成了许多热门编程语言、库和框架,而一些编程语言对 OTel 的支持比其它语言更为全面。例如,据 JavaScript 工具库的自我介绍,它提供了针对链路和指标“稳定”实现,并且针对日志的支持可谓是非常稳定。它还提供了一个自动检测选项用以接收链路数据,且无需在您的 service 逻辑代码中添加任何相关代码。与之相比,像是 Go 一类的编程语言则无法为指标和日志提供成熟的支持,并且缺少自动检测功能。

 

遥测目标

在设置遥测工具时,最好先确定一套明确的工具目标,而不是“返回所有相关数据以及洞察信息”。虽然在查看数据之前,您确实无法知晓所有可能发生的情形,但设置一些最低要求有助于确保服务的平稳运行和维护。

从技术角度而言,可能有类似这样的担忧:

  • 我想知道如何确定我的 service 负担过重,需要扩展。
  • 我想知道我的 service 是否经常需要重启。

从产品和用户体验的角度而言,也可能有这样的担忧:

  • 我希望用户在 5 秒内看到系统中的新消息。
  • 我希望在消息发送后的一分钟内,通知就被推送出去。

正如我们的教程《如何利用 OpenTelemetry 跟踪来了解微服务》中所示,您可以将以下内容定义为关键目标:

  • 了解一个请求为完成新的信息流所采取的所有步骤。
  • 检查用户流是否成功完成。
  • 确保整个端到端用户流的执行速度快于 5 秒(在“正常”情况下)。
  • 了解负责通知的 service 是否正在及时处理由消息 service 派发的事件。

 

OTel 实现

OTel 为开发人员提供了一套应用编程接口 (API)、 软件开发套件 (SDK) 和工具库,以便他们以一致的标准化方式利用这些资源来测量其应用。

由于 OTel 生成的数据格式被视为行业标准,因此已被多种遥测数据聚合和可视化解决方案所接受。您可以选择本地解决方案,例如 Jaeger,或者选择软件即服务 (SaaS) 解决方案,例如 SumoLogicSigNoz

为了管理上述三种类型的遥测数据,OTel 必须结合使用多种工具。这进一步加剧了运行微服务架构和基础架构的复杂性。

 

什么是 OTel 上下文中的 API?

API 定义了软件组件彼此交互所使用的方法、功能和协议。OTel APIs 定义了一套标准的方法和协议,可供开发人员用来运行其应用并收集遥测数据。

 

什么是 OTEL 上下文中的 SDK?

SDK 是由标准或应用作者提供的软件开发工具,支持开发人员更轻松地构建符合标准或与应用交互的应用。SDKS 通常包括库、代码示例、文档,以及测试、调试和性能调优工具。OTel 为链路指标资源管理提供 SDK。

NGINX 很高兴提供以下免费资源,帮助您了解更多 OTel 的相关信息:

Tags

No More Tags to display