作者:李强(孟涂)

背景介绍

在现代云原生与分布式系统运维场景中,Prometheus 已成为事实上的监控与告警系统标准,其查询语言 PromQL 凭借强大的时序数据分析能力,成为运维工程师与开发者诊断系统性能、定位故障的核心工具。然而,PromQL 的复杂语法和高度结构化的特性,对用户的专业知识提出了较高要求。运维人员因 PromQL 的学习曲线陡峭而难以高效利用其功能,导致监控效率低下和误操作风险。与此同时,随着云原生生态的快速发展,指标规模呈指数级增长,传统基于人工编写查询语句的模式已难以应对海量数据与动态场景的需求。

PromQL Copilot 系统依托阿里云可观测平台的 SLS、CMS 基础设施与 Dify 框架,实现了从自然语言理解、知识图谱、查询生成到执行验证的端到端闭环。其功能覆盖 PromQL 生成、解释、诊断及指标推荐,已在云监控控制台与可观测 MCP 服务中上线,为用户提供智能化的监控查询体验,助力企业降低运维门槛,提升 AIOps 能力。

自然语言生成 PromQL 的挑战与解决方案

自然语言生成 PromQL 的核心目标是将用户输入的自然语言(如“查看服务延迟超过阈值的实例”)转化为精确的 PromQL 查询语句。然而,这一过程面临多重技术挑战,涉及自然语言理解、领域知识融合、大规模指标数据性能优化等多个层面。以下从核心挑战出发,解析其技术难点与创新解决方案。

1. 多义性消除:自然语言的模糊性与 PromQL 的确定性矛盾

PromQL Copilot 的核心挑战之一是如何将高度模糊的自然语言意图转化为精确的 PromQL 查询语句。自然语言的多义性与 PromQL 的确定性之间的矛盾贯穿整个系统设计流程。

在 Prometheus 场景中,自然语言的多义性主要表现为以下形式:

  • 语境依赖:同一查询“服务异常”在不同场景下可能对应“HTTP 错误率”或“队列积压”;
  • 隐含意图(不明确):“系统负载如何?”
  • 标签语义映射:查询每个实例的 CPU 使用率。“实例”可能对应 instance,也可能对应 instanceID。

解决方案:

  • 在不同的语境下,所对应的指标会不同,比如 ECS 和 RDS 两种云产品下,都有对 CPU、内存、磁盘使用率等的描述。在 CDN 云产品中,服务异常会更加关注 HTTP 状态码的错误情况,但在 RDS 中,会更加关注慢查询,在 Kafka 中,会关注队列消费位点等情况。除了引导用户用更加详细的文本(说明所处的云产品环境)描述外,我们构建了全方面覆盖云产品与开源指标的指标知识库 RAG,能够对用户的问题推荐出准确的指标元信息。指标知识库详见本章第 3 节。
  • 用户意图表达不明确时,我们会尽可能理解用户的需求,使用 Query 重写将用户问题转换为标准化更符合 Prometheus 生态的问题,尽可能的消除歧义,提高在 RAG、LLM 中召回数据的准确率。在 Query 重写环节,还会结合用户的多轮问题进行信息富化,提取出用户实际问题以及所对应的领域标签,比如“容器”会提取出“k8s”、“container”。
  • 自然语言中对标签的描述因为与实际 Labels 可能存在多义性,无法直接转换到 PromQL 中。我们基于 SLS SPL 实现了获取指标实际 Labels 的功能,在使用大模型生成 PromQL 时,能够保证自然语言转换到实际 Labels 是准确的。

2. 领域知识增强:如何让大模型“读懂” Prometheus 生态

Prometheus 指标体系、查询语言(PromQL)和生态组件构成了一个高度结构化的领域知识网络。然而,通用大模型(如 LLaMA、ChatGLM)缺乏对这一领域的深度理解,直接生成 PromQL 时容易出现语义偏差、语法错误或上下文缺失。例如:

  • 误用函数:将“平均延迟”翻译为 avg() 而非 rate()
  • 忽略标签:遗漏关键标签(如 job="api-server")导致查询结果为空;
  • 时序逻辑错误:混淆瞬时向量(Instant Vector)与区间向量(Range Vector)的使用场景。

解决方案:

  • 将我们在 PromQL 语句编写的经验总结在知识库中,涵盖了常用的自然语言问题以及对应的 PromQL 编写指导。比如当用户问题召回“如何使用 PromQL 找出出口流量最大的 Pod?”时,会给出如下 PromQL 编写指导。以此提示大模型来获得更高的准确率。 
要找出出口流量最大的Pod,首先计算每个Pod的出口流量速率,使用`max by (pod_name)(rate(container_network_transmit_bytes_total{}[1m]))`获取流量速率,然后应用`topk`函数选择流量最大的Pod。最终的PromQL语句为:
topk (1, max by (pod_name)(rate(container_network_transmit_bytes_total{}[1m]))) 
  • 大模型如千问系列本身就具备一定的 Prometheus 生态中 PromQL 算子的能力,所以更关键的是让大模型能够理解指标含义,所以我们构建了覆盖阿里云上产品指标、通用开源指标(如 K8s 体系、Kafka 等)的指标知识库。
  • 查询引擎兜底。PromQL 如时间范围、标签正则等语法涉及较多的符号操作,大模型出错在所难免,我们通过 Pre Run Query 对生成的 PromQL 预检查,当遇到错误时会通过“PromQL 诊断”功能进行修复。

3. 指标知识库:构建云上全量指标知识库

Prometheus 指标体系呈现爆炸式增长:从 Kubernetes 核心组件(如 kube-apiserver、etcd)到微服务自定义指标,再到硬件层的 Node Exporter 数据,指标数量可达数万级。面对如此庞杂的指标体系,指标知识库成为 PromQL Copilot 的核心组件。它不仅是自然语言到 PromQL 转换的语义桥梁,更是实现智能查询推荐、异常根因分析、跨服务依赖追踪的关键支撑。

解决方案:

  • 指标来源:阿里云可观测在 Prometheus 领域多年的深耕,具有一套完整的基础设施,涵盖了云上产品(ECS、RDS、CDN 等)、开源组件(K8s、Istio 服务网格等)多方面的标准且结构化的指标体系。在 AI 时代,可以很快的将这些资源设计整合成大模型友好的向量化格式。
  • 知识库设计:核心目标是能够准确的将用户问题转换为指标数据,并且数据格式大模型友好。在逻辑上我们设计了从指标领域、指标所能解决的问题、指标元数据(指标名称、指标描述、类型、单位、标签名称和标签含义等)的结构。
  • 指标动态更新:开源社区的发展,以及新技术的出现可能会引起指标定义频繁变化。比如随着 AI 大模型的火热发展,vLLM 和 SGLang 等推理框架的指标在持续迭代更新。PromQL Copilot 的知识库在可观测基础设施上,基于 Dify 框架 API 实现了指标动态更新,零投入即可获得云产品和开源社区最新指标。
  • 除此之外,我们还在探索实体资源与指标之间的关系,在异常根因分析、告警分析等领域探索 AIOps 的含义。

4. 指标有效性:命中用户的实际存储数据

PromQL Copilot 的核心价值在于将自然语言意图转化为可执行且有效的 PromQL 查询。然而,生成语法正确的 PromQL 并不意味着其能命中用户实际存储的数据。这一挑战可以拆解为以下几种问题:

  • 指标知识库无法覆盖用户自定义的指标,用户在业务上可能存在定制化需求,我们无法直接感知用户的数据,从安全与隐私的角度也不能在 AI 侧存储用户的数据。
  • Prometheus 生态多样:除了使用云产品或开源指标外,还可以使用 RecordingRule 或定时 SQL 对数据进行预计算,输出新的指标,这同样属于用户的自定义指标。
  • 指标标签的键值对会在运行时更新,自定义指标的标签同样无法在 AI 侧存储。

解决方案:

  • 除了使用指标知识库外,还可以为大模型开发数据查询工具,直接查询用户存储中的指标和标签键值对,将用户的实时在线数据输入给大模型,从而获得更加准确的 PromQL。
  • 在大规模指标查询的实践中,用户实时在线的指标元数据会超出模型上下文限制,导致相应过慢,而实际能够回答用户问题的指标两三条足矣,为此我们设计了基于领域关键词的过滤方法,兼顾运行效率与准确率。

5. PromQL Copilot 框架图

在上述提升准确率、用户体验等工作的基础上,我们基于 SLS、CMS 等基础设施及 Dify(InsightAgent)平台部署了整套服务。

功能概览

在云监控控制台中可以使用的功能有:PromQL 生成、PromQL 解释、PromQL 诊断和指标推荐。

在可观测 MCP 服务中可以使用的功能有:PromQL 生成和 PromQL 查询执行。

1. 生成 PromQL 语句

您使用日常语言表达查询需求,Copilot 会自动将这些描述转换为准确的 PromQL 查询语句。

具体请查看:https://mp.weixin.qq.com/s/uqyyEVuXAdaQ8iXhtqq4eQ

2. 解释 PromQL 语句

解析 PromQL 语句并分解其结构和功能,帮助用户更深入地理解查询逻辑。

具体请查看:https://mp.weixin.qq.com/s/uqyyEVuXAdaQ8iXhtqq4eQ

3. 诊断 PromQL 语句

通过智能分析 PromQL 语句,以识别潜在问题并提供具体改进建议。

具体请查看:https://mp.weixin.qq.com/s/uqyyEVuXAdaQ8iXhtqq4eQ

4. 推荐指标

根据您的需求,可以推荐不同云产品下符合需求的指标。

具体请查看:https://mp.weixin.qq.com/s/uqyyEVuXAdaQ8iXhtqq4eQ

操作步骤与典型用法

1. 在云监控控制台中使用

PromQL Copilot 在云监控中已全面上线,可以在 Prometheus 实例处使用。详细的操作步骤可以参照官方文档【1】。

2. 使用可观测 MCP Server

阿里云可观测提供了统一的 MCP 服务,可以在 GitHub 上通过代码仓库【2】获得。本节以 Cherry Studio 为例,展示使用自然语言生成 PromQL 工具并查询数据的功能。

可观测 MCP Server 配置

可观测 MCP Server 与通用 MCP 无异,配置方法可直接参考开源文档【2】。

PromQL MCP 工具介绍

在配置好 MCP Server 后,就可以直接使用可观测相关的工具。本节使用到的工具有:

工具名称工具描述输入参数输出内容
cms_translate_text_to_promql自然语言生成 PromQLtext,project,metricStore,regionId1. PromQL 语句2. 思考过程
cms_execute_promql_query执行 PromQL 语句,基于 SPL 实现数据分析与图片生成project,metricStore,query,fromTimestampInSeconds,toTimestampInSeconds,regionId1. 查询时间范围内每条时间线的最新点的数据2. 查询时间范围内,interval 为 1 分钟的时间线图
sls_get_current_time获取当前时间1. 当前时间字符串2. 当前时间戳(毫秒)

参数解释:

参数名称含义
textPromQL 需求的自然语言
projectSLS 存储 Project
metricStoreSLS 存储 MetricStore
regionId阿里云区域ID
queryPromQL
fromTimestampInSeconds时间范围开始时间戳
toTimestampInSeconds时间范围结束时间戳

自然语言生成 PromQL 与查询执行

在本地模型为 qwen-max-latest 下,输入“查询最近 15 分钟,arms-prom 命名空间的 Pod 数量”即可体验到大模型基于 MCP Tools 的提示词进行思考、规划和执行的过程。

详细内容如下所示,其中工具执行错误是因为大模型将 PromQL 作为入参时没有很好的处理符号问题,但大模型本身具有自修复的能力,可以顺利执行并获取结果。

3. 自然语言生成 PromQL 的典型用法

PromQL Copilot 在开源指标、云产品指标上都能有效地回答用户的问题,下面是一些用法分享。

开源指标查询与计算

在 K8s 场景下,展示了使用 cAdvisor 指标和 KSM 指标的情形。

  • 容器场景,查询 Pod 的内存使用量

  • 容器场景,查询不健康的 Pod

开源指标对资源的描述粒度不同,所以同一问题会有不同但正确的答案。

云产品指标查询与计算

在云监控中支持上百种云产品或中间件监控,不同的云产品有自己定义的指标。在计算、存储、网络等云产品中选择了弹性计算(ECS)、数据库(RDS)、内容分发网络(CDN)、负载均衡(SLB)等情形来展示。

  • 查询 ECS 的 CPU 使用量

  • 查询 ECS 的内存使用量

  • 查询 RDS 云产品 MYSQL 引擎的 CPU 使用情况
CPU 作为数据库最核心的资源,是日常运维中重点关注的对象。当实例 CPU 使用率持续较高时,很容易导致数据库访问响应慢,从而导致业务受损。

  • 查询 CDN 产品的流量使用情况

  • 查询 SLB 产品的负载均衡情况
通过查询 SLB 的负载均衡情况,可以实时掌握流量分配、后端服务器健康状态及潜在风险,从而优化资源利用、提升服务稳定性,并降低运维复杂度。

  • 查询 SLB 产品接收的流量分布情况
SLB(Server Load Balancer,负载均衡器)的核心功能是将流量合理分发到后端服务器,保障服务的高可用性和性能。

未来展望

在未来我们会持续优化自然语言生成 PromQL 的准确率、延迟和用户体验。下面是正在优化的内容:

  • 指标知识图谱优化,增加 PromQL 算子推荐,多指标关联推荐
  • Prompt 与领域知识优化,提高输出 PromQL 准确率
  • PromQL 执行 MCP 工具输出格式优化

【1】官方文档

https://help.aliyun.com/zh/cms/cloudmonitor-1-0/user-guide/co...

【2】代码仓库

https://github.com/aliyun/alibabacloud-observability-mcp-server


阿里云云原生
1.1k 声望323 粉丝