前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VictoriaMetrics原理及实践

VictoriaMetrics原理及实践

作者头像
mikelLam
发布2022-10-31 14:54:29
2.8K0
发布2022-10-31 14:54:29
举报

简介

VictoriaMetrics,是一个快速高效、经济并且可扩展的监控解决方案和时序数据库。

谈到VictoriaMetrics就必须要提到Prometheus,VictoriaMetrics是一个新兴的监控解决方案。它借助Prometheus强大的exporter生态、成熟的规范、服务发现等优点等,融入到Prometheus生态中。VictoriaMetrics官网很多兼容Prometheus参数解释都是直接跳转到Prometheus官网。

VictoriaMetrics可以作为Prometheus的长期远程存储方案,当然VictoriaMetrics也可以完全取代Prometheus,因为VictoriaMetrics基本支持Prometheus配置文件、PromQL、各类API、数据格式等等。

作为一款新兴TSDB,参考DB-Engines的TSDB排行,最近两年VictoriaMetrics热度很高:

https://tc.ctq6.cn/tc/20220623064419.png
https://tc.ctq6.cn/tc/20220623064419.png

VictoriaMetrics 优点

  • 远程存储:可作为单一或多个Prometheus的远程存储
  • 安装简单:单节点架构一条命令就可以部署完毕(集群方式稍微复杂一些,但也很好理解)
  • 兼容性:PromQL兼容和增强的MetricsQL
  • Grafana兼容:VM可替换Grafana的Prometheus数据源(经测试,线上数据源直接替换后100%兼容)
  • 低内存:更低的内存占用,官方对比Prometheus,可以释放7倍左右内存空间(线上对比大概4倍)
  • 高压缩比:提供存储数据高压缩,官方说可以比Prometheus减少7倍的存储空间(线上对比大概是4~5倍)
  • 高性能:查询性能比Prometheus更快
  • 支持水平扩容&HA:基于VM集群版实现
  • 支持多租户:主要针对集群版

VictoriaMetrics 缺点

  • 图形化做的不好,虽然有vmui,但功能很少
  • 告警功能需要单独配置vmalert,而且vmalert只有api管理和查看,暂时没用图形界面
  • 没有类似Prometheus的WAL日志,突然故障可能会丢失部分数据

VictoriaMetrics 分类

VM分为,单节点(single-node)版和集群(cluster)版,两套方案,根据业务需求选择即可。

单节点版:直接运行一个二进制文件,既可以运行,官方建议采集数据点(data points)低于100w/s,推荐VM单节点版,简单好维护,但不支持告警。

集群版:支持数据水平拆分,把功能拆分为vmstorage、 vminsert、vmselect,如果要替换Prometheus,还需要vmagent、vmalert。

VictoriaMetrics 架构

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

https://tc.ctq6.cn/tc/b24fbb854c1d1c5255e827940fcf02dea3d4a6.jpg
https://tc.ctq6.cn/tc/b24fbb854c1d1c5255e827940fcf02dea3d4a6.jpg

主要包含以下几个组件:

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

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

vmagent 的主要目的是用来收集指标数据然后存储到 VM 以及 Prometheus 兼容的存储系统中(支持 remote_write 协议即可)。

下图是 vmagent 的一个简单架构图,可以看出该组件也实现了 metrics 的 push 功能,此外还有很多其他特性:

  • 替换 prometheus 的 scraping target
  • 支持基于 prometheus relabeling 的模式添加、移除、修改 labels,可以方便在数据发送到远端存储之前进行数据的过滤
  • 支持多种数据协议,influx line 协议,graphite 文本协议,opentsdb 协议,prometheus remote write 协议,json lines 协议,csv 数据
  • 支持收集数据的同时,并复制到多种远端存储系统
  • 支持不可靠远端存储(通过本地存储 -remoteWrite.tmpDataPath ),同时支持最大磁盘占用 相比 prometheus 使用较少的内存、cpu、磁盘 io 以及网络带宽
https://tc.ctq6.cn/tc/895d72d60df2de9f316312da61fb5289859eab.jpg
https://tc.ctq6.cn/tc/895d72d60df2de9f316312da61fb5289859eab.jpg

VictoriaMetrics 单节点版

下面模拟1个node-exporter,被Prometheus采集数据,然后Prometheus把数据写到VM远程存储。通过Grafana分别对2种数据源(Prometheus、VictoriaMetrics)进行展示,验证VM的兼容性。最终使用VM完全替换Prometheus,可以达到架构简单、更低的资源占用。

node-export 配置

兼容性

API兼容性

1、VM支持Prometheus querying API,主要如下:

代码语言:shell
复制
/api/v1/query
/api/v1/query_range
/api/v1/series
/api/v1/labels
/api/v1/label/…/values
/api/v1/status/tsdb
/api/v1/targets

2、也有(query和query_range)部分增强功能,如下:

代码语言:shell
复制
查询细化:/api/v1/query_range?extra_label=user_id=123&query=<query> 
相对时间:/api/v1/query_range?start=-30m&query=...
小数取舍:/api/v1/query?query=avg_over_time(temperature[1h])&round_digits=2

注:除非必要,建议不用,这样就算回到Prometheus技术栈也没问题

3、还新增部分VM自身数据统计API:

代码语言:shell
复制
/api/v1/series/count :返回VM时间序列的总数
/api/v1/labels/count :列出VM所有label数量统计,如上面的instance、ip、job等就是label
/api/v1/status/active_queries :返回当前VM运行的查询语句
/api/v1/status/top_queries:返回查询TopN,展示维度topByCount(查询次数)、topByAvgDuration(平均查询时间)、topBySumDuration(总查询时间)

服务发现兼容性

VM基本兼容Prometheus大多数常用的服务发现与抓取类型,部分线上已测试,更多可兼容类型如下:

代码语言:shell
复制
static_config(已测试)
file_sd_config(已测试)
kubernetes_sd_config
ec2_sd_config
gce_sd_config
consul_sd_config(已测试)
dns_sd_config
openstack_sd_config
docker_sd_config
dockerswarm_sd_config
eureka_sd_config
digitalocean_sd_config
http_sd_config

存储目录简介

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • VictoriaMetrics 优点
      • VictoriaMetrics 缺点
        • VictoriaMetrics 分类
        • VictoriaMetrics 架构
        • VictoriaMetrics 单节点版
          • node-export 配置
          • 兼容性
            • API兼容性
              • 服务发现兼容性
              • 存储目录简介
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档