时序数据库有很多,比如 Prometheus、M3DB、TimescaleDB、OpenTSDB、InfluxDB等等。Prometheus 和 VictoriaMetrics 是开源时间序列数据库,可为复杂 IT 环境中的监控和告警提供强大的解决方案。然而,它们的设计不同,并提供独特的功能,这些功能可能会影响其性能、可扩展性和监控工作负载的易用性。本文旨在分析 Prometheus 和 VictoriaMetrics 之间的差异,从而为寻求最适合其特定需求的解决方案(作为监控解决方案和可观察性或对系统进行故障排除)的用户提供见解。
Prometheus最初是 SoundCloud 中的一个项目,是一个功能强大的监控和警报工具包,专门用于处理多维环境中的时间序列数据。由于其对多维数据收集、查询和警报生成的本机支持,它在 SRE 和 DevOps 社区中变得非常受欢迎。
Prometheus 是在云原生计算基金会 (CNCF) 下开发的。Prometheus 服务器、客户端库、Alertmanager 和其他相关组件可以在 Prometheus GitHub 组织中找到。主要存储库是:https: //github.com/prometheus/prometheus
而VictoriaMetrics则是一个高性能、高性价比、可扩展的时间序列数据库,可以作为Prometheus的长期远程存储。它拥有卓越的数据压缩和高速数据摄取能力,使其成为大规模监控任务的有吸引力的替代方案。VictoriaMetrics源代码可以在以下地址找到:https://github.com/VictoriaMetrics/VictoriaMetrics
这些项目的 GitHub 存储库包含所有源代码、文档、问题、拉取请求和文档。如果您想更多地了解这些系统的工作原理、想为项目做出贡献或者需要帮助解决问题,那么这些都是开始的绝佳资源和教程。
VictoriaMetrics 与 Prometheus 之间的数据摄取和查询率性能基于使用指标的基准node_exporter测试。内存和磁盘空间使用情况数据适用于单个 Prometheus 或 VictoriaMetrics 服务器。
Prometheus使用基于拉的模型来收集指标,这意味着它从受监控的系统中获取指标,并且可以处理多达数百万个活动时间序列。该架构简化了受监控服务的部署。尽管如此,管理大型动态环境仍然具有挑战性,因为它需要 Prometheus 实例知道它需要从中提取的目标。
相反, VictoriaMetrics支持拉模型和推模型。它能够处理大量数据和更广泛的网络场景(得益于其推送模型支持),使其具有可扩展性和灵活性。支持原生集群,从而简化了长期存储和大规模部署。
Prometheus和VictoriaMetrics采用基于组件的架构构建,能够灵活部署,并允许每个组件独立开发、测试和部署。
Prometheus 采用可插拔架构构建,由几个关键组件组成,其中包括:
VictoriaMetrics在保持更简单的架构的同时,还包括几个核心组件:
Prometheus还拥有高效的存储系统,但在长期数据存储后端和检索效率方面与VictoriaMetrics不匹配。还有其他替代方案,例如 Levitate、Thanos 和 Cortex,它们也提供数据的长期保留。
VictoriaMetrics 相对于 Prometheus 的主要优势之一是其数据压缩功能。它使用更有效的数据压缩算法,可显着降低存储要求。VictoriaMetrics 声称提供比 Prometheus 高出 10 倍的数据压缩,这是长期数据保留和成本优化的关键优势。
Prometheus 和 VictoriaMetrics 都使用内存数据处理和磁盘存储的组合来管理时间序列数据:
1.内存中:Prometheus利用内存存储来立即访问最近的时间序列数据。数据库的这一段称为“头块”。
2.磁盘存储:达到一定年龄或大小后,头块中的数据将以称为checkpointing实时的过程移动到磁盘。该数据库由用于长期存储的“持久块”组成。
Prometheus 通过这种内存和磁盘存储组合针对实时监控进行了优化。然而,它并不是为广泛的长期存储而设计的。Levitate、Thanos 或 Cortex等其他工具通常会合并到系统中。
1.内存中:与 Prometheus 类似,VictoriaMetrics 使用内存存储在传入数据写入磁盘之前对其进行缓冲。这种方法有助于优化写入性能。它还缓存经常访问的数据以加快检索速度。
2.磁盘存储:VictoriaMetrics 中的大部分数据存储在磁盘上。该系统使用节省空间的存储格式,可以进行大量数据压缩。
Prometheus使用PromQL(Prometheus 查询语言)。PromQL 允许实时选择和聚合时间序列数据。它使开发人员能够高度灵活地使用指标。通过 PromQL,用户可以过滤和聚合指标,计算比率、比率、平均值和百分位数,并预测趋势。一旦掌握,它就是一种非常具有表现力的语言,允许用户执行复杂的查询以从其指标中收集有意义的数据。
另一方面,VictoriaMetrics向后兼容 PromQL。它可以运行 PromQL 中有效的任何查询。但是,它还引入了 PromQL 的扩展,称为MetricsQL。MetricsQL 旨在增强 PromQL 提供的查询功能。它引入了新函数、运算符和语法糖。它简化并改善了用户体验,特别是对于复杂的查询和聚合。
以下是两者之间的主要区别:
它们设计上的一些差异可能会影响摄取率:
Prometheus 本身并不支持集群,这意味着它不提供原生高可用性。高可用性可以通过运行重复实例来实现,但此过程需要手动操作和协调。
相比之下,VictoriaMetrics 在设计时就考虑到了高可用性。它使用复制和集群来确保在实例发生故障时数据不会丢失,从而使其成为关键应用程序的更可靠的选择。
Prometheus 和 VictoriaMetrics 通过基于 HTTP 的 API 公开其功能,允许客户端以编程方式与它们交互。
Prometheus 使用其 HTTP API 执行各种任务,包括但不限于:
VictoriaMetrics 提供了全面的 HTTP API,根据功能分为几个部分:
由于 Grafana 灵活的数据源支持,Prometheus 和 VictoriaMetrics 在 Grafana 中可视化数据非常相似。以下是有关如何可视化这两个系统中的数据的基本指南:
1.安装并运行Grafana:您可以从官网下载Grafana。安装后,您可以通过 Web 浏览器访问 Grafana UI。
2.添加Prometheus作为数据源:
3.创建仪表板:
该过程非常相似,但有一些细微的差别。
1.安装并运行 Grafana如上所述。
2.添加VictoriaMetrics作为数据源:
3.创建仪表板:
Grafana 支持各种可视化,例如图表、表格、热图和单一统计数据。设置数据源并连接到 Prometheus 或 VictoriaMetrics 后,您可以创建和自定义这些可视化效果以满足您的需求。
Prometheus 和 VictoriaMetrics 可以监控 Kubernetes (K8s) 集群,并在 AWS 和 GCP 等云提供商的 Kubernetes 环境中部署。
Prometheus 是云原生计算基金会 (CNCF) 的一部分,就像 Kubernetes 一样,为监控 Kubernetes 环境提供强大的支持。
1.监控:Prometheus 原生支持 Kubernetes 服务发现,这意味着它可以自动发现并从您的服务、节点和 Pod 中获取指标。
2.部署:Prometheus 可以使用稳定的 Prometheus Helm Chart 或 Prometheus Operator 部署在 Kubernetes 上。Prometheus Operator 简化了 Prometheus、Alertmanager 和相关监控组件的部署和配置。它还提供 Kubernetes 自定义资源来部署和管理 Prometheus 和 Alertmanager 实例。
VictoriaMetrics 还为 Kubernetes 监控和部署提供广泛的支持。
1.监控:VictoriaMetrics 可以抓取 Prometheus 指标,并使用与 Prometheus 相同的服务发现配置来发现和抓取 Kubernetes 服务。还有vmagent一个 VictoriaMetrics 组件,旨在从各种数据源(包括 Kubernetes)获取 Prometheus 指标。
2.部署:VictoriaMetrics 可以使用其 Helm 图表部署在 Kubernetes 中。
总之,使用 Prometheus 或 VictoriaMetrics 将取决于您的具体需求。凭借其强大的查询功能以及与其他 CNCF 项目的紧密集成,Prometheus 可能更适合重视这些功能的环境。另一方面,如果可扩展性、数据压缩和高可用性是您主要关心的问题,VictoriaMetrics 可能是更好的选择。始终建议在确定解决方案之前仔细评估您的监控需求和限制。