rate
1 | func extrapolatedRate(vals []parser.Value, args parser.Expressions, enh *EvalNodeHelper, isCounter bool, isRate bool) Vector { |
说明:
44行开始,推算就可以算出来具体的数值了,但是有些细节可以补充一下:
durationToStart
和durationToEnd
受查询时间和metric
的scrape time
影响,如果超出了extrapolationThreshold
时间,durationToStart
或durationToEnd
的值 = averageDurationBetweenSamples / 2
。
例如:假设当前的指标:A
(conter类型),每秒以10的的速度增长,我们需要采集60s的指标,该指标的设置的采集间隔为5s,第一次采集的时间为00:01 00
,最后一次的采集时间为00:02 00
,当前查询时间为00:02 03
,查询语句为A[1m]
,一般情况下,那么计算逻辑(伪代码)如下:
1 | rangeStart = "00:02 03" (1m + 0) // 没有offset rangeStart == 00:01 03 |
剩下的去套上面的程序(从第44行开始),至于resultValue可以随便编一个,但是要合理。
increase
1 | // === rate(node parser.ValueTypeMatrix) Vector === |
increase
和rate
共用一个函数extrapolatedRate
,只是结果不需要执行extrapolatedRate
函数第76行的内容。
irate
源代码(2021/4/14):
1 |
|
irate最终的计算规则:
1 | (倒数第一个Metric Value - 减倒数第二个metris Value) / (倒数第一个Metric抓取时间(秒) - 减倒数第二个metris抓取时间(秒)) |