强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

01 - VictoriaMetrics 特性与对比分析

01 · VictoriaMetrics 特性与对比分析

本章目标

  • 了解 VictoriaMetrics 的诞生背景与核心定位
  • 掌握其关键特性与技术优势
  • 与 Prometheus、InfluxDB 进行系统性对比
  • 帮助你在架构选型时做出合理决策

1.1 什么是 VictoriaMetrics

VictoriaMetrics(以下简称 VM)是一款高性能、低成本的时序数据库(Time Series Database, TSDB)和监控解决方案,由 Aliaksandr Valialkin 于 2018 年开源。它同时提供单节点版集群版,并完全兼容 Prometheus 生态。

设计哲学

┌─────────────────────────────────────────────────┐
│            VictoriaMetrics 设计三角              │
│                                                 │
│              简单 (Simplicity)                   │
│                    ▲                            │
│                   / \                           │
│                  /   \                          │
│                 /     \                         │
│                /       \                        │
│    性能 (Performance)──成本 (Cost Efficiency)    │
└─────────────────────────────────────────────────┘
  • 简单:单二进制文件部署,无外部依赖(单节点版)
  • 高性能:比 Prometheus 快 10-100 倍的查询速度
  • 低成本:高压缩率,磁盘占用降低 7-10 倍

1.2 核心特性

1.2.1 存储引擎

特性说明
Mergetree 存储类似 ClickHouse 的 LSM 树变体,追加写入 + 后台合并
压缩算法使用 VictoriaMetrics 自研压缩,比 Prometheus 的 TSDB 压缩率高 7-10 倍
写入模式仅支持追加写入(append-only),天然适合时序数据
索引倒排索引(inverted index),支持按 metric name 和 label 快速检索

1.2.2 协议兼容性

Prometheus remote_write ──┐
Prometheus remote_read ───┤
Prometheus scrape ────────┤
InfluxDB line protocol ───┼──▶ VictoriaMetrics
OpenTSDB ─────────────────┤
Graphite ─────────────────┤
CSV / JSON ───────────────┘

1.2.3 查询语言 MetricsQL

  • 完全兼容 PromQL
  • 新增 50+ 实用函数(如 rollup, default_rollup, label_match 等)
  • 支持子查询嵌套、多级聚合
  • 详见 第 05 章 MetricsQL

1.2.4 运维友好

  • 单二进制文件,无需 ZooKeeper / Consul / etcd
  • 内置 HTTP API,方便与各种工具集成
  • 支持即时快照备份(snapshot)
  • 提供丰富的自我监控指标

1.3 与 Prometheus 对比

这是选型中最常遇到的问题。以下是详细对比:

架构差异

Prometheus 架构:
┌──────────┐   pull    ┌──────────┐
│  Target  │ ◀──────── │Prometheus│ ──▶ 本地 TSDB
└──────────┘           └──────────┘
                              │
                        remote_write(可选)
                              ▼
                       ┌──────────────┐
                       │ 远程存储(VM)│
                       └──────────────┘

VictoriaMetrics 单节点架构:
┌──────────┐  remote_write  ┌─────────────────┐
│Prometheus│ ──────────────▶│ VictoriaMetrics │(同时作为远程存储和查询引擎)
└──────────┘                └─────────────────┘
       │                            ▲
       │   scrape(可选)            │
       └────────────────────────────┘

功能对比表

维度PrometheusVictoriaMetrics
存储模型本地 TSDB自研压缩存储
压缩率基准7-10 倍于 Prometheus
查询语言PromQLMetricsQL(PromQL 超集)
集群支持需 Thanos / Cortex原生集群版
高可用需外部组件原生 replication
长期存储需 Thanos / remote storage内置 retention 配置
数据回填需 promtool内置 vmctl 工具
多租户不支持集群版原生支持
抓取模式Pull(默认)Pull + Push
配置热加载/-/reload/-/reload
内存占用基准低 2-5 倍
磁盘 I/O基准低 5-10 倍
查询速度基准快 10-100 倍(大数据集)
生态原生 Prometheus兼容 Prometheus 生态
成熟度CNCF 毕业项目已有大规模生产验证

何时选择 Prometheus

  • 团队对 Prometheus 生态非常熟悉
  • 数据量较小(< 100 万活跃时间序列)
  • 不需要长期存储或集群能力
  • 希望使用原生 CNCF 生态

何时选择 VictoriaMetrics

  • 时间序列数量巨大(> 100 万)
  • 对存储成本敏感
  • 需要长期数据保留(月/年级)
  • 需要多租户支持
  • 需要简单运维的集群方案
  • 查询性能有较高要求

1.4 与 InfluxDB 对比

架构差异

InfluxDB(单机版):
┌──────────┐
│ InfluxDB │ ──▶ TSI Index + TSM Engine
└──────────┘

InfluxDB Enterprise:
┌──────────┐    ┌────────────┐
│  Data     │◀──▶│  Meta      │  (需 Raft 共识)
│  Node(s)  │    │  Node(s)   │
└──────────┘    └────────────┘

VictoriaMetrics:
┌──────────┐
│    VM     │ ──▶ Mergetree + Inverted Index
└──────────┘     (单二进制,无需外部依赖)

功能对比表

维度InfluxDB (OSS)VictoriaMetrics
数据模型Tag + Field(类 SQL)Metric + Label(Prometheus 风格)
查询语言InfluxQL / FluxMetricsQL(PromQL 兼容)
集群版Enterprise(商业授权)开源集群版
压缩率良好更优(7x+)
写入协议InfluxDB Line Protocol多协议支持
多租户Database / RP原生 tenantID
生态集成Telegraf + KapacitorPrometheus 生态 + Grafana
社区活跃度较活跃快速增长
许可MIT(OSS)Apache 2.0

数据模型对比示例

InfluxDB 风格

cpu,host=server01,region=cn-north usage_idle=95.2,usage_user=3.1 1699000000000000000

Prometheus / VM 风格

cpu_usage_idle{host="server01", region="cn-north"} 95.2
cpu_usage_user{host="server01", region="cn-north"} 3.1

注意:InfluxDB 的 field 在 Prometheus 模型中会拆分为独立的 metric name,这意味着从 InfluxDB 迁移时需要重新设计数据模型。

何时选择 InfluxDB

  • 数据是事件型的(logs, events, traces 混合)
  • 团队熟悉 SQL 语法
  • 需要 Flux 的复杂数据转换能力
  • 数据量不大,单机版即可满足

何时选择 VictoriaMetrics

  • 纯时序指标数据
  • 需要开源的集群方案
  • 对存储成本和查询性能有更高要求
  • 已有 Prometheus 生态,希望平滑迁移

1.5 与其他方案对比速览

方案开源集群多租户PromQL 兼容复杂度压缩率
Prometheus
Thanos
Cortex
Mimir
VM 单节点极低
VM 集群
InfluxDB OSS
InfluxDB Ent
TimescaleDB
ClickHouse

1.6 真实案例:从 Prometheus 迁移收益

某互联网公司监控数据概况:

指标迁移前 (Prometheus)迁移后 (VM)变化
活跃时间序列200 万200 万-
磁盘占用1.2 TB150 GB-87.5%
内存占用64 GB16 GB-75%
P99 查询延迟8.5 秒0.6 秒-93%
写入吞吐50 万 samples/s200 万 samples/s+300%
月度存储成本¥12,000¥2,400-80%

提示:以上数据基于公开社区分享,实际效果因工作负载而异。


1.7 版本演进

版本发布时间重要变更
v1.02018-07初始发布
v1.402021-03引入 vmctl 数据迁移工具
v1.602021-09支持多租户
v1.802022-06MetricsQL 增强,性能大幅提升
v1.902023-03支持 streaming aggregation
v1.1002024-01新增 VictoriaLogs 集成
v1.1062025-01增强安全特性,改进 vmui

1.8 业务场景

场景一:云原生 Kubernetes 监控

  • 1000+ 节点 K8s 集群
  • 50 万+ Pod,每 Pod 3-5 个指标
  • 需要 90 天数据保留
  • 推荐方案:VM 集群版 + Prometheus Agent 模式

场景二:IoT 设备数据采集

  • 100 万台设备,每 30 秒上报
  • 数据量:~300 万 samples/s
  • 需要 1 年数据保留
  • 推荐方案:VM 单节点(高配)或集群版 + InfluxDB 协议写入

场景三:原有 Prometheus 扩展

  • 当前使用 Prometheus,数据增长导致性能下降
  • 不希望大幅改动现有配置
  • 推荐方案:Prometheus + VM 作为 remote storage,渐进式迁移

本章小结

要点内容
定位高性能、低成本的 Prometheus 长期存储与替代方案
核心优势高压缩率、快查询、简单运维、多协议支持
vs PrometheusVM 在大规模场景下显著优于 Prometheus,且完全兼容
vs InfluxDBVM 更适合纯时序指标场景,InfluxDB 适合事件型数据
适用场景K8s 监控、IoT、Prometheus 扩展、长期存储

扩展阅读