【AIOPS】AI Agent 专题【左扬精讲】基础架构篇:MCP-VictoriaMetrics Golang 源码整体架构拆解 ——SRE 必懂的核心模块与数据流
https://github.com/VictoriaMetrics/mcp-victoriametrics/tree/v1.20.1
一、背景前沿
在 AIGC 技术深度融入可观测性体系的当下,VictoriaMetrics 凭借高性能、轻量化、易扩展的特性,已成为云原生场景下时序数据存储与分析的核心底座,但 大语言模型(LLM)/AI 工具与 VictoriaMetrics 高效协同的落地难题,成为可观测性能力升级的关键瓶颈:
一方面,原生 VictoriaMetrics 虽提供覆盖指标查询、标签分析、告警规则调试、基数统计、查询语句解析等全维度的只读 API,但这些 API 分散在不同端点,交互逻辑、参数规范、返回格式不统一,工程师手动对接已需大量适配工作,而面向 LLM/AI 工具时,这种“碎片化”特性更会导致模型无法精准理解 API 语义、难以自动化拼接有效请求,甚至因参数格式错误、接口逻辑不清晰,完全丧失与 VictoriaMetrics 交互的能力;
另一方面,LLM 交互依赖标准化的上下文协议与结构化的能力封装,原生 API 既无适配自然语言交互的设计,也缺乏内置的文档解释、能力索引能力,即便人工介入,也需反复查阅官方文档、调试 API 调用逻辑,极大降低了 AI 驱动的监控分析、故障排查效率。
为解决 LLM/AI 工具与 VictoriaMetrics 对接的核心痛点,VictoriaMetrics 生态推出了 Model Context Protocol(MCP)协议,并落地了 mcp-victoriametrics(下称 MCP-VM)v1.20.1 版本 —— 作为 VictoriaMetrics 专属的 MCP 服务器实现,其核心定位是为 LLM/AI 工具与 VictoriaMetrics 搭建标准化、可交互、易理解的协议层桥梁,彻底打通大模型与时序数据库的协同链路。
MCP-VM 针对 AI 交互的核心痛点提供了全方位解决方案:
- 能力统一封装:将 VictoriaMetrics 几乎所有只读 API(涵盖 VMUI 支持的全部功能:指标查询与可视化、标签 / 序列导出、告警规则测试、实例参数查看、查询语句解析与调试、重标记规则验证、数据基数分析等)封装为符合 MCP 协议的标准化接口,让 LLM 无需理解分散的 API 细节,只需通过统一协议即可调用全量监控分析能力;
- AI 友好的交互支撑:适配 LLM 的上下文交互范式,支持模型基于自然语言指令自动转化为合规的 VictoriaMetrics 操作(如将 分析近 24 小时 CPU 指标的基数异常 转化为对应的查询 API 调用),同时提供查询语句的解析、解释、美化能力,让模型能精准理解查询逻辑、定位问题;
- 离线文档与语义检索:内置最新的 VictoriaMetrics 全量离线文档,支持 LLM 无需联网即可检索接口说明、使用规范、故障排查指南,解决模型因信息缺失导致的交互失效问题;
- 一站式可观测性交互界面:提供可视化 UI 与 Streamable HTTP 模式,既支持工程师调试 AI 与 VictoriaMetrics 的交互逻辑,也为自动化工具提供统一的接入入口,实现与 VictoriaMetrics Cloud 的无缝集成。
简言之,MCP-VM 本质上是 VictoriaMetrics 面向 AI 时代的交互中间件—— 它将原本仅面向人工调用的监控能力,转化为 LLM/AI 工具可理解、可调用、可解释的标准化能力集,解锁了 自然语言查询监控指标、AI 自动调试告警规则、智能分析数据基数瓶颈 等高级自动化场景。
对于 SRE 而言,深入理解 MCP-VM v1.20.1 版本的 Golang 源码架构与数据流,是保障其与 VictoriaMetrics 集成稳定性、定制化扩展 AI 交互能力、充分释 大模型 + 可观测 协同价值的核心前提。本文将聚焦该版本,从源码层面拆解其整体架构、核心模块与数据流转逻辑。
二、MCP-VM 核心定位与版本特性
2.1、核心定位
MCP(Model Context Protocol,模型上下文协议)是面向 LLM/AI 工具与数据存储系统交互设计的标准化协议,其核心目标是让大模型能以统一、可理解的方式访问各类数据系统的能力与数据,而非解决跨监控体系的指标格式兼容问题。
而 MCP-VM 作为 MCP 协议在 VictoriaMetrics 生态的专属实现,是连接 LLM/AI Agent 与 VictoriaMetrics 实例的 翻译官 和 能力网关,核心职责可概括为三层:
- 协议适配层:接收 LLM/AI 工具基于 MCP 协议发起的交互请求,将其转化为 VictoriaMetrics 原生 API 调用,同时把原生 API 的返回结果标准化为 MCP 协议格式,反向输出给大模型,解决模型不懂 VictoriaMetrics 接口的核心问题;
- 能力抽象层:对 VictoriaMetrics 的只读能力进行抽象与封装,屏蔽底层 API 分散、格式不统一的细节,为 AI 工具提供 原子化 的监控操作能力(如 查询指标、解析 PromQL、分析基数 等),让模型只需关注业务意图,无需关注技术实现;
- AI 增强层:内置离线文档检索、PromQL 解释、交互提示词优化等 AI 友好能力,弥补大模型在 VictoriaMetrics 专业知识上的缺失,提升模型与 VictoriaMetrics 交互的准确性和效率。
2.2、v1.20.1 版本核心特性
https://github.com/VictoriaMetrics/mcp-victoriametrics/tree/v1.20.1 围绕让大模型更好地操作 VictoriaMetrics 这一核心,强化了多项 AI 适配能力:
-
-
- 全量只读能力覆盖:完整支持 VMUI 所有只读功能的 MCP 封装,包括指标查询、标签分析、告警规则测试、数据基数统计、重标记规则调试等,确保大模型能覆盖 VictoriaMetrics 日常运维的全场景需求;
- 离线文档语义检索:内置结构化的 VictoriaMetrics 官方文档,支持基于自然语言的语义检索(如模型提问 如何排查 VM 基数爆炸问题,可直接返回对应的离线文档片段),无需联网即可为模型提供专业知识支撑;
- PromQL 智能解析:新增 PromQL 语句的 解释 -> 美化 -> 纠错 能力,大模型可提交待分析的 PromQL,MCP-VM 会返回语句的逻辑说明、语法优化建议、潜在错误提示,帮助模型生成更精准的查询语句;
- Cloud 无缝集成:适配 VictoriaMetrics Cloud 版本的 API 特性,支持 AI 工具直接对接云环境中的 VM 实例,覆盖私有化部署与云原生场景;
- 调试友好的 UI 界面:提供内置 Web UI,工程师可模拟 LLM 发送 MCP 请求,调试交互逻辑、验证返回结果,降低 AI 集成场景的排障成本。
三、MCP-VM 源码整体架构
基于 mcp-victoriametrics 的源码目录结构(https://github.com/VictoriaMetrics/mcp-victoriametrics/tree/v1.20.1/cmd/mcp-victoriametrics),其整体架构可分为 核心驱动层、MCP 协议层、VM 能力适配层、AI 增强层、基础工具层 五大模块,各模块职责与核心文件对应关系如下:
3.1、核心驱动层:程序入口与生命周期管理
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/main.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/landing.go
-
- https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/main.go -> 作为程序入口,负责初始化配置、启动 HTTP 服务、注册 MCP 协议处理器、加载所有 VM 能力适配模块,是整个服务的启动器;
- https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/landing.go -> 提供内置 Web UI 的核心逻辑,实现 AI 交互调试界面的渲染、请求转发,支撑工程师可视化调试 MCP 与 VM 的交互过程。
3.2、MCP 协议层:标准化交互的核心
该层是 MCP-VM 对接 LLM 的核心,负责实现 MCP 协议的请求解析、响应封装、错误处理:
-
-
- 接收 LLM/AI Agent 发送的 MCP 格式请求(如 JSON 格式的 指标查询指令),解析出具体的操作意图(如 查询 cpu_usage 指标近 1 小时数据);
- 将解析后的意图传递给 VM 能力适配层,待获取结果后,按照 MCP 协议规范封装为标准化响应(包含数据、文档、解释等信息),返回给 AI 工具;
- 该层的核心价值是屏蔽 LLM 与 VM 之间的协议差异,让模型无需关注 VM 原生 API 的细节。
3.3、VM 能力适配层:对接 VictoriaMetrics 原生 API
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/access_tokens.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/active_queries.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/alerts.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/explain_query.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/metrics.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/ 目录层是 MCP-VM 的能力翻译器,每个文件对应一类 VictoriaMetrics 原生 API 的适配逻辑:
-
-
- explain_query.go:封装 PromQL 解析、解释、美化能力,为 AI 提供查询语句的智能分析支持;
- metrics.go/labels.go/labelvalues.go:适配指标、标签、标签值的查询 / 导出 API,实现 AI 对 VM 时序数据的基础访问;
- alerts.go:适配告警规则、告警状态的查询 / 测试 API,支持 AI 调试告警配置;
- downsampling_filters_debug.go/metric_relabel_debug.go:适配降采样、重标记规则的调试 API,满足 AI 对 VM 数据处理规则的分析需求;
- docs.go:对接内置离线文档,为 AI 提供文档检索的底层支撑。
3.4、AI 增强层:提升模型交互效果
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/prompts/documentation.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/prompts/rarely_used_cardinal_metrics.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/utils/utils.go
-
-
- prompts/ 目录:提供 AI 交互的提示词模板、离线文档结构化数据、冷门基数指标的解释逻辑,优化模型的交互意图理解。
- https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/prompts/documentation.go -> 管理离线文档的加载、检索、匹配逻辑,支持基于自然语言的文档查询;
- https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/prompts/rarely_used_cardinal_metrics.go -> 为 AI 提供冷门基数指标的解释,避免模型因指标认知不足导致的交互错误;
- utils/utils.go 文件:提供字符串处理、语义匹配、数据格式化等工具函数,支撑 AI 交互过程中的数据清洗、语义解析。
3.5、基础工具层:配置与通用能力
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/config/config.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/hooks/hooks.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/logging/logger.go
https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/logging/middleware.go
-
-
- config/:管理服务配置(如 VM 实例地址、端口、认证信息),支持配置文件 / 命令行参数加载,为 AI 对接不同 VM 实例提供灵活配置;
- hooks/:提供服务生命周期钩子(如启动前初始化、关闭前清理),保障服务稳定性;
- logging/:实现结构化日志,记录 AI 交互过程中的请求、响应、错误信息,方便 SRE 排查 AI 集成场景的问题。
四、MCP-VictoriaMetrics 核心数据流(AI 调用 VM 能力场景)
以 LLM 发送自然语言指令:"查询近 1 小时 k8s 集群 node_cpu_usage 指标的 95 分位值,并解释对应的 PromQL 语句”为例,拆解 MCP-VictoriaMetrics 的核心数据流:
4.1、步骤 1:MCP 请求接收与解析
LLM/AI Agent 将自然语言指令转化为 MCP 协议格式的请求(包含操作类型、参数、上下文),发送至 MCP-VictoriaMetrics 的 HTTP 服务端口;
MCP-VictoriaMetrics 的核心驱动层(main.go 注册的处理器)接收请求,交由 MCP 协议层解析,提取出核心意图:“查询 node_cpu_usage 指标(时间范围 1h,统计 95 分位)+ 解释 PromQL”。
4.2、步骤 2:VM 能力适配层调用原生 API
MCP 协议层 将解析后的意图转发至 VictoriaMetrics 能力适配层:
-
- 首先调用 https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/metrics.go 中的适配逻辑,拼接符合 VictoriaMetrics 要求的 PromQL 语句:quantile(0.95, node_cpu_usage[1h]),并调用 VictoriaMetrics 原生查询 API;
- 同时调用 https://github.com/VictoriaMetrics/mcp-victoriametrics/blob/v1.20.1/cmd/mcp-victoriametrics/tools/explain_query.go 中的逻辑,对生成的 PromQL 进行语法解析、逻辑解释,生成自然语言说明。
4.3、步骤 3:结果标准化与 AI 增强
-
- VictoriaMetrics 原生 API 返回指标数据后,VictoriaMetrics 能力适配层将原始数据格式化;
- AI 增强层(https://github.com/VictoriaMetrics/mcp-victoriametrics/tree/v1.20.1/cmd/mcp-victoriametrics/prompts + https://github.com/VictoriaMetrics/mcp-victoriametrics/tree/v1.20.1/cmd/mcp-victoriametrics/utils)补充 PromQL 解释、相关文档片段(如 quantile 函数的使用说明),形成完整的响应数据。
4.4、步骤 4:MCP 响应返回
-
- MCP 协议层将格式化后的指标数据、PromQL 解释、文档片段封装为 MCP 协议格式的响应,返回给 LLM/AI Agent;
- LLM 基于该响应,可进一步生成自然语言的分析结果(如 近 1 小时 k8s 集群 node_cpu_usage 95 分位值为 0.78,对应的 PromQL 语句通过 quantile 函数计算分位数,时间范围覆盖近 1 小时...)。
五、SRE 核心关注点与扩展建议
5.1、核心关注点
- 协议兼容性:MCP 协议版本与 LLM/AI Agent 的适配性,需确保 MCP-VictoriaMetrics 解析的请求格式与模型输出的格式一致;
- API 权限控制: MCP-VictoriaMetrics 对接 VictoriaMetrics 实例的认证信息(如 access_tokens.go 管理的令牌)需严格管控,避免 AI 工具越权访问 VictoraMetrics 数据;
- 交互性能:大量 AI 并发请求下,需监控 tools/ 目录下各适配模块的调用耗时,优化 PromQL 查询、文档检索的性能;
- 日志审计:通过 logging/ 模块记录 AI 交互的全链路日志,便于追溯模型误操作、数据异常等问题。
5.2、二次开发扩展建议
- 新增 AI 能力适配:若需支持 AI 调用 VictoriaMetrics 的写操作(如修改告警规则),可在 tools/ 目录新增适配文件,封装对应的写 API,并补充权限校验逻辑;
- 优化提示词模板:修改 prompts/ 目录下的提示词模板,适配企业内部的 VM 使用规范(如自定义指标命名规则),提升模型交互的精准度;
- 集成向量数据库:将离线文档接入向量数据库,增强语义检索的准确性,让模型能更精准地获取 VictoriaMetrics 专业知识;
- 多模型适配:扩展 MCP 协议层,支持对接不同厂商的 LLM(如 OpenAI、文心一言),适配不同模型的交互范式。
六、接下来
MCP-VictoriaMetrics v1.20.1 作为 VictoriaMetrics 面向 AI 时代的核心组件,其本质是通过 MCP 协议将 VictoriaMetrics 的监控能力转化为 LLM 可理解、可调用的标准化服务,解决了 大模型看不懂、用不了 VictoriaMetrics 的核心痛点。
对于 SRE 而言,理解其源码架构与数据流,不仅能保障 AI 与 VictoriaMetrics 集成的稳定性,更能基于其模块化设计进行定制化扩展,充分释放 大模型 + 可观测性 的协同价值,推动 AIOPS 从 概念 走向 落地。
未来,随着 MCP 协议的迭代与 LLM 能力的提升,MCP-VictoriaMetrics 有望进一步融合推理、决策能力,实现 AI 自动发现监控异常 - 分析根因 - 给出优化建议 的全流程自动化,成为云原生可观测性体系中 AI 能力落地的核心底座。