From e22b564049b74ecf007c15a7e7d33ba5128ab1c4 Mon Sep 17 00:00:00 2001 From: Julien Pivotto Date: Wed, 21 Feb 2024 15:09:21 +0100 Subject: [PATCH] Always align scrapes even if tolerance is bigger than 1% of scrape interval When the scrape tolerance is bigger than 1% of the scrape interval, take 1% of the scrape interval as the tolerance instead of not aligning the scrape at all. Signed-off-by: Julien Pivotto --- scrape/scrape.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scrape/scrape.go b/scrape/scrape.go index dfa945852..383c262e0 100644 --- a/scrape/scrape.go +++ b/scrape/scrape.go @@ -1192,14 +1192,18 @@ mainLoop: // Calling Round ensures the time used is the wall clock, as otherwise .Sub // and .Add on time.Time behave differently (see time package docs). scrapeTime := time.Now().Round(0) - if AlignScrapeTimestamps && sl.interval > 100*ScrapeTimestampTolerance { + if AlignScrapeTimestamps { + tolerance := ScrapeTimestampTolerance + if maxTolerance := sl.interval / 100; tolerance < maxTolerance { + tolerance = maxTolerance + } // For some reason, a tick might have been skipped, in which case we // would call alignedScrapeTime.Add(interval) multiple times. for scrapeTime.Sub(alignedScrapeTime) >= sl.interval { alignedScrapeTime = alignedScrapeTime.Add(sl.interval) } // Align the scrape time if we are in the tolerance boundaries. - if scrapeTime.Sub(alignedScrapeTime) <= ScrapeTimestampTolerance { + if scrapeTime.Sub(alignedScrapeTime) <= tolerance { scrapeTime = alignedScrapeTime } }