Merge pull request #7761 from roidelapluie/reload

Log duration of reloads
This commit is contained in:
Frederic Branczyk 2020-08-07 10:53:04 +02:00 committed by GitHub
commit db57f31325
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -436,10 +436,16 @@ func main() {
conntrack.DialWithTracing(), conntrack.DialWithTracing(),
) )
reloaders := []func(cfg *config.Config) error{ reloaders := []reloader{
remoteStorage.ApplyConfig, {
webHandler.ApplyConfig, name: "remote_storage",
func(cfg *config.Config) error { reloader: remoteStorage.ApplyConfig,
}, {
name: "web_handler",
reloader: webHandler.ApplyConfig,
}, {
name: "query_engine",
reloader: func(cfg *config.Config) error {
if cfg.GlobalConfig.QueryLogFile == "" { if cfg.GlobalConfig.QueryLogFile == "" {
queryEngine.SetQueryLogger(nil) queryEngine.SetQueryLogger(nil)
return nil return nil
@ -452,25 +458,35 @@ func main() {
queryEngine.SetQueryLogger(l) queryEngine.SetQueryLogger(l)
return nil return nil
}, },
}, {
// The Scrape and notifier managers need to reload before the Discovery manager as // The Scrape and notifier managers need to reload before the Discovery manager as
// they need to read the most updated config when receiving the new targets list. // they need to read the most updated config when receiving the new targets list.
scrapeManager.ApplyConfig, name: "scrape",
func(cfg *config.Config) error { reloader: scrapeManager.ApplyConfig,
}, {
name: "scrape_sd",
reloader: func(cfg *config.Config) error {
c := make(map[string]sd_config.ServiceDiscoveryConfig) c := make(map[string]sd_config.ServiceDiscoveryConfig)
for _, v := range cfg.ScrapeConfigs { for _, v := range cfg.ScrapeConfigs {
c[v.JobName] = v.ServiceDiscoveryConfig c[v.JobName] = v.ServiceDiscoveryConfig
} }
return discoveryManagerScrape.ApplyConfig(c) return discoveryManagerScrape.ApplyConfig(c)
}, },
notifierManager.ApplyConfig, }, {
func(cfg *config.Config) error { name: "notify",
reloader: notifierManager.ApplyConfig,
}, {
name: "notify_sd",
reloader: func(cfg *config.Config) error {
c := make(map[string]sd_config.ServiceDiscoveryConfig) c := make(map[string]sd_config.ServiceDiscoveryConfig)
for k, v := range cfg.AlertingConfig.AlertmanagerConfigs.ToMap() { for k, v := range cfg.AlertingConfig.AlertmanagerConfigs.ToMap() {
c[k] = v.ServiceDiscoveryConfig c[k] = v.ServiceDiscoveryConfig
} }
return discoveryManagerNotify.ApplyConfig(c) return discoveryManagerNotify.ApplyConfig(c)
}, },
func(cfg *config.Config) error { }, {
name: "rules",
reloader: func(cfg *config.Config) error {
// Get all rule files matching the configuration paths. // Get all rule files matching the configuration paths.
var files []string var files []string
for _, pat := range cfg.RuleFiles { for _, pat := range cfg.RuleFiles {
@ -487,6 +503,7 @@ func main() {
cfg.GlobalConfig.ExternalLabels, cfg.GlobalConfig.ExternalLabels,
) )
}, },
},
} }
prometheus.MustRegister(configSuccess) prometheus.MustRegister(configSuccess)
@ -821,7 +838,14 @@ func (i *safePromQLNoStepSubqueryInterval) Get(int64) int64 {
return i.value.Load() return i.value.Load()
} }
func reloadConfig(filename string, logger log.Logger, noStepSuqueryInterval *safePromQLNoStepSubqueryInterval, rls ...func(*config.Config) error) (err error) { type reloader struct {
name string
reloader func(*config.Config) error
}
func reloadConfig(filename string, logger log.Logger, noStepSuqueryInterval *safePromQLNoStepSubqueryInterval, rls ...reloader) (err error) {
start := time.Now()
timings := []interface{}{}
level.Info(logger).Log("msg", "Loading configuration file", "filename", filename) level.Info(logger).Log("msg", "Loading configuration file", "filename", filename)
defer func() { defer func() {
@ -840,17 +864,20 @@ func reloadConfig(filename string, logger log.Logger, noStepSuqueryInterval *saf
failed := false failed := false
for _, rl := range rls { for _, rl := range rls {
if err := rl(conf); err != nil { rstart := time.Now()
if err := rl.reloader(conf); err != nil {
level.Error(logger).Log("msg", "Failed to apply configuration", "err", err) level.Error(logger).Log("msg", "Failed to apply configuration", "err", err)
failed = true failed = true
} }
timings = append(timings, rl.name, time.Since(rstart))
} }
if failed { if failed {
return errors.Errorf("one or more errors occurred while applying the new configuration (--config.file=%q)", filename) return errors.Errorf("one or more errors occurred while applying the new configuration (--config.file=%q)", filename)
} }
noStepSuqueryInterval.Set(conf.GlobalConfig.EvaluationInterval) noStepSuqueryInterval.Set(conf.GlobalConfig.EvaluationInterval)
level.Info(logger).Log("msg", "Completed loading of configuration file", "filename", filename) l := []interface{}{"msg", "Completed loading of configuration file", "filename", filename, "totalDuration", time.Since(start)}
level.Info(logger).Log(append(l, timings...)...)
return nil return nil
} }