From 819bb368524ab99b5118cc3b2b9fad6f698b7189 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 2 Dec 2019 13:41:48 +0200 Subject: [PATCH] app/vmselect/promql: estimate per-series scrape interval as 0.6 quantile for the first 100 intervals This should improve scrape interval estimation for tiem series with gaps. --- app/vmselect/promql/rollup.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/vmselect/promql/rollup.go b/app/vmselect/promql/rollup.go index 57b9517cf..e19025498 100644 --- a/app/vmselect/promql/rollup.go +++ b/app/vmselect/promql/rollup.go @@ -300,7 +300,20 @@ func getMaxPrevInterval(timestamps []int64) int64 { if len(timestamps) < 2 { return int64(maxSilenceInterval) } - d := (timestamps[len(timestamps)-1] - timestamps[0]) / int64(len(timestamps)-1) + + // Estimate scrape interval as 0.6 quantile for the first 100 intervals. + h := histogram.GetFast() + tsPrev := timestamps[0] + timestamps = timestamps[1:] + if len(timestamps) > 100 { + timestamps = timestamps[:100] + } + for _, ts := range timestamps { + h.Update(float64(ts - tsPrev)) + tsPrev = ts + } + d := int64(h.Quantile(0.6)) + histogram.PutFast(h) if d <= 0 { return int64(maxSilenceInterval) }