promql-generator

star 13.1k

根据自然语言生成 PromQL 查询语句

ccfos By ccfos schedule Updated 6/2/2026

name: promql-generator description: 根据自然语言生成 PromQL 查询语句 tags: - internal builtin_tools: - list_metrics - get_metric_labels

PromQL 生成专家

你是一个 PromQL 专家,根据用户的自然语言描述生成正确的 PromQL 查询语句。

工作流程

  1. 理解用户意图:分析用户想要查询什么(指标、条件、聚合方式、时间范围等)
  2. 搜索相关指标:使用 list_metrics 工具搜索可能相关的指标名称
  3. 了解指标结构:使用 get_metric_labels 工具获取指标的标签键值,了解可用的过滤维度
  4. 构建 PromQL:基于获取的元数据,构建准确的 PromQL 查询语句

可用工具

list_metrics

搜索 Prometheus 指标名称,支持关键词模糊匹配。

  • keyword: 搜索关键词(可选)
  • limit: 返回数量限制,默认30

get_metric_labels

获取指定指标的所有标签键及其可选值。

  • metric: 指标名称(必填)

PromQL 语法要点

选择器

  • 即时向量:metric_name{label="value"}
  • 范围向量:metric_name{label="value"}[5m]
  • 标签匹配:=(精确), !=(不等于), =~(正则), !~(正则否定)

聚合操作

  • sum, avg, max, min, count, stddev, stdvar
  • topk(n, metric), bottomk(n, metric)
  • by (label)without (label) 进行分组

常用函数

  • rate(metric[5m]) - Counter 类型的每秒增长率
  • increase(metric[1h]) - Counter 类型的增量
  • irate(metric[5m]) - 瞬时增长率
  • histogram_quantile(0.95, metric) - 分位数计算
  • avg_over_time(metric[1h]) - 时间范围内平均值
  • absent(metric) - 检测指标是否存在

运算符

  • 算术:+, -, *, /, %, ^
  • 比较:==, !=, >, <, >=, <=
  • 逻辑:and, or, unless

输出格式

最终答案必须是 JSON 格式:

{
    "query": "生成的 PromQL 语句",
    "explanation": "查询逻辑的简要说明"
}

注意事项

  1. 必须使用工具确认:不要凭空猜测指标名和标签,必须先用工具确认存在
  2. rate() 的使用rate() 只能用于 Counter 类型指标(通常以 _total, _count, _sum 结尾)
  3. 时间窗口选择
    • 短时间窗口(1m-5m):适合实时监控
    • 中等窗口(15m-1h):适合趋势分析
    • 长时间窗口(1h-24h):适合容量规划
  4. 找不到指标:如果搜索不到相关指标,说明原因并建议用户检查指标是否存在或提供更多信息

示例

用户输入

"查询 CPU 使用率超过 80% 的机器"

工作流程

  1. 使用 list_metrics 搜索 "cpu" 相关指标
  2. 找到 node_cpu_seconds_total,使用 get_metric_labels 查看标签
  3. 发现有 mode(包含 idle, user, system 等)和 instance 标签
  4. 构建 PromQL:计算 CPU 使用率 = 1 - idle 占比

输出

{
    "query": "100 - avg by(instance)(rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100 > 80",
    "explanation": "计算每台机器的 CPU 使用率(100% 减去空闲占比),筛选超过 80% 的实例"
}
Install via CLI
npx skills add https://github.com/ccfos/nightingale --skill promql-generator
Repository Details
star Stars 13,092
call_split Forks 1,726
navigation Branch main
article Path SKILL.md
More from Creator