惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
腾讯CDC
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
量子位
博客园 - 聂微东
Jina AI
Jina AI
小众软件
小众软件
The Cloudflare Blog
有赞技术团队
有赞技术团队
V
V2EX
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
B
Blog
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
宝玉的分享
宝玉的分享
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
N
Netflix TechBlog - Medium
I
InfoQ
J
Java Code Geeks
S
SegmentFault 最新的问题
V
Visual Studio Blog
Microsoft Security Blog
Microsoft Security Blog
博客园 - 叶小钗
D
DataBreaches.Net
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog RSS Feed
S
Schneier on Security
Webroot Blog
Webroot Blog
P
Proofpoint News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
Project Zero
Project Zero
Scott Helme
Scott Helme
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security

博客园 - 左扬

VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— VictoriaLogs 协同:Metrics 到 Logs 的一体化监控 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 源码阅读路线图:如何高效阅读 VM 源码 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 与其他 TSDB 对比:Prometheus/InfluxDB/Thanos/VM VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 写入吞吐/查询延迟/内存占用的数学模型 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 模块依赖图——从 import 语句看组件关系 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— Goroutine 池/atomic/零拷贝/sync.Pool VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 多租户架构——accountID/projectID 与 tenant 隔离 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 版本演进:1.146.0 LTS 重大更新解析 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 整体数据流:一条监控数据的完整生命周期 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 架构演进:从 TSDB 到 MergeSet 的设计取舍 VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— Single-Node vs Cluster 模式本质区别 VictoriaMetrics 1.146.0 源码【左扬精讲】—— 开篇总览 Rust 专题【左扬精讲】—— 从语法到灵魂:Ownership、Borrowing 与多语言对比 kubernetes 源码【左扬精讲】—— kube-scheduler 启动流程源码分析 Rust 专题【左扬精讲】—— 选择控制语句、运算符与格式化输出 Rust 专题【左扬精讲】—— 所有权详解 Rust 专题【左扬精讲】—— 作用域详解 Rust 专题【左扬精讲】—— 变量、常量与标量数据类型 kubernetes 源码 / Operator 专题【左扬精讲】—— Deployment Controller 源码分析:从对象创建到滚动更新 kubernetes 源码 / Operator 专题【左扬精讲】—— Operator 开发中的 Webhook:从准入控制到生产部署 Kubernetes源码 / Operator 专题【左扬精讲】—— 实现 Application Controller:从零构建生产级控制器 Kubernetes 编程 / Operator 专题【左扬精讲】—— 定义 Application 资源 + 添加自定义新 API 完整指南 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 八):内部架构与核心组件 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 八): —— 从入口到调度的全链路源码剖析(k8s v1.36.1) DeepSeek-R1 多模态 R1 / VLM-GRPO【左扬精讲】—— Qwen2-VL 微调与视觉推理强化学习实战 DeepSeek-R1 工业 RAG + 微调混合系统【左扬精讲】—— R1 系列收官之作:从 Prompt → RAG → 微调 选型决策树 DeepSeek-R1 推理时扩展【左扬精讲】—— o1 / R1 慢思考机制:Self-Consistency + ToT + PRM 详解 DeepSeek-R1 端侧 LLM 工程【左扬精讲】—— llama.cpp 调参与 Apple Silicon / 国产 NPU / Android 端侧落地全攻略 DeepSeek-R1 vLLM + k8s 生产部署【左扬精讲】—— 从单卡 7B 到 100 卡 671B MoE 集群的工业化部署实战 DeepSeek-R1 评估与系统(Evaluation & Systems)【左扬精讲】—— 从 GSM8K/MMLU 到 LLM-as-Judge 的工业级评估方法论 DeepSeek-R1 模型训练与算法【左扬精讲】—— GRPO 进阶算法:DAPO / PRIME / RLVR / PRM 四大 2025 前沿改进 DeepSeek-R1 模型训练与算法【左扬精讲】—— 数据蒸馏:用 DeepSeek-R1-671B 生成 800K 高质量 CoT 样本的完整流水线 DeepSeek-R1 优化与微调实战【左扬精讲】—— 从 R1 强化学习新范式到 GRPO 微调一站式入门 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 七):自定义插件开发实战 —— 手写一个 Score 插件并注册到集群 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 六):Scheduler Profile 与多调度器 —— 如何配置多个 profile 实现多租户、Coordinated LeaderElection Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 五):SchedulingQueue 与 QueueingHint —— 三段队列的细节、v1.36 新引入的 QueueingHint 工作机制 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 四):抢占(Preemption)算法剖析 —— DefaultPreemption 如何选 victim、PodDisruptionBudget 如何约束 Kubernetes 源码【左扬精讲】—— kube-scheduler(调度专题 · 二):内置插件逐个精读 — NodeResourcesFit / NodeAffinity / TaintToleration / PodTopologySpread / VolumeBinding / InterPodAffinity Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):调度器内置插件 逐个精读 k8s 源码级精讲(二十六):调度器内置插件逐个精读 Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):调度器内置插件精读 — NodeResourcesFit / NodeAffinity / TaintToleration / PodTopologySpread / VolumeBinding / InterPodAffinity Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):Scheduling Framework 扩展点逐个源码拆解 Kubernetes 源码 / Operator 专题【左扬精讲】——kube-scheduler(调度专题):初识调度模型、内部架构与事件驱动机制 Kubernetes 编程 / client-go 专题【左扬精讲】—— 四种客户端:为什么、怎么选、怎么用 Kubernetes 编程 / Operator 专题【左扬精讲】—— controller-runtime、kubebuilder、operator-sdk 三大框架深度对比 Kubernetes 编程 / Operator 专题【左扬精讲】—— 深入理解 ManagedFields 字段冲突协调机制 Kubernetes 编程 / Operator 专题【左扬精讲】—— k8s Finalizers 深度解析:对象的生命周期与删除控制 Kubernetes 编程 / Operator 专题【左扬精讲】—— OwnerReference 字段与级联删除机制 Kubernetes 编程 / Operator 专题【左扬精讲】—— 深入学习 Server-Side Apply:managedFields 替代 last-applied-configuration 的演进方向 Kubernetes 编程 / Operator 专题【左扬精讲】—— k8s Annotations 与元数据体系(Operator 专题) Kubernetes 编程 / Operator 专题【左扬精讲】—— RESTMapper:把 Group / Version / Kind / Resource 四元组翻译成 REST 路径的"查字典"大师 Kubernetes 编程 / Operator 专题【左扬精讲】—— Converter 资源版本转换器 Kubernetes 编程 / Operator 专题【左扬精讲】—— Application 业务扩展:从单 Deployment 到多 Workload 的复合 Operator 演进 Kubernetes 编程 / Operator 专题【左扬精讲】—— OwnerReference / Finalizer / 准入控制:k8s 资源生命周期的三大支柱 Kubernetes 编程 / Operator 专题【左扬精讲】—— controller-runtime 框架内幕:从 Manager 到 Reconcile 的全栈拆解 Kubernetes 编程 / Operator 专题【左扬精讲】—— 生产级 Operator 最佳实践:并发安全、资源清理与高可用设计 Kubernetes 编程 / Operator 专题【左扬精讲】—— application-operator Reconcile 循环源码精讲:从 client-go Informer 到 workqueue 的全链路解剖 Kubernetes 编程 / Operator 专题【左扬精讲】—— 从零搭建一个 application-operator 新项目:脚手架、API 设计与基于原生 DeploymentStatus/ServiceStatus 的状态建模 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:生产级 Controller 实践:并发安全、资源清理与高可用设计 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析: Controller 调试与诊断工具:从日志分析到问题定位 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:DynamicClient 操作 CRD:无需代码生成的动态操作 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:控制器与 APIServer 完整交互流程:从 Watch 到缓存同步 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:错误处理与重试机制:WorkQueue 限速器详解 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Leader 选举机制:高可用控制器的必备技能 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Controller 开发模式完整实战 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:SharedInformerFactory 与等待缓存同步 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:从认证配置到 Deployment 操作 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:版本对应、架构组件与组件关系 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Informer 源码深度解析:从底层原理到实战应用 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Reflector 源码深度解析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:ListWatcher 源码深度解析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:Indexer 与 ThreadSafeStore 核心原理与源码深度剖析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:DeltaFIFO 核心原理与源码深度剖析 Kubernetes 编程 / Operator 专题【左扬精讲】—— Client-go 源代码分析:workqueue 核心原理与实战 Kubernetes 编程 / Operator 专题【左扬精讲】—— runtime.Codec 资源编解码:serializer 与 codec 差异、编解码数据结构、codec 核心调用链路 Kubernetes 编程 / Operator 专题【左扬精讲】—— Scheme 资源注册机制全解 Kubernetes 编程 / Operator 专题【左扬精讲】—— Kubernetes 自定义资源的内部版本与外部版本:从源码看版本定义机制 Kubernetes 编程 / Operator 专题【左扬精讲】—— Kubernetes 1.36.1 核心 API 数据结构全解 Kubernetes 编程 / Operator 专题【左扬精讲】—— Kubernetes 构建过程 【AIOPS】一文读懂LLM【左扬精讲】:从诞生到普及,解锁大语言模型的核心密码 【AIOPS】AI Agent 专题【左扬精讲】核心功能篇:MCP-VictoriaMetrics Hooks 源码精讲:Hooks 可观测性的无侵入式实现 【AIOPS】AI Agent 专题【左扬精讲】核心功能篇:MCP-VictoriaMetrics Golang 配置解析源码精讲 ——SRE 自定义 Agent 核心技巧 【AIOPS】AI Agent 专题【左扬精讲】核心功能篇:MCP-VictoriaMetrics Golang 并发模型解析 ——SRE 应对高并发采集的调优思路 【AIOPS】AI Agent 专题【左扬精讲】基础架构篇:MCP-VictoriaMetrics Golang 源码整体架构拆解 ——SRE 必懂的核心模块与数据流 OpenTelemetry 开发实战【左扬精讲】—— 云原生可观测体系构建与分布式追踪二次开发 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 7 —— 基于流量预测模型的智能弹性扩缩容 Operator 实战(AIOps 模型训练与智能扩容(下篇)—— 预测式弹性扩缩容 Operator 落地实现) Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 7 —— 基于流量预测模型的智能弹性扩缩容 Operator 实战(AIOps 模型训练与智能扩容(上篇)—— 时序预测模型构建与离线训练) Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 6 —— 基于运维专家知识库的智能故障诊断与排查 Operator 实战 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 5 —— 基于大语言模型(LLM)的实时日志流智能监测 Operator 实现 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 4 —— 基于 Operator 实现大模型私有化部署与管理 Kubernetes 编程 / Operator 专题【左扬精讲】—— Operator 开发实战项目 3(上篇)—— 面向 AI / 算力调度场景:GPU 竞价实例资源池统一调度管理 Operator 开发 Kubernetes编程 / Operator专题【左扬精讲】—— Operator 开发实战项目 2 —— 面向零售 / 电商潮汐流量难题:多云多集群数据中心级全链路弹性伸缩 DataCenter Scaler Operator 从 0 到 1 全链路开发 Kubernetes编程 / Operator专题【左扬精讲】—— 深入理解Kubebuilder注解:为什么Operator开发离不开这些特殊注释 Kubernetes编程 / Operator专题【左扬精讲】—— Operator 开发实战项目1 —— Applicaion Operator(通用应用生命周期管理 Operator 实战) Pod 镜像拉取失败?kubectl edit pods修改镜像地址的底层原理与实操 (该方法仅为临时应急方案,并非长期解决方案) Kubernetes编程/Operator专题精讲—— 理解控制器模式 —— 控制器模式的核心原理与实现逻辑(从原理到实践) 【AIOPS】AI Agent 专题【左扬精讲】模型微调实战:一站式平台 LLaMA-Factory 【AIOPS】AI Agent 专题【左扬精讲】基于 k8s+vLLM+Ray 分布式部署全指南:架构设计、资源调度与性能优化 【AIOPS】AI Agent专题【左扬精讲】非量化版DeepSeek分布式部署全指南:精度保障、显存规划与Ollama/vLLM选型 【AIOPS】AI Agent 专题【左扬精讲】零开发框架实现 ReAct Agent(Go SRE友好)
VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 开源生态:VM 在 CNCF 生态中的位置
左扬 · 2026-07-01 · via 博客园 - 左扬

VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 开源生态:VM 在 CNCF 生态中的位置

当我们在 Kubernetes 集群中部署监控系统时,整个可观测性生态就像一座运转精密的工厂:Prometheus 负责采集数据,Grafana 负责可视化,VictoriaMetrics 负责存储,CNI 插件负责网络——每个组件各司其职,共同支撑起云原生监控的大厦。

读完本篇,你应该能回答:VictoriaMetrics 在 CNCF 生态中扮演什么角色?它与 Prometheus、Grafana、k8s 等核心项目如何协作?整个 VM 工具链家族各自承担什么职责?

VictoriaMetrics CNCF Prometheus Grafana Kubernetes OpenTelemetry Prometheus Operator vmagent Helm 可观测性

学习重点

  • 必须掌握:CNCF 可观测性全景图、VM 工具链矩阵、Prometheus 协议兼容性
  • 需要理解:各集成方案的适用场景、Helm Chart 架构、Prometheus Operator CRD

一、从 CNCF 全景图看 VM 的生态位

思考记忆提示理解 CNCF 生态中各项目的定位关系

  • 关联前面章节:#10 中四大 TSDB 在生态中的位置
  • 关联工具链:vmagent / vmalert / vmauth / vmbackup 各司其职
  • 面试/考试高频提问:VictoriaMetrics 和 Prometheus 是什么关系?它属于 CNCF 哪个层次?

CNCF(Cloud Native Computing Foundation,云原生计算基金会)是 Linux Foundation 旗下的非营利组织,负责维护和推广云原生领域的开源软件。截至 2026 年,CNCF 托管了超过 170 个项目,涵盖容器编排、服务网格、可观测性、存储、网络等各个领域。

VictoriaMetrics 于 2023 年 9 月以 Sandbox(沙箱)级别加入 CNCF,是可观测性领域中增长最快的时序数据库项目之一。在 CNCF 的项目成熟度体系中,Sandbox 是第一级,之上还有 Incubating(孵化)和 Graduated(毕业)两级。

我理解源码的意思是说

可以把 CNCF 想象成一个大型开放式厨房美食广场——Prometheus 是广场中央的主厨台(最早入驻,最多人用),而 VictoriaMetrics 是主厨台旁边新建的一个超级省电冰箱:它不替代主厨台(Prometheus),但可以让整个后厨(监控系统)存储更多食材(时序数据)、消耗更少电费(内存)。

具体类比如下:

  • Prometheus = 主厨台(毕业项目):CNCF 最早毕业的可观测性项目,Grafana 原生支持,全球最广泛使用的监控系统。优点是简单成熟,缺点是单机存储有限。省电冰箱(VM)作为侧柜放在旁边,不替代主厨台,但扩展了存储能力。
  • VictoriaMetrics = 超级省电冰箱(沙箱项目):容量比主厨台大 10 倍,耗电只有 1/7,但它本身没有烹饪功能(无 Web UI、内置告警)。放在主厨台旁边,把热食材(热点数据)放主厨台上,冷食材(历史数据)放冰箱里。
  • Grafana = 展示大屏:不做饭,只展示美食。Grafana 同时连接主厨台和冰箱,两边的数据都可以展示。对使用者来说,切换数据源就像换了个展示画面,背后的厨房(数据流)完全透明。

1.1 CNCF 可观测性三要素与 VM 的对应关系

CNCF 可观测性体系围绕三大支柱构建:Metrics(指标)Logs(日志)Traces(链路)。VictoriaMetrics 的定位非常清晰——专注于 Metrics(指标)存储,同时通过 VictoriaLogs 向日志领域延伸。

CNCF 可观测性生态全景
│
├── 【Metrics 指标】— VictoriaMetrics 主战场
│   ├── Prometheus(毕业)— 采集层 + 查询语言
│   ├── VictoriaMetrics(沙箱)— 存储层 / Prometheus 后端
│   ├── Thanos(孵化)— Prometheus 扩展 / 长期存储
│   └── Grafana(毕业)— 可视化层
│
├── 【Logs 日志】— VictoriaMetrics 扩展方向
│   ├── Loki(毕业)— Grafana 主导的日志系统
│   └── VictoriaLogs(沙箱)— VM 家的日志产品
│
└── 【Traces 链路】— VM 间接支持
    ├── Jaeger(毕业)
    ├── Zipkin(毕业)
    └── OpenTelemetry(毕业)— 统一采集标准

设计精髓

VictoriaMetrics 在 CNCF 生态中的战略定位非常务实:不做全能选手,而是在 Metrics 领域做到极致。它通过兼容 Prometheus 协议,以"替换存储层"的姿态切入生态,最大化复用已有工具(Grafana、Alertmanager),降低用户迁移成本。这是典型的"农村包围城市"策略。

必记闭环逻辑(核心考点)

VictoriaMetrics 以"Prometheus 兼容存储后端"的姿态加入 CNCF 沙箱,不替代 Prometheus,而是扩展其存储和查询能力。VM 的生态位是Metrics 存储层的性能增强器——复用 Prometheus 的采集生态,Grafana 的展示生态,自己专注于"存得更多、查得更快、耗得更少"。

二、Prometheus 生态:VM 的核心集成

思考记忆提示Prometheus 是 VM 的入口,VM 是 Prometheus 的扩展

  • 关联前面章节:#02 全局架构中 Single-Node / Cluster 模式
  • 关联工具链:vmagent 作为 Prometheus-side 抓取代理
  • 面试/考试高频提问:VM 和 Prometheus 是什么关系?数据怎么从 Prometheus 流入 VM?

2.1 协议层面的完整兼容

VictoriaMetrics 对 Prometheus 生态的集成,首先体现在协议层面的完整兼容。Prometheus 定义了三个核心协议,VM 全部支持:

  • Remote Write(写入):Prometheus 将采集的指标数据通过 Remote Write 协议推送到远端存储。VM 完全兼容此协议,Prometheus 配置一个 remote_write 指向 VM 即可。
  • PromQL(查询):VictoriaMetrics 不仅兼容 PromQL,还扩展出了 MetricsQL。这意味着所有 Grafana Dashboard 无需修改,直接查询 VM 的数据。
  • Prometheus API(/api/v1/*):VM 实现了 Prometheus 的全部 HTTP API 端点,Grafana Explore 面板无需任何适配即可使用。

小贴士

Remote Write 是 Prometheus 最核心的数据导出机制。相比于 Prometheus 的 Federation 联邦模式(查询时拉取数据),Remote Write 是推送模式——Prometheus 本地只做采集,数据实时推送到 VM,好处是不占用 Prometheus 本地存储空间。

2.2 数据流向全解析

Prometheus → VictoriaMetrics 数据流(Remote Write 模式)
════════════════════════════════════════════════════════

  ┌──────────────┐
  │  Prometheus  │  ← 采集 k8s / 虚机 / 应用 metrics
  │  (抓取代理)   │
  └──────┬───────┘
         │  remote_write
         │  HTTP POST /api/v1/write
         ▼
  ┌──────────────┐
  │ VictoriaMetrics│  ← Single-Node 或 Cluster
  │   (存储层)    │     vminsert → vmstorage
  └──────┬───────┘
         │  PromQL / /api/v1/*
         ▼
  ┌──────────────┐
  │   Grafana    │  ← 可视化 Dashboard
  │  (展示层)    │
  └──────────────┘

这条数据流的特点是零迁移成本:已有的 Prometheus 配置文件、Grafana Dashboard、Alertmanager 告警规则全部可以复用。唯一的改动是增加一行 remote_write 配置。

2.3 vmagent:轻量级 Prometheus-side 采集代理

除了接收 Prometheus 推送的数据,VictoriaMetrics 还提供了自己的采集代理 vmagent。vmagent 可以完全替代 Prometheus 的抓取功能,并且支持将数据同时发送给多个目的地:

  • 推送到 VictoriaMetrics(原生)
  • 推送到 Prometheus(兼容 Remote Write)
  • 推送到其他支持 Remote Write 的存储(如 Thanos)

我理解源码的意思是说

vmagent 和 Prometheus 的关系,可以类比为快递小哥的两种工作模式

具体类比如下:

  • Prometheus = 自营快递员:自己抓取(取货),自己存储(送货到仓库),自己管理自己。好处是简单,坏处是仓库(磁盘)空间有限,送货范围受限。
  • vmagent = 外包快递员:只负责抓取(取货),然后把所有快递(metrics 数据)打包推送到 VictoriaMetrics 这个超级分拣中心(仓库)。vmagent 本身不存储数据,所以内存占用极小(比 Prometheus 轻量得多)。

vmagent 支持同时发送给多个目的地——就像快递小哥同时为多家电商平台取货送货,一个 agent 服务多个存储后端。

必记闭环逻辑(核心考点)

VictoriaMetrics 与 Prometheus 的集成以"Remote Write 协议"为桥梁,实现了数据流向的解耦:Prometheus/vmagent 负责采集,VM 负责存储和查询,Grafana 负责展示。三者各司其职,组成一个零迁移成本的可观测性栈。

三、Kubernetes 生态:Operator 与 Helm 部署

思考记忆提示k8s 是 VM 最主流的部署环境

  • 关联前面章节:#02 Single-Node / Cluster 部署架构
  • 关联工具链:vmagent / vmalert 在 k8s 中的配置方式
  • 面试/考试高频提问:如何在 k8s 中高可用部署 VictoriaMetrics?

3.1 VictoriaMetrics Operator

VictoriaMetrics Operator(vmoperator)是 VM 官方维护的 Kubernetes Operator,用于以声明式方式管理 VM 集群的所有组件。它本质上是 Prometheus Operator 的"维多利亚版本",遵循相同的 CRD 设计理念:

  • VMOperator:管理 VM 集群生命周期
  • VMSingle:声明式管理 Single-Node 部署
  • VMCluster:声明式管理 Cluster 模式部署
  • VMAgent:声明式管理 vmagent 部署
  • VMAlert:声明式管理 vmalert 部署
  • VMAuth:声明式管理 vmauth 部署

小贴士

如果你已经在使用 Prometheus Operator,想迁移到 VM,不需要删除现有的 Prometheus Operator。可以在同一集群中并行部署 VictoriaMetrics Operator,逐步将数据流切换到 VM,实现平滑过渡。

3.2 Helm Chart 部署

对于不需要 Operator 复杂度的场景,官方 Helm Chart 提供了最简洁的部署方式:

# 添加 Helm 仓库
helm repo add vm https://victoriametrics.github.io/helm-charts/
helm repo update

# 部署 Single-Node
helm install vm vm/victoria-metrics-single \
  --namespace monitoring \
  --create-namespace

# 部署 Cluster 模式
helm install vm vm/victoria-metrics-cluster \
  --namespace monitoring \
  --set insert.capacity=3 \
  --set storage.capacity=50Gi

Helm Chart 的优势是配置灵活:通过 values.yaml 可以控制副本数、资源限制、持久化存储、服务类型等所有参数。

3.3 高可用部署架构

在生产环境中,VictoriaMetrics 推荐以下 k8s 高可用部署架构:

k8s 高可用部署架构
══════════════════════════════════════════════════════
┌─────────────────────────────────────────────────┐
│              monitoring namespace                 │
│                                                  │
│  ┌──────────┐   remote_write    ┌───────────┐  │
│  │ Prometheus│ ──────────────────▶│ VMCluster │  │
│  │ Operator  │                   │           │  │
│  └──────────┘                    │ ┌───────┐ │  │
│                                   │ │vminsert│ │  │
│  ┌──────────┐                    │ └───┬───┘ │  │
│  │  vmagent │ ──────────────────▶│ ┌───┴───┐ │  │
│  └──────────┘                    │ │vmstorage│ │  │
│                                   │ └───┬───┘ │  │
│  ┌──────────┐                    │ ┌───┴───┐ │  │
│  │  vmalert │ ◀─── alerts ──────│ │vmstorage│ │  │
│  └──────────┘                    │ └───┬───┘ │  │
│                                   │ ┌───┴───┐ │  │
│  ┌──────────┐                    │ │vmselect│ │  │
│  │  vmauth  │ ◀─── queries ─────│ └───────┘ │  │
│  └──────────┘                    └───────────┘  │
│                                                  │
│  ┌──────────┐   ┌──────────┐   ┌──────────┐    │
│  │  Grafana │   │Alertmanager│  │  其他    │    │
│  │(Dashboard)│   │ (通知)   │   │ 数据源   │    │
│  └──────────┘   └──────────┘   └──────────┘    │
└─────────────────────────────────────────────────┘

注意

Cluster 模式下,vminsert、vmstorage、vmselect 三个组件各自独立部署。vmstorage 之间通过一致性哈希分片存储数据,任意一个 vmstorage 节点故障只会影响部分数据,不会导致全量不可用。建议 vmstorage 至少部署 2 个副本以保证高可用。

必记闭环逻辑(核心考点)

k8s 是 VictoriaMetrics 最重要的部署环境。VictoriaMetrics Operator 通过 CRD 实现了声明式管理,Helm Chart 提供了快速部署能力。高可用部署推荐使用 Cluster 模式:vminsert 接收写入、vmstorage 分片存储、vmselect 处理查询,三者通过 Kubernetes Service 进行内部通信。

四、Grafana 生态:无缝集成

思考记忆提示Grafana 是 VM 数据的主要展示渠道

  • 关联前面章节:#02 中 vmui 内置 UI 与 Grafana 的关系
  • 关联工具链:vmui 作为轻量级替代 Grafana 的选择
  • 面试/考试高频提问:Grafana 如何连接 VictoriaMetrics?

Grafana 是 CNCF 毕业的可视化项目,也是 VictoriaMetrics 最重要的展示层集成。

4.1 数据源配置

在 Grafana 中添加 VictoriaMetrics 数据源非常简单,只需配置 HTTP URL:

{
  "name": "VictoriaMetrics",
  "type": "prometheus",
  "url": "http://victorial-metrics-cluster.monitoring.svc:8428",
  "access": "proxy",
  "jsonData": {
    "timeInterval": "15s"
  }
}

关键点:Grafana 的 Prometheus 数据源类型完全兼容 VictoriaMetrics,不需要安装额外的 Grafana 插件。这是因为 VictoriaMetrics 实现了 Prometheus HTTP API 的全部端点。

4.2 vmui 内置 UI

VictoriaMetrics 自带了内置的 Web UI(vmui),位于 /vmui 路径。vmui 提供以下核心功能:

  • Graph 面板:类似 Grafana 的简单可视化
  • PromQL 查询:在线输入 PromQL 并查看结果
  • Series 探索:浏览当前存储的 metric 列表
  • VictoriaLogs 入口:从指标直接跳转查看关联日志

小贴士

vmui 是轻量级工具,适合快速调试和排查问题。生产环境仍然推荐使用 Grafana,因为 Grafana 拥有更丰富的图表类型、Dashboard 模板和告警功能。vmui 和 Grafana 可以并行使用,互不冲突。

必记闭环逻辑(核心考点)

Grafana 对 VictoriaMetrics 的支持是开箱即用的:选择 Prometheus 数据源类型,填入 VM 的 HTTP URL 即可。这是因为 VM 完整实现了 Prometheus API 的所有端点,Grafana 根本无法区分它是在查询 Prometheus 还是 VictoriaMetrics。

五、OpenTelemetry 生态:现代采集标准

思考记忆提示OTel 是未来采集方向,VM 已全面支持

  • 关联前面章节:#04 数据流生命周期中协议接入层
  • 关联工具链:vmagent 支持 OTLP 协议接入
  • 面试/考试高频提问:VictoriaMetrics 如何接收 OpenTelemetry 数据?

OpenTelemetry(OTel)是 CNCF 毕业项目,旨在统一 Metrics、Logs、Traces 的采集标准。VictoriaMetrics 通过以下两种方式接入 OTel 生态:

5.1 vmagent 接收 OTLP

vmagent 支持接收 OpenTelemetry Pipeline(OTLP)协议的数据:

# vmagent 配置:监听 OTLP gRPC 端口
# 端口 4317 = OTel Collector gRPC
# 端口 4318 = OTel Collector HTTP
remote_write:
  - url: http://victoria-metrics:8428/api/v1/write
    remote_timeout: 30s

# OTLP 接收配置
otlp_config:
  listen_addr: ":4317"   # gRPC
  # http_listen_addr: ":4318"  # HTTP

这意味着应用程序通过 OTel SDK 采集的 metrics 数据,可以直接通过 OTel Collector → vmagent → VictoriaMetrics 的路径存储。

5.2 OpenTelemetry 与 Prometheus 的融合

OTel 的一个核心设计理念是"指标先行"(Metrics First)。VictoriaMetrics 的 OTLP 接收能力,让它可以同时服务于传统 Prometheus 采集(Prometheus 推送或拉取)和现代 OTel 采集两种模式:

  • 遗留系统:继续使用 Prometheus_exporter + vmagent/Prometheus remote_write
  • 新系统:使用 OTel SDK + OTel Collector + vmagent (OTLP)
  • 统一存储:所有数据都流入 VictoriaMetrics

我理解源码的意思是说

OTel 和 Prometheus 的关系,可以类比为新一代高速公路和普通公路

具体类比如下:

  • Prometheus = 普通公路:收费站在出口处收费(数据在 Prometheus 存储)。优点是成熟稳定,缺点是标准私有(Remote Write 是 Prometheus 自创的)。
  • OpenTelemetry = 高速公路:全国统一标准,任何车(应用)都可以上高速(OTLP 协议)。VictoriaMetrics 在高速入口处设了一个服务区(OTLP 接收器),不管是哪种车(指标数据),都可以停靠休息(存储)。
  • 关键点:VM 同时服务两套公路系统,不强制用户换高速——这是 VM 兼容策略的精髓。

必记闭环逻辑(核心考点)

VictoriaMetrics 通过 vmagent 的 OTLP 接收能力,无缝接入 OpenTelemetry 生态。这让 VM 同时支持传统 Prometheus 采集(Remote Write)和现代 OTel 采集(OTLP)两种模式,用户可以根据系统现状灵活选择,无需强制迁移。

六、VictoriaMetrics 工具链全家福

思考记忆提示VM 不只是一个数据库,是一个完整的可观测性平台

  • 关联前面章节:#02 全局架构中 app/ 目录下的三大进程
  • 关联工具链:每个工具对应一个特定场景
  • 面试/考试高频提问:vmalert 和 Alertmanager 有什么关系?

VictoriaMetrics 工具链包含多个独立二进制,各自解决监控系统的不同环节:

工具职责对应 Prometheus 生态源码位置
vmagent 轻量级指标采集代理 Prometheus(抓取部分) app/vmagent/
vmalert 告警和录制规则执行 Prometheus Alertmanager app/vmalert/
vmauth 认证和负载均衡代理 nginx / Ambassador app/vmauth/
vmbackup 快照备份到云存储 Thanos Store-Gateway app/vmbackup/
vmrestore 从备份恢复数据 Thanos Sidecar app/vmrestore/
vmctl 多源数据迁移工具 无直接对应 app/vmctl/
vmgateway API 网关(认证/限流) kong / Auth0 app/vmgateway/
vmui 内置 Web 可视化 UI Grafana(轻量替代) app/vmui/

6.1 vmalert vs Alertmanager

这里需要澄清一个常见混淆:vmalert 和 Alertmanager 是两个不同的东西,功能上互补但不重叠:

  • Alertmanager(Prometheus 生态):负责告警通知——分组、抑制、静默、发送邮件/Slack/Webhook。
  • vmalert(VictoriaMetrics 生态):负责告警评估——执行 PromQL 查询判断是否触发告警,然后将触发的告警发送给 Alertmanager。

关系是:vmalert 执行告警规则 → 触发告警 → 发送给 Alertmanager → Alertmanager 通知

设计精髓

VictoriaMetrics 工具链的设计哲学是"专注分工、REST 协作":每个工具都是独立进程,通过标准 HTTP API 通信。这与 Prometheus Operator 的设计理念一致——用 Kubernetes 的声明式管理来组合分散的组件,形成一个有机的整体。

6.2 数据迁移:vmctl 的多源支持

vmctl 是 VictoriaMetrics 提供的数据迁移工具,支持从以下系统迁移数据到 VM:

  • Prometheus:读取 TSDB 快照格式
  • Thanos:读取 Prometheus TSDB Block 格式
  • InfluxDB:InfluxQL 查询结果迁移
  • OpenTSDB:OpenTSDB 格式数据
  • DataDog:DataDog API 数据导出
# 从 Prometheus 迁移到 VictoriaMetrics
vmctl prometheus \
  --prometheus snapshots-dir=/path/to/snapshots \
  --vm-addr=http://localhost:8428 \
  --prom-concurrency=5

必记闭环逻辑(核心考点)

VictoriaMetrics 工具链围绕"采集→存储→查询→告警→备份"全链路构建,每个工具独立部署、以 HTTP API 协作。vmalert 负责告警评估(执行 PromQL),Alertmanager 负责告警通知(发送消息),两者是上下游关系而非替代关系。

七、FAQ:20 组高频问答

思考记忆提示FAQ 是全篇的"临考前速背"模块,涵盖生态集成的所有高频问题

  • Q1-Q5 围绕 CNCF 生态定位:项目成熟度、Prometheus 关系、OTel 集成
  • Q6-Q10 围绕 k8s 部署:Operator、Helm、高可用、存储类
  • Q11-Q15 围绕工具链:vmagent、vmalert、vmauth、vmbackup、vmctl
  • Q16-Q20 围绕 Grafana / 迁移 / 成本:数据源配置、迁移策略、竞品对比

Q1. VictoriaMetrics 在 CNCF 中处于什么成熟度?

VictoriaMetrics 于 2023 年 9 月以 Sandbox 级别加入 CNCF,是可观测性领域增长最快的沙箱项目之一。Sandbox 是 CNCF 成熟度的第一级,之上还有 Incubating(孵化)和 Graduated(毕业)两级。Prometheus 是 Graduated 项目,Grafana 也是 Graduated 项目,Thanos 是 Incubating 项目。

Q2. VictoriaMetrics 和 Prometheus 是什么关系?

VictoriaMetrics 是 Prometheus 的存储后端,不是替代品。Prometheus 负责采集(抓取 targets)和部分查询,VictoriaMetrics 负责存储和大规模查询。两者通过 Remote Write 协议连接,Prometheus 推送数据,VM 接收并存储。

Q3. VM 支持 OpenTelemetry 吗?

支持,vmagent 内置 OTLP 接收器。应用程序通过 OTel SDK 采集的 metrics 数据,可以通过 OTel Collector → vmagent → VictoriaMetrics 的路径存储。同时 vmagent 也支持将 Prometheus 格式的数据通过 OTLP 转发给其他 OTel 后端。

Q4. Prometheus Operator 可以管理 VictoriaMetrics 吗?

不能直接管理,但可以并行部署 VictoriaMetrics Operator。Prometheus Operator 专门管理 Prometheus 实例。如果想在 k8s 中管理 VM 集群,应使用 VictoriaMetrics Operator(vmoperator),它提供了 VMCluster、VMSingle、VMAgent 等 CRD。

Q5. Thanos 和 VictoriaMetrics 可以一起使用吗?

可以,但通常不需要。Thanos 的 Sidecar 模式将 Prometheus 数据写入对象存储,VictoriaMetrics 有自己的存储引擎。如果已经部署了 Thanos,可以逐步将新数据流切换到 VM,同时保留 Thanos 作为历史数据的查询入口。

Q6. 在 k8s 中如何部署 Single-Node vs Cluster?

小规模用 Single-Node(一个 StatefulSet),大规模用 Cluster(三个独立 Deployment)。Single-Node 通过 Helm 一行命令部署,适合 100 万以内 series。Cluster 模式需要分别部署 vminsert、vmstorage、vmselect,适合 1000 万+ series 和高可用需求。

Q7. Helm Chart 部署 VM 需要哪些关键配置?

三个核心配置:存储大小(storage.capacity)、副本数(replicaCount)、资源限制(resources)。建议为 vmstorage 配置 PersistentVolumeClaim,使用本地 SSD 或云厂商的 io1/io2 类型存储以获得最佳性能。

Q8. 如何保证 VM 在 k8s 中的高可用?

Cluster 模式下,vmstorage 部署多个副本,数据按 tenant 分片分布。单个 vmstorage 节点故障只会影响部分分片,不影响全局查询。建议至少部署 2 个 vmstorage 副本,并配置 Kubernetes PodDisruptionBudget 防止同时重启。

Q9. VM 支持哪些持久化存储后端?

本地 SSD 是性能最优解,也支持 NFS/云存储作为降级方案。在 k8s 环境中,推荐使用 LocalPV(本地 SSD)配合 StorageClass 的方式。云厂商的 CSI 驱动(如 AWS EBS、GCP PD)也可以使用,但性能不如本地 SSD。

Q10. 如何从 Prometheus 迁移到 VictoriaMetrics?

三步走:1)配置 Prometheus remote_write 指向 VM;2)等待新数据流入 VM;3)使用 vmctl 迁移历史数据。期间 Grafana 数据源切换到 VM,Grafana Dashboard 无需修改。整个过程可以热操作,不需要停机。

Q11. vmagent 和 Prometheus 相比有什么优势?

vmagent 更轻量、更灵活、内存占用更小。vmagent 本身不存储数据,只负责采集和转发,内存占用通常只有 Prometheus 的 1/5。同时 vmagent 支持将数据同时推送给多个目的地(multi-remote_write),这是 Prometheus 不支持的功能。

Q12. vmalert 和 Alertmanager 有什么区别?

vmalert 负责告警评估(执行 PromQL),Alertmanager 负责告警通知(发送消息)。两者是上下游关系:vmalert 执行告警规则判断是否触发,触发了就发给 Alertmanager,Alertmanager 再做分组、抑制、静默处理后通知用户。

Q13. vmauth 是什么?和 nginx 有什么区别?

vmauth 是专门为 VictoriaMetrics 设计的认证代理,支持 API Key/JWT 认证和基于 tenant 的路由。nginx 是通用反向代理,配置复杂但功能全面。vmauth 针对 VM 的多租户场景做了优化,开箱即用。

Q14. vmbackup 支持哪些云存储?

支持 S3/GCS/Azure Blob/MinIO 等所有 S3 兼容存储。vmbackup 通过快照硬链接实现增量备份(只备份新增的 Part 文件),支持按时间窗口恢复。备份过程不影响 VM 正常读写。

Q15. vmctl 迁移数据有速率限制吗?

有,vmctl 内置速率限制器,通过 --rate-limit 参数控制写入速度。默认不限制,生产环境建议设置 --rate-limit 避免压垮目标 VM。迁移大存量数据时,推荐分批次、限速进行。

Q16. Grafana 如何连接 VictoriaMetrics?

选择 Prometheus 数据源类型,URL 填入 VM 的 HTTP 地址即可。Grafana 原生支持 Prometheus API,VictoriaMetrics 完整实现了该 API,所以不需要安装任何插件。Grafana 甚至无法区分它在连接 Prometheus 还是 VictoriaMetrics。

Q17. VictoriaMetrics 相比 Thanos 的优势是什么?

VM 自研存储引擎(MergeSet),性能远优于 Thanos 的 Prometheus TSDB + 对象存储架构。Thanos 的优势是复用 Prometheus 配置,但查询性能受限于对象存储 IO。VM 将数据存储在本地 SSD,通过 MergeSet 引擎高效查询,在相同硬件下查询延迟通常只有 Thanos 的 1/10。

Q18. VictoriaMetrics 和 Prometheus Operator 的关系是什么?

Prometheus Operator 管理 Prometheus 实例,VictoriaMetrics Operator 管理 VM 实例,两者功能对标但各自独立。如果你的集群已经运行 Prometheus Operator,可以同时安装 VictoriaMetrics Operator,新部署的服务指向 VM,已有服务继续指向 Prometheus。

Q19. VM 有内置的告警功能吗?

VM 本身不内置告警引擎,告警功能由 vmalert 提供。vmalert 执行 PromQL 查询,根据结果判断是否触发告警,然后发送给 Alertmanager 或其他通知渠道(如 Slack、邮件、Webhook)。

Q20. VictoriaMetrics 的生态发展趋势如何?

快速增长:2024 年 GitHub stars 突破 15k,被 Spotify、Roblox、Grammarly 等大厂采用,CNCF 沙箱项目身份加速生态影响力。未来方向包括 VictoriaLogs 日志集成、更深度的 OTel 支持、企业版特性下放,以及 Multi-tenant 隔离增强。

全篇必记总纲

VictoriaMetrics 在 CNCF 生态中的定位是Prometheus 的高性能存储后端:通过 Remote Write 协议接收 Prometheus/vmagent 的数据,通过 Prometheus API 向 Grafana 提供查询服务。在 k8s 环境中,通过 VictoriaMetrics Operator 或 Helm Chart 部署。工具链围绕"采集→存储→查询→告警→备份"全链路构建,vmagent 采集、VM 存储、vmalert 告警、vmbackup 备份,各司其职、以 HTTP API 协作。

八、Roadmap:后续预告

本篇覆盖了 VictoriaMetrics 在 CNCF 生态中的位置和集成方案,后续将深入各个专题:

  • #12 源码阅读路线图:如何高效阅读 VM 源码——最佳实践
  • #13 VictoriaLogs 协同:Metrics 到 Logs 的一体化监控——日志专题
  • #14 Enterprise vs OpenSource:关键功能差异——版本选择指南
  • #71 vmagent 架构:Prometheus-side 轻量级抓取代理——工具链专题
  • #92 Kubernetes Operator:VictoriaMetrics Operator 深度集成——k8s 专题

本文参考与源码链接:
  • VictoriaMetrics 官方文档
  • CNCF 项目全景
  • Prometheus Remote Write 配置
  • Grafana Prometheus 数据源
  • VictoriaMetrics Operator 文档
  • OpenTelemetry 官方文档