diff --git a/discovery/targetgroup/targetgroup.go b/discovery/targetgroup/targetgroup.go index e74870f046..cf9d8c6158 100644 --- a/discovery/targetgroup/targetgroup.go +++ b/discovery/targetgroup/targetgroup.go @@ -20,7 +20,7 @@ import ( "github.com/prometheus/common/model" ) -// Group is a set of targets with a common label set(production , test, staging etc.). +// Group is a set of targets with a common label set(production, test, staging etc). type Group struct { // Targets is a list of targets identified by a label set. Each target is // uniquely identifiable in the group by its address label. diff --git a/scrape/manager.go b/scrape/manager.go index 04da3162e6..259a645d79 100644 --- a/scrape/manager.go +++ b/scrape/manager.go @@ -197,6 +197,7 @@ func (m *Manager) reload() { } wg.Add(1) + // Run the sync in parallel as these take a while and at high load can't catch up. go func(sp *scrapePool, groups []*targetgroup.Group) { sp.Sync(groups) @@ -205,6 +206,21 @@ func (m *Manager) reload() { } m.mtxScrape.Unlock() wg.Wait() + + activeTargets := make(map[uint64]*Target) + for _, scrapePool := range m.scrapePools { + for _, target := range scrapePool.activeTargets { + if t, ok := activeTargets[target.labels.Hash()]; ok { + level.Warn(m.logger).Log( + "msg", "Found targets with same labels after relabelling", + "target", t.URL().String(), + "target", target.URL().String(), + ) + } + activeTargets[target.labels.Hash()] = target + } + } + } // setOffsetSeed calculates a global offsetSeed per server relying on extra label set.