mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
lib/promscrape: reload all the scrape configs when the global
section is changed inside -promscrape.config
See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2884
This commit is contained in:
parent
23e85e0fc5
commit
2d1366353c
2 changed files with 20 additions and 1 deletions
|
@ -15,6 +15,7 @@ The following tip changes can be tested by building VictoriaMetrics components f
|
||||||
|
|
||||||
## tip
|
## tip
|
||||||
|
|
||||||
|
* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): restart all the scrape jobs during [config reload](https://docs.victoriametrics.com/vmagent.html#configuration-update) after `global` section is changed inside `-promscrape.config`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2884).
|
||||||
* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly assume role with AWS ECS credentials. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2875). Thanks to @transacid for [the fix](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/2876).
|
* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly assume role with AWS ECS credentials. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2875). Thanks to @transacid for [the fix](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/2876).
|
||||||
* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): return series from `q1` if `q2` doesn't return matching time series in the query `q1 ifnot q2`. Previously series from `q1` weren't returned in this case.
|
* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): return series from `q1` if `q2` doesn't return matching time series in the query `q1 ifnot q2`. Previously series from `q1` weren't returned in this case.
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,10 @@ func (cfg *Config) mustRestart(prevCfg *Config) {
|
||||||
prevScrapeCfgByName[scPrev.JobName] = scPrev
|
prevScrapeCfgByName[scPrev.JobName] = scPrev
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Restart all the scrape jobs on Global config change.
|
||||||
|
// See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2884
|
||||||
|
needGlobalRestart := !areEqualGlobalConfigs(&cfg.Global, &prevCfg.Global)
|
||||||
|
|
||||||
// Loop over the the new jobs, start new ones and restart updated ones.
|
// Loop over the the new jobs, start new ones and restart updated ones.
|
||||||
var started, stopped, restarted int
|
var started, stopped, restarted int
|
||||||
currentJobNames := make(map[string]struct{}, len(cfg.ScrapeConfigs))
|
currentJobNames := make(map[string]struct{}, len(cfg.ScrapeConfigs))
|
||||||
|
@ -142,7 +146,7 @@ func (cfg *Config) mustRestart(prevCfg *Config) {
|
||||||
started++
|
started++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if areEqualScrapeConfigs(scPrev, sc) {
|
if !needGlobalRestart && areEqualScrapeConfigs(scPrev, sc) {
|
||||||
// The scrape config didn't change, so no need to restart it.
|
// The scrape config didn't change, so no need to restart it.
|
||||||
// Use the reference to the previous job, so it could be stopped properly later.
|
// Use the reference to the previous job, so it could be stopped properly later.
|
||||||
cfg.ScrapeConfigs[i] = scPrev
|
cfg.ScrapeConfigs[i] = scPrev
|
||||||
|
@ -165,6 +169,12 @@ func (cfg *Config) mustRestart(prevCfg *Config) {
|
||||||
logger.Infof("restarted service discovery routines in %.3f seconds, stopped=%d, started=%d, restarted=%d", time.Since(startTime).Seconds(), stopped, started, restarted)
|
logger.Infof("restarted service discovery routines in %.3f seconds, stopped=%d, started=%d, restarted=%d", time.Since(startTime).Seconds(), stopped, started, restarted)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func areEqualGlobalConfigs(a, b *GlobalConfig) bool {
|
||||||
|
sa := a.marshalJSON()
|
||||||
|
sb := b.marshalJSON()
|
||||||
|
return string(sa) == string(sb)
|
||||||
|
}
|
||||||
|
|
||||||
func areEqualScrapeConfigs(a, b *ScrapeConfig) bool {
|
func areEqualScrapeConfigs(a, b *ScrapeConfig) bool {
|
||||||
sa := a.marshalJSON()
|
sa := a.marshalJSON()
|
||||||
sb := b.marshalJSON()
|
sb := b.marshalJSON()
|
||||||
|
@ -183,6 +193,14 @@ func (sc *ScrapeConfig) marshalJSON() []byte {
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gc *GlobalConfig) marshalJSON() []byte {
|
||||||
|
data, err := json.Marshal(gc)
|
||||||
|
if err != nil {
|
||||||
|
logger.Panicf("BUG: cannot marshal GlobalConfig: %s", err)
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
func (cfg *Config) mustStop() {
|
func (cfg *Config) mustStop() {
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
logger.Infof("stopping service discovery routines...")
|
logger.Infof("stopping service discovery routines...")
|
||||||
|
|
Loading…
Reference in a new issue