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

为何我的Prometheus规则测试无法匹配预期值?

问题原因:浮点数精度误差

你的测试失败核心原因是二进制浮点数的精度限制,导致生成的样本值并非精确的0.2,和预期值不匹配。

具体分析

  1. 输入序列0.0+0.01x30的逻辑是从0.0开始,每隔1分钟生成一个样本,每次递增0.01,共30个样本。
  2. 0.01在二进制浮点数中无法精确表示(类似十进制中1/3无法写成有限小数),累加20次后得到的结果是一个接近0.2的近似值(比如0.20000000000000004或0.19999999999999996),而非精确的0.2。
  3. Prometheus的规则测试中,exp_samples的value默认是精确匹配,所以预期的0.2和实际生成的近似值不相等,导致测试失败。

解决办法

你可以通过以下几种方式修复这个问题:

  • 用整数序列避免精度问题:将数值放大为整数,规则中再做除法转换。比如修改输入序列和预期值:

    input_series:
      - series: 'total'
        values: '0+1x30 30-1x30'
    promql_expr_test:
    - expr: total / 100
      eval_time: 20m
      exp_samples:
        - labels: 'total'
          value: 0.2
    
  • 使用近似匹配:通过comparator和epsilon字段允许一定的误差范围:

    promql_expr_test:
    - expr: total
      eval_time: 20m
      exp_samples:
        - labels: 'total'
          value: 0.2
          comparator: "~"
          epsilon: 0.0001
    
  • 直接使用实际近似值:将预期值替换为浮点数计算后的实际结果(比如0.20000000000000004)。

内容的提问来源于stack exchange,提问作者Nemo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:03:18