监控并优化应用程序性能对于软件开发人员和整个企业都非常重要。企业部署的应用程序越多,用于收集和分析的数据就越多。然而,如果缺少合适的工具来监控、优化、存储以及将数据置于情境中(至关重要),这些数据便没有多大价值。
组织可通过部署监控与可观察性解决方案来充分利用应用程序数据,而这些解决方案可通过在问题出现之前进行识别、标记瓶颈、分散网络流量等手段来帮助改善应用程序的运行状况。这些功能有助于减少应用程序停机时间、提供更可靠的应用程序性能以及改善用户体验。
OpenTelemetry和 Prometheus 都是云原生计算基金会 (CNCF) 旗下的开源项目,提供用于应用程序监测的可观察性工具。不同类型的数据和操作需要不同的解决方案,具体取决于组织的目标和应用程序规范。选择一种解决方案进行实施之前,了解 OpenTelemetry 和 Prometheus 等平台之间的主要区别以及每种解决方案提供的功能非常重要。
同样值得注意的是,OpenTelemetry 和 Prometheus 可以集成在一起,成为一个强大的组合,协同监测应用程序。OpenTelemetry 和 Prometheus 支持收集和转换指标,让 DevOps 和 IT 团队能够生成性能洞察并据此采取行动。
OpenTelemetry 也称 OTel,是一个集中生成、收集、导出、管理遥测数据(包括日志、指标和跟踪)的平台。OTel 是 OpenCensus 和 OpenTracing 合并而成的项目,目标是提供 API、SDK、库和集成,为不同数据的收集提供标准化方案。OTel 支持将所需的监测输出内置到代码中,以简化数据处理,并确保数据导出到适当的后端。
分析遥测数据是了解系统性能和运行状况的关键。借助这种优化的可观察性,组织可以更快地排除故障,提高系统可靠性,解决延迟问题,减少应用程序停机时间。
以下是对 OpenTelemetry 生态系统主要方面的简要介绍:
API:OpenTelemetry API(应用程序编程接口)普遍可对编程语言进行翻译。此功能有助于 API 收集遥测数据。这些 API 在标准化 OpenTelemetry 指标集合方面发挥着关键作用。
SDK:软件开发工具包是指用于构建软件的一系列工具。其中包括框架、代码库和调试器,而它们也是软件开发的基本构建块。OTel SDK 可实现 OpenTelemetry API 并提供生成和收集遥测数据所需的工具。
OpenTelemetry 收集器:OTel 收集器接收、处理、导出遥测数据。OTel 收集器可以配置为筛选特定类型的数据并发送到指定的后端。
仪器库:OTel 提供一个可在所有平台上运行的仪器模型。仪器库使 OTel 能够与任何编程语言集成。
OpenTelemetry 协议 (OTLP) 可通过收集指标、日志和跟踪等遥测数据来简化可观察性,且无需更改代码或元数据。
指标:指标定义了系统性能和运行状况的高级概述。开发人员、IT 和业务管理团队需确定哪些指标最适合跟踪,以便维持可满足业务目标的应用程序性能水平。指标会因团队认为重要的数据而异,且可能包括网络流量、延迟和 CPU 存储。此外,指标还可用于跟踪应用程序性能方面的模式和趋势。
日志:日志是对软件或应用程序组件中所出现事件的记录。您可以围绕 DevOps 团队想要监控的组件的特定方面来创建日志。它们可用作历史数据,而此类数据会呈现一般性能信息、显示何时超过了设定的阈值或是显示错误。日志有助于监控应用程序生态系统的整体运行状况。
跟踪:相较于日志,跟踪可让组织更全面地了解应用程序的性能状况,并有助于优化。此外,跟踪比日志更能集中关注一个请求,详细追踪该请求在整个应用程序处理过程中的完整路径。通过跟踪,开发人员可以找到错误或瓶颈发生的确切时间、持续时间以及其如何影响用户旅程。这些信息有助于管理微服务,提高应用程序的整体性能。
oTel 可以获取这三种类型的遥测数据,并将其导出到各种后端,包括 Prometheus。此功能可防止供应商或后端锁定,允许开发人员选择他们偏好的分析工具。OpenTelemetry 支持与包括 Prometheus 在内的其他平台进行各种整合,从而为可观察性提供了更多机会。oTel 支持 Java、Python、JavaScript 和 Go,这使其成为一种越来越灵活的解决方案。它还允许开发人员和 IT 团队从任何 Web 浏览器或位置监测性能。
OpenTelemetry 的最大优势在于它可在多个应用程序中一致地收集并导出数据,同时它还可实现收集流程的标准化。OTel 是一款强大的工具,它可用于评估针对分布式系统和微服务的可观察性。
Prometheus 是一种监测和报警工具包,用于收集和组织应用程序指标。Prometheus 服务器最初是在 SoundCloud 开发的,后来成为开源工具。
Prometheus 是一款用于端到端监测时间序列数据的时间序列数据库。时间序列指标是定期获取的数据集合,例如每月销售数据或每日应用程序流量。对此类数据的清晰可见性有助于组织发现其中的规律和趋势,并为业务规划提供预测依据。Prometheus 与主机整合后,收集与 DevOps 团队想要监测的专用功能相关的应用程序指标。
Prometheus 指标使用名为 PromQL 的查询语言,提供由指标名称、标签、时间戳和值组成的数据点。PromQL 允许开发人员和 IT 部门汇总数据指标,并将其转化为直方图、图形和仪表板,以实现更好的可视化。Prometheus 可以从企业数据库或导出器中获取数据。导出器是与应用程序相关的软件,用于从各种应用程序和端点获取指标。
计数器:仅会增大的对策累积数值。计数器可用于测量已完成的任务、在定义的时间段内出现的错误数量,或是正在运行的进程或微服务的数量。
仪表:随外部因素而升降的仪表监控数值。它们可以监控 CPU 与内存使用情况、温度或队列大小。
直方图:直方图测量指定事件的持续时间,如请求的持续时间或响应的大小。然后,这些测量值的范围被划分为多个区间 - 称为“桶”,并确定有多少测量值落入每个相应的桶。
汇总表:与直方图一样,汇总表也测量请求的持续时间和响应的大小,但还提供所有观测的总次数和所有观测值的总和。
Prometheus 的另一价值点在于它可根据收集的数据来创建可访问的仪表板和图形。
Prometheus 支持实时应用程序监测,为您提供准确的洞察,并帮助快速排除故障。它还允许创建与特定功能相关的阈值。当达到或超过这些阈值时,就会触发警报,从而缩短解决问题所需的时间。Prometheus 可以处理和存储大量指标数据,并根据需要为分析团队提供数据。它不是一种长期存储解决方案,而是一种用于存储立即分析所需数据的工具。Prometheus 的数据存储标准窗口为两小时至十五天。
Prometheus 与 Kubernetes 无缝集成,后者是一个开源容器编排平台,用于调度和自动执行容器化应用程序的部署、管理和扩展。Kubernetes 支持企业构建复杂的混合和多云环境,以部署一系列服务和微服务。Prometheus 与 Kubernetes 集成可为这些复杂系统带来全栈可观察性和监督功能。
Prometheus 还与 Grafana 兼容,后者是一款功能强大的可视化工具,可帮助将数据转换为仪表板、图表、图形和警报。与 Prometheus 配合使用时,Grafana 可以获取指标并创建清晰的可视化效果。这两个平台的兼容性使不同团队之间更容易访问和共享复杂的数据。
Prometheus 提供用于指标监控、存储和可视化的工具,但不会跟踪用于根本原因分析的日志或支持跟踪。总体而言,Prometheus 的用例比 OpenTelemetry 更为有限。
OpenTelemetry 可通过与编程语言无关的集成来处理并跟踪比 Prometheus 更复杂的指标。OTel 具有高度可扩展性,且可通过提供自动化检测模型来实现优于 Prometheus 的可扩展性。与 Prometheus 不同,OpenTelemetry 不提供存储解决方案,且须与单独的后端系统配对。
组织的需求将决定哪种解决方案适合您。如果您需要更全面地了解数据,在采用分布式系统的复杂环境中工作,并且需要更大的灵活性,那么 OpenTelemetry 可能是更合适的解决方案。如果您需要监测日志和跟踪,OpenTelemetry 同样更合适。
如果您需要监测单个系统或操作,并且正在寻找警报、存储和可视化模型,那么 Prometheus 可能是适当的选择。
但好消息是,您并不一定非得选择其中一个;因为 OpenTelemetry 和 Prometheus 是兼容的平台。OTel SDK 可从 Prometheus 数据模型收集指标,而 Prometheus 则支持 OpenTelemetry 指标。通过搭配使用这些平台,可为您提供两全其美的优势以及高级监控选项。例如:
此外,OpenTelemetry 和 Prometheus 还可与 IBM Instana 和 IBM Turbonomic 相集成,以便提供额外的监控工具。借助 Instana 的强大依赖关系图、上游/下游服务关联以及全栈可见性,OTel 的功能可得以优化,从而确保所有服务均受到检测。Instana 可为 OTel 数据提供与其他所有数据源相同的出色体验,从而为您提供快速查找并修复应用程序问题所需的背景信息。借助 Turbonomic,您可以使用 Prometheus 的数据监控工具并根据实时数据收集情况来自动做出资源配置决策。这些集成是用于促进应用程序生态系统健康和提高整体性能的经优化后的手段。