Prometheus 与 VictoriaMetrics对比

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享

时序数据库有很多,比如Prometheus、M3DB、TimescaleDB、OpenTSDB、InfluxDB等等。Prometheus和VictoriaMetrics是开源的时间序列数据库,在复杂的环境中提供了强大的监控和警报解决方案。然而,它们的设计不同,并提供了独特的功能,这些功能可能会影响它们在监视工作负载方面的性能、可扩展性和易用性。本文分析Prometheus和VictoriaMetrics之间的差异,以为特定需求的用户提供最合适的解决方案。

Prometheus

Prometheus最初是 SoundCloud 中的一个项目,是一个功能强大的监控和警报工具包,专门用于处理多维环境中的时间序列数据。由于其对多维数据收集、查询和警报生成的本机支持,它在 SRE 和 DevOps 社区中变得非常受欢迎。

Prometheus 是在云原生计算基金会 (CNCF) 下开发的。Prometheus 服务器、客户端库、Alertmanager 和其他相关组件可以在 Prometheus GitHub 组织中找到。主要存储库是: https://github.com/prometheus/prometheus

VictoriaMetrics

VictoriaMetrics则是一个高性能、高性价比、可扩展的时间序列数据库,可以作为Prometheus的长期远程存储。它拥有超强的数据压缩和高速数据摄取能力,使其成为大规模监控任务的有吸引力的替代方案。VictoriaMetrics源代码可以在以下位置找到:https://github.com/VictoriaMetrics/VictoriaMetrics

性能比较

VictoriaMetrics 与 Prometheus 之间的数据摄取和查询率性能基于使用指标的基准node_exporter`测试。内存和磁盘空间使用情况数据适用于单个 Prometheus 或 VictoriaMetrics 服务器。

比较PrometheusVictoriaMetrics
数据采集基于拉动基于拉式和推式
数据摄取每秒高达 240,000 个样本每秒高达 360,000 个样本
数据查询每秒高达 80,000 次查询每秒高达 100,000 次查询
内存使用情况高达 14GB RAM高达 4.3GB 的 RAM
数据压缩使用LZF压缩使用 Snappy 压缩
磁盘写入频率更频繁地将数据写入磁盘减少将数据写入磁盘的频率
磁盘空间使用情况需要更多磁盘空间需要更少的磁盘空间
查询语言PromQLMetricsQL(向后兼容 PromQL)

可扩展性和集成性比较

Prometheus使用基于PUll模型来收集指标,可以处理多达数百万个活动时间序列。该架构虽然简化了监控服务方的操作。但是也有一定的弊端,比如多个实例抓取的是相同的监控指标,不能保证采集的数据值为一致的,并且在实际的使用中可能遇到网络延迟问题,所以会产生数据不一致的问题,不过对于监控报警这个场景来说,一般不会要求数据的强一致性,所以从业务上来说是可以接受,因为这种数据不一致性影响基本上没什么影响。这种场景适合监控规模不大,只需要保存短周期监控数据的场景。

而 VictoriaMetrics支持pull模型和Push模型。它能够处理大量数据和更广泛的网络场景(得益于其推送模型支持),使其具有可扩展性和灵活性。

Prometheus架构

Prometheus的架构由四个主要组件组成:

  1. Prometheus Server :Prometheus Server是Prometheus的核心组件,主要负责从各个目标(target)中收集指标(metrics)数据,并对这些数据进行存储、聚合和查询。

  2. Client Libraries :Prometheus提供了多种客户端库,用于在应用程序中嵌入Prometheus的指标收集功能。

  3. Exporters :Exporters是用于将第三方系统的监控数据导出为Prometheus格式的组件。Prometheus支持多种Exporters,例如Node Exporter、MySQL Exporter、HAProxy Exporter等。

  4. Alertmanager:Alertmanager是Prometheus的告警组件,用于根据用户定义的规则对监控数据进行告警。

  5. 服务发现:Prometheus 支持各种服务发现机制,帮助它找到应该抓取的目标。

  6. PromQL:这是 Prometheus 内置的灵活查询语言,用于数据探索和仪表板,与 SQL 不同。

VictoriaMetrics架构

VictoriaMetrics 提供单机版和集群版。如果您的每秒写入数据点数小于100万(这个数量是个什么概念呢,如果只是做机器设备的监控,每个机器差不多采集200个指标,采集频率是10秒的话每台机器每秒采集20个指标左右,100万/20=5万台机器),VictoriaMetrics 官方默认推荐您使用单机版,单机版可以通过增加服务器的CPU核心数,增加内存,增加IOPS来获得线性的性能提升。且单机版易于配置和运维。

下面这是一个集群版的架构图

VictoriaMetrics在保持更简单的架构的同时,还包括几个核心组件:

  • vmstorage:数据存储以及查询结果返回,默认端口为 8482
  • vminsert:数据录入,可实现类似分片、副本功能,默认端口 8480
  • vmselect:数据查询,汇总和数据去重,默认端口 8481
  • vmagent:数据指标抓取,支持多种后端存储,会占用本地磁盘缓存,默认端口 8429
  • vmalert:报警相关组件,不如果不需要告警功能可以不使用该组件,默认端口为 8880

数据压缩和存储效率

Prometheus拥有高效的存储系统,但在长期数据存储后端和检索效率方面不如VictoriaMetrics。

VictoriaMetrics 相对于 Prometheus 的主要优势之一是其数据压缩功能。它的数据压缩算法,可显着降低存储要求。VictoriaMetrics 声称提供比 Prometheus 高出 10 倍的数据压缩,这是长期数据保留和成本优化的关键优势。

Prometheus

  1. 内存存储:Prometheus利用内存存储来访问最近的时间序列数据。数据库中的这个部分被称为head block
  2. 磁盘存储:当数据达到一定的年龄或大小后,位于"head block"中的数据会被移动到磁盘中,这个过程称为checkpointing。这个数据库由长期存储的"persistent blocks"组成。

VictoriaMetrics

1.内存存储:与 Prometheus 类似,VictoriaMetrics 使用内存存储在传入数据写入磁盘之前进行缓冲。这种方法有助于优化写入性能。同事还缓存经常访问的数据以加快检索速度。

2.磁盘存储:VictoriaMetrics 中的大部分数据存储在磁盘上。它使用一种高效的存储格式,可以实现大幅度的进行数据压缩。

查询语言

PromQL

Prometheus使用PromQL。PromQL 允许实时选择和聚合时间序列数据。它使我们能够高度灵活地使用指标。通过 PromQL,用户可以过滤和聚合指标,计算比率、比率、平均值和百分位数等指标。

MetricsQL

VictoriaMetrics向后兼容 PromQL。我们都可以按照理解的 PromQL 语法来进行查询。但是,它还引入了 PromQL 的扩展,称为MetricsQL。MetricsQL 增强了 PromQL 提供的查询功能。它引入了新函数、运算符和语法糖。简化并改善了用户体验,特别是对于复杂的查询和聚合。

摄取率

Prometheus
  • Prometheus定期从监控目标中获取指标。这些获取的频率的调整可以控制数据摄取速率。
  • Prometheus实际上能够摄取数据的速率取决于许多因素,包括运行的硬件性能、被获取的指标的复杂性以及存储层的效率。
  • 如果Prometheus无法跟上传入数据量,可能会丢弃样本或增加延迟。
VictoriaMetrics
  • VictoriaMetrics则比Prometheus更加高效利用资源。它声称在相同的数据量下,能够更高效地摄取数据,使用更少的CPU、内存和磁盘空间。
  • 这种效率使得VictoriaMetrics在相同硬件上能够比Prometheus更快地摄取数据。
  • 在架构设计方面,VictoriaMetrics可以通过拉取(与Prometheus类似)和推送模式来摄取数据。推送模式对于高基数数据和摄取速率是有帮助的。

高可用性和可靠性

Prometheus 本身并不支持集群,这意味着它不提供原生高可用性。高可用性可以通过运行重复实例来实现,或者thanos架构,当然也可以整合VictoriaMetrics。

来源:vivo容器监控系统架构

而VictoriaMetrics 在设计时就考虑到了高可用性。它使用复制和集群来确保在实例发生故障时数据不会丢失,从而成为了很多大厂的选择。

API接口

Prometheus和VictoriaMetrics都提供了基于 Http的 API接口,已满足客户端调用需求

Prometheus API
  • 查询:Prometheus提供了PromQL查询语言,用户可以使用该语言通过HTTP API查询指标数据。
  • 元数据:API endpoint提供对 Prometheus 服务器中关系列和标签的元数据的访问。
  • 管理:某些管理任务,例如删除系列、快照等,也可以通过 API 执行。
VictoriaMetrics API

VictoriaMetrics提供了一个全面的HTTP API,根据功能分为几个部分:

  • 适用于Prometheus的指标API:此API与Prometheus的HTTP API兼容,这意味着可以将VictoriaMetrics作为Prometheus的替代品。

  • InfluxDB API:VictoriaMetrics还提供与InfluxDB的写入和查询API兼容的API。这使得从InfluxDB切换到VictoriaMetrics也很容易。

  • Graphite API:VictoriaMetrics还为Graphite的API提供了一个兼容层。

  • MetricsQL和PromQL API:这些API用于查询存储在VictoriaMetrics中的指标数据。MetricsQL是VictoriaMetrics特定的

    PromQL扩展,提供了PromQL中不可用的额外功能。

与 Grafana 集成

由于 VictoriaMetrics兼容Prometheus,所以在 在 Grafana 进行可视化配置时,可以使用“Prometheus”数据源,并将 Url 设置为VictoriaMetrics Server 地址即可。

总结

以上我们总结Prometheus与VictoriaMetrics的各个方面的对比,虽然VictoriaMetrics在某些方面可能比Prometheus更强大,比如在处理大规模数据和高并发负载时的性能表现,完全可以替换Prometheus,但它相对来说是相对较新的项目,尚未达到Prometheus在用户社区和广泛采用方面的水平。此外,Prometheus的发展时间更早,是CNCF第二个毕业的项目,已经得到了大量用户的验证,并且有更多的文档、教程和案例可供参考。

此外,技术的流行和广泛采用并不仅仅取决于技术本身的性能,还受到多个因素的影响,包括市场宣传、社区支持、用户体验和可用性等。Prometheus在这些方面都做得相对较好,因此在监控领域更为流行和广泛采用。

参考

https://last9.io/blog/prometheus-vs-victoriametrics/

https://www.qikqiak.com/post/victoriametrics-usage/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给充电桩嵌入一个强大的“心脏”——工控机

到底什么样的工控机才算是真正的好用? 小编还特地去问了技术老王 他表示:稳定第一,性能第二! 不稳定,性能再好也白搭! 什么是工控机呢? 工控机是一种专门为工业现场而设计的计算机设备&…

鸿蒙开发已解决The module to import is incompatible with the current project

文章目录 项目场景:问题描述原因分析:解决方案:心得体会:知识点OpenHarmony:HarmonyOS:项目场景: 报错: The module to import is incompatible with the current project 问题描述 希望通过 import module 将该模块引入到我的项目。 导入后出现错误,因为项目和模

JavaScript高级程序设计读书记录(八):对象的使用及创建

ECMA-262 将对象定义为一组属性的无序集合。严格来说,这意味着对象就是一组没有特定顺序的 值。对象的每个属性或方法都由一个名称来标识,这个名称映射到一个值。正因为如此(以及其他还未 讨论的原因),可以把 ECMAScri…

imx7开机自动执行任务(点灯)

前提: 已正确配置设备树,可以在用户空间控制GPIO。 启动脚本: 创建shell脚本xx.sh,给与执行权限chmod x xx.sh,以便当Linux启动时自启动执行。 #!/bin/bash# 设置GPIO引脚编号 GPIO_PIN166# 导出GPIO引脚 echo $GPI…

kubernetes Namespace Labels 详解

写在前面:如有问题,以你为准, 目前24年应届生,各位大佬轻喷,部分资料与图片来自网络 内容较长,页面右上角目录方便跳转 namespace 实现资源分组,label实现业务分组 Namespace 基础理论 最重…

使用 std::forward 的作用---完美转发

std::forward是什么 使用 std::forward 是为了实现完美转发(perfect forwarding)。 完美转发是一种技术,用于将函数模板的参数按原始类型转发给其他函数或对象。它可以保持原始参数的值类别(lvalue 或 rvalue)和 con…

科技创新创业

科技创新创业是一个涉及多个方面的过程,主要包括以下几个方面: 创意产生:创业的起始点通常是一个新的创意或想法,这可能是一个新的产品、服务或技术的概念。这个创意需要独特且具有商业潜力。市场调研:一旦有了创意&a…

行业赋能|同创永益出席数据中心业务连续性管理国标应用推广研讨会

2023年12月7日,ITSS数据中心业务连续性管理国标应用推广研讨会在上海交通银行浦江数据中心召开。来自交通银行、浦发银行、太平洋保险、上证数据、海通证券、国泰君安、申万宏源、太平保险、中债登、神州信息、翰纬科技、同创永益等单位20余名专家出席会议&#xff…

2024第15届电子教育、电子商务、电子管理和电子学习国际会议

第十五届电子教育、电子商务、电子管理和电子学习国际会议(IC4E 2024)将于2024年3月18日-21日在日本福冈举办。本次会议以电子技术为核心,围绕电子教育、电子商务、电子管理以及电子学习等各个方面展开研讨,为相关领域的专家学者们…

独孤思维:​做副业项目,保持平常心

做副业项目,保持平常心。 不能因为自认为很好的作品,数据不好看,就哭哭闹闹。 平常心,坚持日更,保持持续刷新自己,提升自己的飞轮状态。 不以物喜,不以己悲,哈哈。 无论是副业还是…

检查密码(字符串)

本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。 输入格式: 输入第一行给出一个正整数 N(≤…

2.SPSS数据文件的建立和管理

文章目录 数据文件的特点建立SPSS数据文件步骤 数据文件的结构变量的规则 数据的录入和保存录入数据保存文件 数据的编辑数据定位 数据文件的特点 SPSS数据库文件包括文件结构和数据两部分 SPSS数据文件中的一列数据称为一个变量。每个变量都应有一个名称,即&…

力扣 | 509. Fibonacci

509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。 该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 n …

自动计算薪资-全优学堂

功能说明 全优学堂薪资模块则根据基础薪资、历史上课情况、课程销售情况自动计算员工薪资,帮助您更好地进行成本管理。系统根据教职工的排班情况、课时数和提成规则,自动计算教职工的薪资,大大减轻工资管理负担。 #1. 基础薪资配置 设置本…

智能音箱喇叭底噪大的问题

智能音箱喇叭底噪大的问题 3w的喇叭,放大8到12倍。speaker外放模式. 播放时底噪声很大.可在播放时音量减到最小凑近听,发现在半米的范围内都能听到底噪声. 分析过程 引原始的pa输出线出来引功放处理后的音频信号输出线出来&…

积萨伯爵不懈追求恒久卓越,花为缘集团不断探索时尚的型格魅力

近年来,高端腕表凭借着卓越的制表技艺、悠久的制表历史以及不拘一格的美学特色,逐渐受到各大明星演员,时尚博主的青睐,成为他们出席各大重要场合,彰显个人品位和地位的时尚百搭单品。 积萨伯爵作为专业做培育珠宝和高…

复习python从入门到实践——函数function

复习python从入门到实践——函数function 函数是特别难的,大家一定要好好学、好好复习、反复巩固。函数没学好,会为后面造成很大困扰。 教科书中函数举例会稍微有点复杂。在此章复习中,我将整理出容易疏漏和混淆的知识点,并用最简…

Django 入门教程|Web开发|用户管理实战

简介 Django是一个主流的Python Web框架,用于快速开发 Web 应用程序。功能强大,Python Web应用开发的第一选择。 特点 ORM(对象关系映射): Django 提供了一个强大的 ORM,允许开发者通过 Python 代码来定义…

LLM、AGI、多模态AI 篇四:ChatGLM3部署和应用

文章目录 系列简介部署和运行推荐硬件要求部署步骤配置Python环境下载模型文件克隆项目代码安装依赖运行Demo修改demo源代码运行Demo可执行文件应用代码调用Langchain+RAG+ChatGLM3OpenAI API 支持