I can reproduce the results by extracting parts of the extrapolatedRate() 
function, but I still don't understand what it's doing.

https://go.dev/play/p/ua3XGLEA0cI    # _ _ _ 17 137
https://go.dev/play/p/NoJ3FoKLeLG    # _ _ _ 1017 1137

Taking the first one:
- It extrapolates backwards to find where the zero crossing ought to be (if 
it started linearly from zero). In the case of _ _ _ 17 137, this gives a 
time 8.5 seconds earlier, so the time between first and end points grows 
from 60 to 68.5 seconds.
- It then adds half the average interval, making 98.5 seconds.
- It then takes the increase and scales it by 98.5 / 60, where 60 is the 
true gap between the samples
- It multiplies the true increase in the value by 98.5/60, then divides by 
300 which is the full width of the range

120 * (98.5/60) / 300 = .6566666666

This calculates the extrapolated increase from time (t1 - 8.5) to (t2 + 
30), but then it seems to be treating this increase as if it had been 
spread over the whole 5 minutes, rather than over 98.5 seconds?

On Friday, 13 October 2023 at 12:31:38 UTC+1 Brian Candler wrote:

> (I copy pasted the wrong bit of screen from when I had eval_time: 5m30s, 
> but it doesn't affect the result)
>
> On Friday, 13 October 2023 at 12:30:16 UTC+1 Brian Candler wrote:
>
>> I've been using "promtool test rules" to see how rate() behaves with a 
>> timeseries that has recently started, and I am struggling to understand it.
>>
>> What would you think the following test should return?
>>
>> ```
>> evaluation_interval: 1m
>>
>> tests:
>>   - input_series:
>>       - series: foo
>>         values: '_ _ _ 17 137'
>>     interval: 1m
>>
>>     promql_expr_test:
>>       - expr: rate(foo[5m])
>>         eval_time: 4m30s
>>         exp_samples:
>>           - value: 2   # I expected: increase of 120 in 60 seconds
>>             labels: ""
>> ```
>>
>> Result (with prometheus 2.45.0):
>>
>> ```
>>   FAILED:
>>     expr: "rate(foo[5m])", time: 5m30s,
>>         exp: {} 2E+00
>>         got: {} 6.566666666666666E-01
>> ```
>>
>> That result is 197/300, and I have no idea how it derives this value!
>>
>> Now change the input data to:
>>
>> ```
>>         values: '_ _ _ 1017 1137'
>> ```
>>
>> and the result is 0.8 (=240/300, 192/240 or 48/60) - even though the 
>> input values are still 120 apart.
>>
>> Any clues as to how it gets these results?
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to prometheus-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/44e16f4a-9fcb-44fe-ad73-985cec076502n%40googlegroups.com.

Reply via email to