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
相关产品推荐
相关产品推荐

