本教程最初发布于SigNoz Blog,由Taurai 撰写。男

Prometheus 和 InfluxDB 是为使应用程序性能监控变得轻而易举而创建的开源项目。也就是说,当然,如果您选择涵盖整个可观察范围的选项。

本文比较并对比了 Prometheus 和 InfluxDB 在多大程度上弥补了对应用程序操作的实时洞察力的需求。我们将强调可用性和实用性方面的相似之处和重叠之处。

通常,每个读者的选择最终取决于他们的用例。因此,我们将向您展示的知识应该可以帮助您就哪种工具最有效做出明智的选择。

不需要任何工具的先前经验。但是,一些查询语言知识和对指标的一些理解将在吸收要遵循的内容方面大有帮助。

普罗米修斯速成课程

[普罗米修斯](https://res.cloudinary.com/practicaldev/image/fetch/s--SU1JFJSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://signoz.io/img /blog/2022/07/prometheus_image.webp)

SoundCloud,Prometheus首次部署为开放使用,是一个系统监控和事件警报工具包。自 2016 年以来,它一直是云原生计算基金会 (CNCF) 的一部分。其他革命性工具的管理机构相同,例如Kubernetes 项目。

一个典型的 Prometheus 实例执行暴露了一个时间序列模型的多维数据库。它绑定指标和键/值数组。存储的度量数据可以通过默认的Expression Browser以易于评估的可视化形式呈现。但是 Prometheus 提供了一个基本的可视化层。它通常与 Grafana 合作,这是一种开源数据可视化工具,可创建更丰富的仪表板。

[Prometheus 架构](https://res.cloudinary.com/practicaldev/image/fetch/s--axfk8Jcc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://signoz.io/ img/blog/2022/07/prometheus_architecture.webp)

Prometheus 架构和生态系统(来源:Prometheus Docs)

目前,来自 Prometheus 的各种客户端库的检测数据流被转换为时间序列模型和格式。但是,我们正在计划在各种度量选项中揭示系统洞察力:

  • 仪表 - 这是通常负责仪表板上读数波动的指标类型。例如,资源使用情况(计算、存储等)随时间变化。因此,衡量指标足以推动指标以实现有效的可观察性。

  • Counter - 一个显示质量只会增加(正数或重置)的指标。一个好的应用程序区域将显示在观察的持续时间内访问了多少次应用程序。

  • 摘要 - 除了计数器指标的能力之外,摘要还显示了观察到的事件的强度。这有助于对指标进行比较分析,尤其是当它们来自多个遥测收集源/边缘时。

  • 直方图 - 与汇总指标非常相似,直方图指标显示多变量样本结果。他们在观察期间进一步将输出分组为条形。这有助于对指标进行比较分析。特别是当它们来自多个遥测收集源/边缘时。

InfluxDB 101 - 速成班

[InfluxDB](https://res.cloudinary.com/practicaldev/image/fetch/s--mxslKtZ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://signoz.io/img /blog/2022/07/influxdb_image.webp)

InfluxDB 作为开源工具提供,以及相同的付费发行版,提供了一个时间序列数据平台。 InfluxDB 是一个功能强大的时间序列引擎,具有广泛的应用领域。它旨在摄取和处理从指标、跟踪、日志和事件中摄取任何内容的多个数据点。

InfluxDB 是用 Go 编写的,由 Y Combinator 加速器计划支持,并在 2013 年正式部署到当时的 Errplane(现为 InfluxData)以供公众访问。

InfluxDB 充满了促进全方位数据操作活动范围的工具。这些包括:

  • 一个 CLI (Telegraf),用于简化从实际数据存储位置读取和写入任务。它适用于所有托管选项、云、本地和混合。

  • 通过使用 InfluxQL 或专有的 Flux 语言,可以查询和处理来自 InfluxDB 实例的数据,这些语言专为数据脚本而创建。通过一些实践,低代码最终用户可以通过 InfluxDB UI 配置和安排复杂的任务,将数据处理成有价值的见解。

  • 触发触发时监控和通知用户。通过各种端点(Slack、电子邮件、HTTP 等),管理员/分析师可以密切关注环境变量状态或存储在时间序列引擎中的简单事件发生。这使他们能够在通知响起时快速做出反应并保持最佳系统性能。

  • 多个可视化选项在正确配置所有 API 和客户端库后成为增强系统可见性的首选窗口。

Prometheus 和 InfluxDB 之间的关键相似之处

除了他们的主要意图一致之外,最明显的共同点是两者都是 OSS。这意味着您可以免费使用其中一个或两个平台。虽然这是在您的项目中加入并证明其有效性的好方法,但这也意味着您将使用他们发行版的基础。

一旦他们获取遥测数据,他们就会吐出兼容的数据类型。作为多维时间序列数据存储引擎,您可以创建一个包括 Prometheus 和 InfluxDB 的管道,以从通过基于查询的结果或从实时应用程序中滴入的任何日志中提取的每个数据字节中提取最大价值。

一个实现了 Prometheus 和 InfluxDB 平台的性能可以通过插件进行扩展。插件在收集器和提取器之外添加了对获取和提供遥测数据至关重要的功能。

主要区别:InfluxDB 与 Prometheus

尽管对于应用程序性能监控显然有用,但 InfluxDB 和 Prometheus 以不同的方式实现它们的目标。首先,他们使用不同的查询语言(InfluxQL 和 PromQL)来探索底层数据池。

Flux 和 FluxQL 概览

Flux 是 InfluxDB 中大量操作的官方查询语言。根据手头的实际任务,InfluxQL 将类似于大多数开发人员熟悉的常规 SQL。

join(
tables: {mem:memUsed, proc:procTotal},
on: ["_timestamp", "_halt", "_begin", "host"],
)

进入全屏模式 退出全屏模式

以上面的数据转换操作为例,乍一看,它看起来和写起来都像普通的 SQL。

典型 PromQL 命令

Prometheus 实现了自己的数据操作命令语言——PromQL。我们将使用相同的连接函数来演示语法上的差异。

label_join(up{job="api-server",src1="a",src2="b",src3="c"}, "foo", ",", "src1", "src2", "src3")

进入全屏模式 退出全屏模式

尽管我们将上面的代码压缩为一个句子,但这并不意味着相对易于使用。代码密度和复杂性将根据先前的脚本编写经验和正在进行的操作范围而有所不同。

此外,以上所有代码片段均摘自官方PromQL和InfluxQL脚本文档卷。

甚至时间序列数据在数据引擎中的保存方式也不同。数据存储方法(仅附加与内存索引和时间结构化合并树)。除了这种差异之外,与 Prometheus 时间序列存储相比,InfluxDB 中事件时间戳的准确度更加精确。

尽管这两个工具都是 OSS 项目,但 InfluxDB 也有一个付费层,提供托管在云中的完全托管体验。 InfluxDB 还提供企业级用户管理版本。 Prometheus 是免费的,除非您决定使用由云服务提供商(AWS、GCP、AZURE 等)托管的发行版。

结论:如何选择监控工具

总而言之,应该确保 Prometheus 或 InfluxDB 更符合其特定的监控要求。鉴于在进行自定义检测时如何使用 InfluxDB 从 Prometheus 的收集器端点抓取数据,可能值得尝试它们的配对使用以获得最佳体验。

更好的是,当您的应用程序指标监控范围相当大时,回归基本面可能是要走的路。指标只是监控应用程序性能问题的一个方面。当今的分布式应用程序需要结合使用指标、日志和跟踪来快速调试性能问题。

为此,您可以探索基于 OpenTelemetry 的全栈 APM,SigNoz。使用 SigNoz,您可以监控指标并通过分布式跟踪跨服务跟踪事务。还有其他功能,例如异常监控、自定义仪表板和警报。

您可以在此处查看 SigNoz GitHub 存储库:

SigNoz GitHub 回购


如果您想了解有关 SigNoz 的更多信息,请阅读此博客:

SigNoz - DataDog的开源替代品

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐