app/vmselect: add -search.maxStalenessInterval for tuning Prometheus data model closer to Influx-style data model

This commit is contained in:
Aliaksandr Valialkin 2020-03-11 16:43:25 +02:00
parent 375d5483fa
commit 50555d89d3

View File

@ -1,6 +1,7 @@
package promql package promql
import ( import (
"flag"
"fmt" "fmt"
"math" "math"
"strings" "strings"
@ -14,6 +15,10 @@ import (
"github.com/valyala/histogram" "github.com/valyala/histogram"
) )
var maxStalenessInterval = flag.Duration("search.maxStalenessInterval", 0, "The maximum interval for staleness calculations. "+
"By default it is automatically calculated from the median interval between samples. This flag can be useful for tuning "+
"Prometheus data model closer to Influx-style data model. See https://prometheus.io/docs/prometheus/latest/querying/basics/#staleness for details")
var rollupFuncs = map[string]newRollupFunc{ var rollupFuncs = map[string]newRollupFunc{
// Standard rollup funcs from PromQL. // Standard rollup funcs from PromQL.
// See funcs accepting range-vector on https://prometheus.io/docs/prometheus/latest/querying/functions/ . // See funcs accepting range-vector on https://prometheus.io/docs/prometheus/latest/querying/functions/ .
@ -440,6 +445,11 @@ func (rc *rollupConfig) doInternal(dstValues []float64, tsm *timeseriesMap, valu
dstValues = decimal.ExtendFloat64sCapacity(dstValues, len(rc.Timestamps)) dstValues = decimal.ExtendFloat64sCapacity(dstValues, len(rc.Timestamps))
scrapeInterval := getScrapeInterval(timestamps) scrapeInterval := getScrapeInterval(timestamps)
if *maxStalenessInterval > 0 {
if si := maxStalenessInterval.Milliseconds(); scrapeInterval > si {
scrapeInterval = si
}
}
maxPrevInterval := getMaxPrevInterval(scrapeInterval) maxPrevInterval := getMaxPrevInterval(scrapeInterval)
if rc.LookbackDelta > 0 && maxPrevInterval > rc.LookbackDelta { if rc.LookbackDelta > 0 && maxPrevInterval > rc.LookbackDelta {
maxPrevInterval = rc.LookbackDelta maxPrevInterval = rc.LookbackDelta