无论是在单节点部署还是集群模式下,VictoriaMetrics 都能提供极高的性能,支持每秒数百万的写入请求和非常快速的查询响应。 VictoriaMetrics 可以通过多种方式进行安装和使用。 例如: 1234 wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.80.0/victoria-metrics-linux-amd64 配置 VictoriaMetrics 提供了灵活的配置选项,可以通过命令行参数进行自定义配置。 VictoriaMetrics 提供了丰富的功能,以下是一些亮点: 高性能写入和查询 VictoriaMetrics 在性能方面表现非常优秀。 集成与监控 VictoriaMetrics 提供了丰富的接口和工具来集成到现有的监控系统中。
victoriaMetrics之byteBuffer VictoriaMetrics经常会处理数目庞大的指标,在处理的过程中会涉及指标的拷贝,如果在指标拷贝时都进行内存申请的话,其内存消耗和性能损耗都非常大 victoriaMetrics使用byteBuffer来复用内存,提升性能,其核心就是用了sync.pool。下面主要看下它是如何结合sync.pool运作的。 B []byte } ByteBufferPool的用法 为了服用ByteBuffer,victoriaMetrics用到了ByteBufferPool,与常见的sync.Pool用法相同,包含一个Get
victoriametrics的部署使用sts方式部署。 prometheus的数据通过remote_write方式写到victoriametrics里面,victoriametrics的压缩比较高,可以轻松存储数月的历史数据。 victoriametrics在我们这是作为历史数据存储用,非核心的监控数据库。 victoriametrics全套的技术栈组件也很多,引入太多,人力不足。 : app: victoriametrics name: victoriametrics namespace: monitoring spec: ports: - name: http : 10 selector: matchLabels: app: victoriametrics serviceName: victoriametrics template
简介 VictoriaMetrics,是一个快速高效、经济并且可扩展的监控解决方案和时序数据库。 谈到VictoriaMetrics就必须要提到Prometheus,VictoriaMetrics是一个新兴的监控解决方案。 VictoriaMetrics可以作为Prometheus的长期远程存储方案,当然VictoriaMetrics也可以完全取代Prometheus,因为VictoriaMetrics基本支持Prometheus 作为一款新兴TSDB,参考DB-Engines的TSDB排行,最近两年VictoriaMetrics热度很高: VictoriaMetrics 优点 远程存储:可作为单一或多个Prometheus的远程存储 VictoriaMetrics 架构 VM 分为单节点和集群两个方案,根据业务需求选择即可。
VictoriaMetrics 是一种快速、经济高效且可扩展的监控解决方案和时间序列数据库 兼容 Prometheus及 PromQL VictoriaMetrics 具有以下突出特点: 可以作为 Prometheus 多个 Prometheus 实例或任何其他数据源可能会将数据摄取到 VictoriaMetrics。稍后可以通过单个查询来查询此数据。 数据摄取和数据查询提供了高性能和良好的纵向和横向可扩展性。 例如1月1号的数据会到3月1号删除 默认端口为: 8428 prometheus.yml配置 remote_write: - url: http://<victoriametrics-addr>:8428 这意味着--storage.tsdb.retention.time即使远程存储不可用,数据在本地存储中仍然可用 如果您计划从多个 Prometheus 实例向 VictoriaMetrics 发送数据, : container_name: victoriametrics image: victoriametrics/victoria-metrics:latest ports
本次是基于云上的k8s上安装一个cluster版本的victoriametrics,需要使用到云上的负载均衡。 :26:01Z vmalertmanagers.operator.victoriametrics.com 2022-01-05T07:26:01Z vmalerts.operator.victoriametrics.com :26:01Z vmclusters.operator.victoriametrics.com 2022-01-05T07:26:01Z vmnodescrapes.operator.victoriametrics.com :01Z vmprobes.operator.victoriametrics.com 2022-01-05T07:26:01Z vmrules.operator.victoriametrics.com 全文参考 https://github.com/VictoriaMetrics/VictoriaMetrics/tree/cluster https://docs.victoriametrics.com
/VictoriaMetrics/releases https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.103.0 https ://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.103.0/victoria-metrics-linux-amd64 实践过程 VictoriaMetrics安装 # wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.103.0 VictoriaMetrics at "[:8428]"... 2024-09-03T16:33:42.187Z info VictoriaMetrics/app/vmstorage/main.go: /api/v1/write 注意:添加时,需要替换<victoriametrics-addr>为VictoriaMetrics主机名称或者IP地址,形如以下 remote_write: - url:
victoriaMetrics无法获取抓取target的问题 问题描述 最近在新环境中部署了一个服务,其暴露的指标路径为:10299/metrics,配置文件如下(名称字段有修改): apiVersion : v1 items: - apiVersion: operator.victoriametrics.com/v1beta1 kind: VMServiceScrape metadata: endpoints namespaces: own_namespace: false names: - default 代码分析 既然配置没有问题,那只能通过victoriametrics 在victoriametrics的源码可以看到其拼接的target url如下: scrapeURL := fmt.Sprintf("%s://%s%s%s%s", schemeRelabeled, addressRelabeled
victoriaMetrics中的一些Sao操作 目录 victoriaMetrics中的一些Sao操作 快速获取当前时间 计算结构体的哈希值 将字符串添加到已有的[]byte中 将int64的数组转换为 byte数组 并发访问的sync.WaitGroup 时间池 访问限速 优先级控制 快速获取当前时间 victoriaMetrics中有一个fasttime库,用于快速获取当前的Unix时间,实现其实挺简单 select { case <-t.C: default: } } timerPool.Put(t) } var timerPool sync.Pool 访问限速 victoriaMetrics victoriaMetrics的源码中对限速器有如下描述: Limit the number of conurrent f calls in order to prevent from excess metrics.NewGauge(`vm_concurrent_insert_current`, func() float64 { return float64(len(ch)) }) ) 优先级控制 victoriaMetrics
victoriametrics的部署使用sts方式部署。 prometheus的数据通过remote_write方式写到victoriametrics里面,victoriametrics的压缩比较高,可以轻松存储数月的历史数据。 victoriametrics在我们这是作为历史数据存储用,非核心的监控数据库。 victoriametrics全套的技术栈组件也很多,引入太多,人力不足。 : app: victoriametrics name: victoriametrics namespace: monitoring spec: ports: - name: http : 10 selector: matchLabels: app: victoriametrics serviceName: victoriametrics template
victoriaMetrics库之布隆过滤器 代码路径:/lib/bloomfilter 概述 victoriaMetrics的vmstorage组件会接收上游传递过来的指标,在现实场景中,指标或瞬时指标的数量级可能会非常恐怖 victoriaMetrics使用如下方式来获取时序的唯一标识: func getLabelsHash(labels []prompbmarshal.Label) uint64 { bb := labelsHashBufPool.Get label.Value...) } h := xxhash.Sum64(b) bb.B = b labelsHashBufPool.Put(bb) return h } 限速器的初始化 victoriaMetrics w := atomic.LoadUint64(&bits[i]) if (w & mask) == 0 { return false } } return true } 总结 由于victoriaMetrics 此外victoriaMetrics的过滤器实现了并发访问。 过滤器为了支持并发访问,使用atomic来实现数值存储和加载以及数值变更等操作。
VictoriaMetrics(简称VM) 是一个支持高可用、经济高效且可扩展的监控解决方案和时间序列数据库,可用于 Prometheus 监控数据做长期远程存储。 相对于 Thanos,VictoriaMetrics 主要是一个可水平扩容的本地全量持久化存储方案,VictoriaMetrics 不仅仅是时序数据库,它的优势主要体现在以下几点。 下图是 VictoriaMetrics 集群版官方的架构图。 /main.go:61 started VictoriaMetrics in 0.017 seconds 2022-04-22T08:59:14.449Z info VictoriaMetrics 这里面我们简单介绍了单机版的 victoriametrics 的基本使用。关于集群版的使用请关注后续文章。
不得不寻求一些联邦方案或者分布式高可用方案,社区热度比较高的项目有 Thanos,Cortex,VictoriaMetrics。 本文就介绍使用 VictoriaMetrics 作为数据存储后端对 K8S 集群进行监控,k8s 部署不再具体描述。 环境版本 实验使用单节点 k8s 网络组件使用 cilium VictoriaMetrics 存储使用 localpv [root@cilium-1 victoria-metrics-cluster]# 部署 VictoriaMetrics 创建 localpv 为 storage 组件提供 StorageClass 也可以使用其他网络存储 --- apiVersion: storage.k8s.io/ 部署 promxy 由于 VictoriaMetrics 没有查询 UI,并且不提供 Remote_read 的功能。
VictoriaMetrics监控组件(以下简称VM)号称比Prometheus快了至少3倍,内存占用比Prometheus小了7倍。 为什么能快这么多呢? 下面是阅读vm-storage源码后的心得: 1.CPU和并发 基于可用的CPU核数来规划并发 see:victoria-metrics-1.72.0/blob/master/VictoriaMetrics (IO协程又另当别论) 区分IO协程和计算协程 see: VictoriaMetrics-1.72.0-cluster/app/vmstorage/transport/server.go#L261 IO 具体的细节请看我的这篇分析文章:《VictoriaMetrics中协程优先级的处理方式》 特定的成员有特定的锁 // Table represents mergeset table. // 索引部分的 从实现带来来看,VictoriaMetrics并未采用SIMD和JIT这两项技术。可以期待,未来VM的性能还能更高!
VictoriaMetrics源代码可以在以下位置找到: https: //github.com/VictoriaMetrics/VictoriaMetrics 这些项目的 GitHub 存储库包含所有源代码 VictoriaMetrics 组件 Victoria Metrics 在保持更简单的架构的同时,还包括几个核心组件: VictoriaMetrics 单节点:这是 VictoriaMetrics 的基本构建块 vmctl:此 CLI 工具将数据从不同的 TSDB 迁移到 VictoriaMetrics。 vmstorage:VictoriaMetrics 的存储后端。 VictoriaMetrics:虽然它提供与 Prometheus 生态系统的兼容性,但 VictoriaMetrics 也可以用作 TSDB 的直接替代品。 VictoriaMetrics 也发布了一个性能测试基准https://victoriametrics.com/blog/benchmark-100m/。
进一步排查,发现上游发送端(使用的是victoriaMetrics的vmagent组件)出现了如下错误,说明是prom-proxy消费的数据跟不上vmagent产生的数据: 2022-03-24T09: 55:49.945Z warn VictoriaMetrics/app/vmagent/remotewrite/client.go:277 couldn't send a block nil, err } return &ReqData{ reqBuf: reqBuf, wr: &wr, }, nil } 解决办法就是拿出sync.pool大杀器,下面方式参考了victoriaMetrics 重新发布线上,自然又出问题了,这次prom-proxy服务一切正常,但导致后端vmstorage(victoriametrics的存储服务)内存爆满。
背景:使用的 VictoriaMetrics(简称 VM) 作为监控的解决方案,需要将 django 服务、logstash 和 flink 引擎接入进来,VM 可以实时的获取它们的指标存储并进行监控告警 1.VictoriaMetrics VictoriaMetrics,是一个快速高效、经济并且可扩展的监控解决方案和时序数据库。 配置如下: apiVersion: operator.victoriametrics.com/v1beta1 kind: VMPodScrape metadata: labels: prometheus
请到 H21 展位详细了解 VictoriaMetrics。 VictoriaMetrics 是一款开源监控程序包和相关时间序列数据库,在 Apache2 许可证下开源。 该公司还提供该软件的商业版本,VictoriaMetrics Enterprise。 本周,该公司推出了一项新功能,VictoriaMetrics 异常检测,它使用机器学习来降低警报中的误报率。 使用相同的协议,VictoriaMetrics 可以作为 Prometheus 的直接替代品。但 Prometheus 只能在单个服务器上运行。 相比之下,VictoriaMetrics 虽然也是单个二进制文件,但也可以 在集群中运行。 VictoriaMetrics 可用于长期存储 Prometheus。 VictoriaMetrics 提供了哪些优势?
VictoriaMetrics 安装 VictoriaMetrics 集群架构如下所示: VictoriaMetrics 集群架构 VictoriaMetrics 有 3 种不同类型的组件,也可以通过 我在这个基准测试中使用的是 VictoriaMetrics/VictoriaMetrics:1.80.0-cluster 这个版本。 结果 Mimir 和 VictoriaMetrics 都完全能够处理 360k 样本/秒的摄取率: Mimir 和 VictoriaMetrics 的摄取率和活跃时间序列数 VictoriaMetrics Mimir 和 VictoriaMetrics 的内存使用量也不同: Mimir 和 VictoriaMetrics 的内存使用 在此基准测试中,与 Mimir 相比,VictoriaMetrics 相反,VictoriaMetrics 只使用了允许内存的 1/4: VictoriaMetrics 内存使用 存储节点上内存的平均利用率约为 30%。
◆ VictoriaMetrics 安装 VictoriaMetrics 集群架构如下所示: VictoriaMetrics 集群架构 VictoriaMetrics 有 3 种不同类型的组件,也可以通过 我在这个基准测试中使用的是 VictoriaMetrics/VictoriaMetrics:1.80.0-cluster 这个版本。 ◆ 结果 Mimir 和 VictoriaMetrics 都完全能够处理 360k 样本/秒的摄取率: Mimir 和 VictoriaMetrics 的摄取率和活跃时间序列数 VictoriaMetrics Mimir 和 VictoriaMetrics 的内存使用量也不同: Mimir 和 VictoriaMetrics 的内存使用 在此基准测试中,与 Mimir 相比,VictoriaMetrics 相反,VictoriaMetrics 只使用了允许内存的 1/4: VictoriaMetrics 内存使用 存储节点上内存的平均利用率约为 30%。