I went through the PromQL docs and found rate little bit confusing. Then I tried one query from Prometheus query dashboard and found below given results
Time Count increase rate(count[1m])
15s 4381 0 0
30s 4381 0 0
45s 4381 0 0
1m 4381 0 0
15s 4381 0 0
30s 4402 21 0.700023
45s 4402 0 0.700023
2m 4423 21 0.7
15s 4423 0 0.7
30s 4440 17 0.56666666
45s 4440 0 0.56666666
3m 4456 16 0.53333333
Last column value I am getting from dashboard but I am not able to understand how is this calculated.
Resolution - 15s
scrape_interval: 30s
Prometheus calculates rate(count[d])
at timestamp t
in the following way:
count
name on the time range (td... t]
. Note that td
timestamp isn't included in the range, while t
timestamp is included in the range. For example, when calculating rate(count[1m])
at a timestamp t=2m
the following raw samples are selected: 4423 @ 2m, 4402 @ 1m45s, 4402 @ 1m30s, 4381 @ 1m15s
. Note that the 4381 @ 1m
sample isn't included in calculations.count
. Prometheus can detect and remove time series resets to zero on the selected time range, but let's skip this for now for the sake of clarity. In the case above it calculates 4423 @ 2m - 4381 @ 1m15s = 42
.d
in seconds per each time series with name count
. In the case above it calculates 42 / 1m = 42 / 60s = 0.7
. The actual result for rate(count[1m]) @ 2m
- 0.700023
- differs from the calculated result - 0.7
- because of extrapolation, which can be applied to results calculated at step 2 if timestamps for the first and/or the last raw sample are located too far from the selected time range bounds. See more details about the extrapolation in this issue .
Note also that Prometheus misses possible counter increase on the time range [1m... 1m15s]
when calculating both rate()
and increase()
. See more details about this issue here and here .
The "increase" function calculates how much some counter has grown and the "rate" function calculates the amount per second the measure grows.
Analyzing your data I think you used [30s] for the "increase" and [1m] for the "rate" (the correct used values are important to the result).
Basically, for example, in time 2m we have:
increase[30s] = count at 2m - count at 1.5m = 4423 - 4402 = 21
rate[1m] = (count at 2m - count at 1m) / 60 = (4423 - 4381) / 60 = 0.7
I found this:
rate = Count_{now} - Count_{now-30s} / 30s
Time Count increase rate(count[1m])
15s 4381 0 0
30s 4381 0 0
45s 4381 0 0
1m 4381 0 0
15s 4381 0 0
30s 4402 21 = [4402-4381]/30s = 0.7
45s 4402 0 = [4402-4381]/30s = 0.7
2m 4423 21 = [4423-4402]/30s = 0.700023
15s 4423 0 = [4423-4402]/30s = 0.7
30s 4440 17 = [4440-4423]/30s = 0.56666666
45s 4440 0 = [4440-4423]/30s = 0.56666666
3m 4456 16 = [4456-4440]/30s = 0.53333333
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.