在不断发展的软件开发世界中,可观察性使软件工程师能够实时洞察复杂的系统。OpenTelemetry 和 Prometheus 是著名的云原生计算基金会 (CNCF) 毕业项目,但用于监控和调试应用程序的可观察性工具不同。
本文探讨了 OpenTelemetry 和 Prometheus 的特性、优点、缺点和主要区别。软件开发人员必须了解独特的可交付成果和用例,才能决定哪种框架最适合他们的需求。
OpenTelemetry 是一个开源可观测性框架,用于从软件应用程序中检测、收集和导出遥测数据。它是规范、SDK 和库的集合,可帮助收集、转换、处理和导出遥测数据。这些遥测数据提供了有关应用程序性能和运行状况的见解。OTel 提供与供应商无关的模型,该模型提供各种编程语言和框架的库,以及在不更改遥测处理器的情况下将遥测数据导出到不同供应商后端的可能性。Otel 可与 Jaeger、Grafana、Prometheus、DataDog、NewRelic、Last9 和众多供应商一起使用,使其与供应商无关。
OpenCensus 是一个开源项目,提供可观测性数据收集的库和工具,与 OpenTracing(跨不同语言和系统的分布式跟踪标准)合并到 OpenTelemetry 中。这个统一项目旨在标准化可观测性仪器和数据收集。OpenTelemetry 越来越受欢迎,它代表了可观测性的未来,得到了众多组织和供应商的认可。
OpenTelemetry 使用模块化和可扩展的架构构建在标准化工具之上。以下是 OTel 架构的一些组件。
OpenTelemetry 为 Java、JavaScript、Python 和 Go 等流行编程语言提供特定于语言的 API。这些 API 定义了开发人员用于检测其应用程序并生成遥测数据的方法和接口。
软件开发套件 (SDK) 是基于 OpenTelemetry API 构建的实现库。它们自动捕获由仪表化应用程序生成的遥测数据并实施 OTel API。OpenTelemetry Collector接收处理、过滤和导出各种格式的遥测数据。
OTel 提供与供应商无关的检测应用程序模型,该模型提供了可检测流行框架和库的库。这简化了向基于各种编程语言和框架(例如 Spring 和 Express.js)构建的应用程序添加遥测的过程。
OTel 使您能够使用 OpenTelemetry API 和 SDK 添加应用程序检测。这会自动将系统组件定向到您寻求收集、分析和导出的特定日志、跟踪或遥测数据。借助 OTel API,可以将跟踪、日志和指标添加到您的代码中,以简化数据处理和导出。遥测数据处理涉及过滤数据中的错误。完成此操作后,数据就可以导出到预先指定的后端。
OpenTelemetry 提供了一系列功能,包括以下功能。
自动检测允许软件开发人员初始化指标、日志和跟踪,而无需篡改应用程序源代码。
OpenTelemetry 使开发人员能够跟踪分布式系统中不同服务之间的事务。这使得您可以轻松理解前端到后端的请求流,并实现高效的错误识别和解决。
OpenTelemetry 可以从已检测的应用程序中收集和分析指标,并以增量而不是累积的形式表示指标。因此,与 Prometheus 不同,它提供对整数指标值的支持。此外,它还允许您将额外的元数据附加到直方图,从而能够跟踪最大值和最小值。
借助 OTel,您可以记录应用程序中的重要事件和错误,并将其导出到日志系统以进行进一步分析。
OpenTelemetry 允许自定义导出器将遥测数据发送到不同的后端系统和可观测平台。
OpenTelemetry 通过提供收集和导出遥测数据的标准化方法,在现代可观测性实践中发挥着至关重要的作用。其关联指标和跟踪的能力简化了故障排除和性能分析。
以下是 OpenTelemetry 的一些基本优势。
Prometheus 是 SoundCloud 开发的开源监控和警报工具包,旨在收集、处理和可视化来自各种应用程序的指标,使用名为 PromQ 的灵活查询语言来深入了解应用程序运行状况和性能。
Prometheus 是作为一个独立平台构建的。以下是 Prometheus 架构的一些关键组件。
Prometheus 主要使用 Go 编程语言(Golang)编写,很好地平衡了性能和开发效率。
Prometheus 使用定制的时间序列数据库 (TSDB) 来存储和查询收集的指标。TSDB 针对快速高效的时间序列数据摄取、存储和检索进行了优化。
Prometheus 采用基于拉动的模型,定期从检测目标中抓取指标。它支持各种抓取协议,包括 HTTP、HTTPS 和 DNS。
Prometheus 灵活的查询语言 PromQL 支持各种功能,例如创建自定义聚合函数,用于操作和查询时间序列数据。PromQL 还有助于复杂的查询,例如按标签过滤指标和执行数学运算。
Prometheus 利用名为 Prometheus Expression Browser 的基于 Web 的图形可视化仪表板进行监控和故障排除。它还提供内置警报功能,允许用户根据特定阈值定义警报规则。Prometheus 可以通过各种通知渠道(例如电子邮件或 Slack)发送警报。
Prometheus 支持丰富的导出器生态系统,这些导出器收集特定于应用程序的指标并以 Prometheus 可以抓取的格式导出它们。
当 Prometheus 配置了目标(例如应用程序服务器、数据库或导出器)时,它会使用各种协议定期从配置的目标中抓取指标。默认情况下,它每 15 秒抓取一次指标,但可以重新配置此间隔。在抓取过程中,Prometheus 从目标收集特定于应用程序、系统级或自定义定义的指标数据,例如 CPU 使用情况、内存使用情况、请求延迟或任何其他相关指标。然后,它将收集到的指标存储在时间序列数据库中,该数据库根据唯一的指标名称、标签和时间戳对这些指标进行组织。
之后,您可以使用 PromQL 定义和分析复杂查询、应用函数和聚合,以及过滤收集的数据以检索所需的信息。Prometheus 使用请求的指标响应这些查询,并根据您的预定义阈值将事件警报发送到您的通知渠道。
Prometheus 提供以下功能。
Prometheus 提供服务发现机制,可以在新服务实例上线时自动发现和监控它们。它可以与 Kubernetes、Consul 和 EC2 等服务发现系统集成。
借助 PromQL,您可以使用灵活的语法检索和分析指标,包括函数、聚合和运算符。PromQL 支持一系列用于操作和查询时间序列数据的操作,允许软件开发人员创建自定义仪表板和警报。
Prometheus 有一个内置的警报系统,允许您根据特定条件或阈值定义警报规则。当满足警报条件时,Prometheus 会通过各种通知渠道生成并发送警报。
Prometheus 表达式浏览器允许用户可视化指标、创建图表和探索数据。该界面提供了用于缩放、平移和应用各种图形选项的交互功能。
Prometheus 服务器通常能够监控大量软件组件。但为了使可观测性更具成本效益,Prometheus 提供了分层联合功能,允许软件开发人员配置单个高级 Prometheus 服务器来从多个低级服务器收集指标。
Prometheus 与各种工具和系统集成,例如警报管理器、可视化平台和时间序列数据库。
Prometheus 对于软件开发人员实时监控应用程序事件至关重要。在软件开发过程中嵌入Prometheus是必不可少的。这样做将帮助您了解不同的数据类型和软件基础设施如何交叉和交互,而无需单独检查每个架构。
监控和收集面向用户的前端和后端性能数据的最终目标是减少应用程序错误、改善延迟并扩大客户群。最终用户希望应用程序能够快速、正确、高效地运行。当应用程序运行效率低下时,用户通常会迁移到替代平台,从而导致企业组织的收入损失。
部署 Prometheus 等可观察性工具来研究揭示后端系统功能(例如错误率和延迟)的功能指标,以避免这种情况。然后将这些数据映射到各个基础设施以解决软件问题。
除了作为可观测平台的一般功能外,Prometheus 还有两个显着特征:它提供短期存储和可视化层。这些显着特征是 OTel 所不具备的优势。
下面详细列出了 Prometheus 的六大主要优势。
以下是 Prometheus 的一些关键缺点。
下表列出了 OTel 和 Prometheus 之间的一些重要区别。
OpenTelemetry 中指标的语义约定( OTLP 指标)与Prometheus 的本机指标命名约定不一致。这意味着 OpenTelemetry 和 Prometheus 中的指标不具有相同的格式和规范。
为了解决这种差异,有一个模块otel-collector-contrib提供集中式功能,有助于将 OpenTelemetry 指标转换为符合 Prometheus 的指标。
最近,Prometheus 还开始添加对本地摄取 OpenTelemetry 指标的支持。以下是 Prometheus 和 OpenTelemetry 中指标的比较。
为您的特定应用程序和基础设施需求选择合适的可观察性框架至关重要。虽然 OpenTelemetry 和 Prometheus 是强大的工具,但 OpenTelemetry 提供了一种更全面的跨平台和语言的可观察性方法,支持指标和分布式跟踪。深入理解突出的功能和差异将使您能够做出明智的决策并利用适当的框架来满足您的可观察性需求。