You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus规则配置中record与expr的区别及界面差异原因

问题

根据Prometheus规则官方定义:

record:输出目标时间序列的名称,必须是有效的指标名称。
expr:需要计算的PromQL表达式。每个评估周期会在当前时间计算该表达式,结果将以record指定的指标名称作为新的时间序列存储。

我原本以为record是规则名称,expr是待计算的PromQL语句,但在Prometheus规则页面里,它们显示成两个独立链接,且对应图表内容不同:

  • 第一个图表对应record字段指定的指标(比如number_of_requests_per_time)
  • 第二个图表对应expr字段里的原始PromQL表达式的计算结果

请问这是什么原因?

以下是我的配置文件:

metrics.rules.yml

groups:
  - name: wellboreddms_rules
    rules:
    # HTTP request rate (number of requests per time unit)
    - record: number_of_requests_per_time
      expr: increase(http_requests_total{group="wellbore_ddms"}[30s])
    # HTTP response times (average)
    - record: avg_response_time
      expr: rate(http_request_duration_seconds_sum[30s]) / rate(http_request_duration_seconds_count[30s])

prometheus.yml

global:
  scrape_interval: 15s

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

rule_files:
  - "metrics.rules.yml"

scrape_configs:

  - job_name: 'wdms'
    scrape_interval: 3s
    metrics_path: /api/os-wellbore-ddms/metrics
    scheme: http
    static_configs:
      - targets: ['api:8080']
        labels:
          group: 'wellbore_ddms'
解答

这是Prometheus UI的默认设计,核心是帮你直观对比两类数据:

  • record链接对应的图表:展示的是Prometheus按规则评估周期预计算并持久化存储的时间序列数据。这些数据是提前算好存在数据库里的,查询时直接读取,性能更优,也是你配置记录规则的最终产出。
  • expr链接对应的图表:展示的是实时执行该PromQL表达式的计算结果。每次点击都会重新计算表达式,结果不会被存储,主要用来验证规则表达式的逻辑是否正确,或者临时查看原始计算逻辑的输出。

如果规则配置没问题,两者的图表趋势应该基本一致,但可能因为计算时间窗口的细微偏差(比如规则评估时间和实时查询时间的差异)出现小幅波动。

内容的提问来源于stack exchange,提问作者Santiago Ortiz Ceballos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:46:25