VictoriaMetrics 笔记

news/2024/5/18 21:51:14 标签: prometheus, observability, metric, database, monitor

目录

  • 1. VictoriaMetrics 笔记
    • 1.1. 架构
    • 1.2. vmagent 特性

1. VictoriaMetrics 笔记

VictoriaMetrics(VM) 是一个支持高可用、经济高效且可扩展的监控解决方案和时间序列数据库, 可用于 Prometheus 监控数据做长期远程存储。

前面我们介绍了 Thanos 方案也可以用来解决 Prometheus 的高可用和远程存储的问题, 那么为什么我们还要使用 VictoriaMetrics 呢? 相对于 Thanos, VictoriaMetrics 主要是一个可水平扩容的本地全量持久化存储方案(性能比 thanos 性能要好, thanos 不是本地全量的, 它很多历史数据是存放在对象存储当中的, 如果要查询历史数据都要从对象存储当中去拉取, 这肯定比本地获取数据要慢, VM 要比 Thanos 性能要好, 这是必然的), VictoriaMetrics 不仅仅是时序数据库, 它的优势主要体现在一下几点。

  • 对外支持 Prometheus 相关的 API, 可以直接用于 Grafana 作为 Prometheus 数据源使用(可以直接使用 VictoriaMetrics 对接 grafana)
  • 指标数据摄取和查询具备高性能和良好的可扩展性, 性能比 InfluxDB 和 TimescaleDB 高出 20 倍
  • 在处理高基数时间序列时, 内存方面也做了优化, 比 InfluxDB 少 10x 倍, 比 Prometheus、Thanos 或 Cortex 少 7 倍
  • 高性能的数据压缩方式, 与 TimescaleDB 相比, 可以将多达 70 倍的数据点存入有限的存储空间, 与 Prometheus、Thanos 或 Cortex 相比, 所需的存储空间减少 7 倍
  • 它针对具有高延迟 IO 和低 IOPS 的存储进行了优化
  • 提供全局的查询视图, 多个 Prometheus 实例或任何其他数据源可能会将数据摄取到 VictoriaMetrics
  • 操作简单
  • VictoriaMetrics 由一个没有外部依赖的小型可执行文件组成
  • 所有的配置都是通过明确的命令行标志和合理的默认值完成的
  • 所有数据都存储在 - storageDataPath 命令行参数指向的目录中
  • 可以使用 vmbackup/vmrestore 工具轻松快速地从实时快照备份到 S3 或 GCS 对象存储中
  • 支持从第三方时序数据库获取数据源
  • 由于存储架构, 它可以保护存储在非正常关机(即 OOM、硬件重置或 kill -9)时免受数据损坏
  • 同样支持指标的 relabel 操作

1.1. 架构

VM 分为单节点和集群两个方案, 根据业务需求选择即可。单节点版直接运行一个二进制文件既, 官方建议采集数据点 (data points) 低于 100w/s, 推荐 VM 单节点版, 简单好维护, 但不支持告警。集群版支持数据水平拆分。

下图是 VictoriaMetrics 集群版官方的架构图。

上面这里是客户端, 比如 grafana, 它通过负载均衡去查询我们的数据, vmselect 是一个无状态的, 如果有压力就可以随意去扩展, 它从存储上面获取数据, 然后返回回去。

vmstorge 是有状态的, 它是整个集群组件里面唯一一个有状态的组件, 所有的时序数据都是存储在这个 vmstorge 里面的。

vminsert 也是一个无状态的, 所以也可以随便水平去扩展, 它是将数据插入到 vmstorge 里面去的, 可以通过 Prometheus 远程写的接口将数据写到 vminsert。

所以分为了两端, 一端是 vminsert 写数据, 一端是 vmselect 将数据查询出来。

写入数据的来源除了来自于 Prometheus, 还支持其他数据库。

1.jpeg

主要包含以下几个组件:

  • vmstorage: 数据存储以及查询结果返回, 默认端口为 8482
  • vminsert: 数据录入, 可实现类似分片、副本功能, 默认端口 8480(可以将数据分片插入到多个 storage 实例当中去, 具体怎么插入是有一套算法, 将数据哈希到某个节点上面去)(vminsert 也是无状态的, 所以暴露的时候可以使用 LB 的形式, Prometheus 可以通过远程写的方式写入到 LB, LB 后面对应的是 vminsert, vminsert 就可以将数据存储到 vmstorage 里面去)(Prometheus 通过 remote write 远程写的接口将数据写入 vminsert)
  • vmselect: 数据查询, 汇总和数据去重, 默认端口 8481, 如果有压力可以横向扩展
  • vmagent: 数据指标抓取, 支持多种后端存储, 会占用本地磁盘缓存, 默认端口 8429
  • vmalert: 报警相关组件, 不如果不需要告警功能可以不使用该组件, 默认端口为 8880

集群方案把功能拆分为 vmstorage、 vminsert、vmselect 组件, 如果要替换 Prometheus, 还需要使用 vmagent、vmalert(如果完全不想使用 Prometheus, 那么可以使用 vmagent)。从上图也可以看出vminsert 以及 vmselect(几乎)都是无状态的, 所以扩展很简单, 只有 vmstorage 是有状态的。

1.2. vmagent 特性

vmagent 相比于 Prometheus 抓取指标来说具有更多的灵活性, 比如除了拉取(pull)指标还可以推送(push)指标, 此外还有很多其他特性:

  • 可以替换 prometheus 的 scraping target
  • 支持从 Kafka 读写数据
  • 支持基于 prometheus relabeling 的模式添加、移除、修改 labels, 可以在数据发送到远端存储之前进行数据的过滤
  • 支持多种数据协议, influx line 协议, graphite 文本协议, opentsdb 协议, prometheus remote write 协议, json lines 协议, csv 数据等
  • 支持收集数据的同时, 并复制到多种远端存储系统
  • 支持不可靠远端存储, 如果远程存储不可用, 收集的指标会在 -remoteWrite.tmpDataPath 缓冲, 一旦与远程存储的连接被修复, 缓冲的指标就会被发送到远程存储, 缓冲区的最大磁盘用量可以用 -remoteWrite.maxDiskUsagePerURL 来限制。
  • 相比 prometheus 使用更少的内存、cpu、磁盘 io 以及网络带宽
  • 当需要抓取大量目标时, 抓取目标可以分散到多个 vmagent 实例中
  • 可以通过在抓取时间和将其发送到远程存储系统之前限制唯一时间序列的数量来处理高基数和高流失率问题
  • 可以从多个文件中加载 scrape 配置

2.jpeg

支持的功能和 Prometheus 差不多, 可以去读取 Prometheus 的配置, 也支持 rebleing, 支持添加全局的标签, 持久化数据到数据盘。

还支持远程写的协议, 写到 vm 当中。

外面就是可以主动去抓取我们的指标。

如果你是从头去搭建你的监控系统, 其实你一开始就可以不使用 Prometheus, 可以直接使用 vm, 只不过报警功能有点弱。如果 vm alter 做好了这块, 完全没有 Prometheus 什么事情了, 因为在内存和存储, 查询方面都要优于 Prometheus。


http://www.niftyadmin.cn/n/4987037.html

相关文章

前端常使用的一些网站

一.echarts Examples - Apache ECharts 身为一个资深的前端工程师 echarts 肯定是必不可少的呀 二. echarts社区 series-line折线图 - makeapie echarts社区图表可视化案例 这里面有各种大神 封装好的图例 拉下来直接使用即可 三. Element Element - The worlds most po…

vue/uniapp如何在组件中传递额外参数

1、原事件 changecheckBoxRowChange(data)2、如果想要加参数的话,比如index,则如下 change"(data)>checkBoxRowChange(data,index)"

【N2】例题学习笔记

【10】 【問い】この筆者から見た「仕事ができる人」の特徴はどんなことか。 【提问】这位作者认为,仕事能力强的人具有什么特点呢? 【11】 文章 下の文章は、企業のあり方についての本を出版した人が、その本の内容を紹介したものである。 这篇文…

QT基础教程之四QMainWindow

QT基础教程之四QMainWindow QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序…

MinIO在Ubuntu上的搭建步骤

在Ubuntu上搭建MinIO可以按照以下步骤进行: 下载MinIO服务器二进制文件: 通过浏览器访问 https://min.io/download 或使用以下命令获取最新的MinIO二进制文件:wget https://dl.min.io/server/minio/release/linux-amd64/minio赋予二进制文件…

Redis——》死锁

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

【JavaScript】版本判断

用于客户端和服务端进行版本更新判断使用,如有BUG,还望指出 效果 console.log(isAllowUpdate(1,2.0.0), // trueisAllowUpdate(2.0,2.0.0), // falseisAllowUpdate(2.0,2.0.1), // trueisAllowUpdate(2.1.1,2.1.2), // trueisAllowUpdate(2.1.3,2.1.2),…

NPDP认证|加班越多,产品经理的能力提升越快吗?

产品经理是现代企业中非常重要的职位,他们负责规划、设计、开发和推广公司的产品。为了使产品能够更好地满足市场需求,产品经理需要不断地提升自己的能力,以应对日益变化的竞争环境。有时,人们会认为加班是提高产品经理能力的途径…