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

VictoriaMetrics 完全指南 / 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(可选)            │
       └────────────────────────────┘

功能对比表

维度 Prometheus VictoriaMetrics
存储模型 本地 TSDB 自研压缩存储
压缩率 基准 7-10 倍于 Prometheus
查询语言 PromQL MetricsQL(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 / Flux MetricsQL(PromQL 兼容)
集群版 Enterprise(商业授权) 开源集群版
压缩率 良好 更优(7x+)
写入协议 InfluxDB Line Protocol 多协议支持
多租户 Database / RP 原生 tenantID
生态集成 Telegraf + Kapacitor Prometheus 生态 + 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 TB 150 GB -87.5%
内存占用 64 GB 16 GB -75%
P99 查询延迟 8.5 秒 0.6 秒 -93%
写入吞吐 50 万 samples/s 200 万 samples/s +300%
月度存储成本 ¥12,000 ¥2,400 -80%

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


1.7 版本演进

版本 发布时间 重要变更
v1.0 2018-07 初始发布
v1.40 2021-03 引入 vmctl 数据迁移工具
v1.60 2021-09 支持多租户
v1.80 2022-06 MetricsQL 增强,性能大幅提升
v1.90 2023-03 支持 streaming aggregation
v1.100 2024-01 新增 VictoriaLogs 集成
v1.106 2025-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 Prometheus VM 在大规模场景下显著优于 Prometheus,且完全兼容
vs InfluxDB VM 更适合纯时序指标场景,InfluxDB 适合事件型数据
适用场景 K8s 监控、IoT、Prometheus 扩展、长期存储

扩展阅读