Skip to content
Snippets Groups Projects

praefect: Backport separate endpoint for datastore collector (v14.4)

1 unresolved thread
3 files
+ 16
15
Compare changes
  • Side-by-side
  • Inline
Files
3
  • aac5d5e5
    Praefect uses prometheus to export metrics from inside.
    It relies on the defaults from the prometheus library
    to gather set of metrics and register a new metrics.
    Because of it the new metrics got registered on the
    DefaultRegisterer - a global pre-configured registerer.
    Because of that we can't call 'run' function multiple
    times (for testing purposes) as it results to the metrics
    registration error. To omit that problem the 'run' function
    extended with prometheus.Registerer parameter that is used
    to register praefect custom metrics. The production code
    still uses the same DefaultRegisterer as it was before.
    And the test code creates a new instance of the registerer
    for each 'run' invocation, so there are no more duplicates.
    
    (cherry picked from commit 81368d46)
+ 8
8
@@ -149,7 +149,7 @@ func main() {
logger.Fatalf("unable to create a bootstrap: %v", err)
}
if err := run(starterConfigs, conf, b); err != nil {
if err := run(starterConfigs, conf, b, prometheus.DefaultRegisterer); err != nil {
logger.Fatalf("%v", err)
}
}
@@ -192,18 +192,18 @@ func configure(conf config.Config) {
sentry.ConfigureSentry(version.GetVersion(), conf.Sentry)
}
func run(cfgs []starter.Config, conf config.Config, b bootstrap.Listener) error {
nodeLatencyHistogram, err := metrics.RegisterNodeLatency(conf.Prometheus)
func run(cfgs []starter.Config, conf config.Config, b bootstrap.Listener, promreg prometheus.Registerer) error {
nodeLatencyHistogram, err := metrics.RegisterNodeLatency(conf.Prometheus, promreg)
if err != nil {
return err
}
delayMetric, err := metrics.RegisterReplicationDelay(conf.Prometheus)
delayMetric, err := metrics.RegisterReplicationDelay(conf.Prometheus, promreg)
if err != nil {
return err
}
latencyMetric, err := metrics.RegisterReplicationLatency(conf.Prometheus)
latencyMetric, err := metrics.RegisterReplicationLatency(conf.Prometheus, promreg)
if err != nil {
return err
}
@@ -390,11 +390,11 @@ func run(cfgs []starter.Config, conf config.Config, b bootstrap.Listener) error
)
metricsCollectors = append(metricsCollectors, transactionManager, coordinator, repl)
if db != nil {
prometheus.MustRegister(
promreg.MustRegister(
datastore.NewRepositoryStoreCollector(logger, conf.VirtualStorageNames(), db, conf.Prometheus.ScrapeTimeout),
)
}
prometheus.MustRegister(metricsCollectors...)
promreg.MustRegister(metricsCollectors...)
for _, cfg := range cfgs {
srv, err := srvFactory.Create(cfg.IsSecure())
@@ -447,7 +447,7 @@ func run(cfgs []starter.Config, conf config.Config, b bootstrap.Listener) error
conf.StorageNames(),
conf.Reconciliation.HistogramBuckets,
)
prometheus.MustRegister(r)
promreg.MustRegister(r)
go r.Run(ctx, helper.NewTimerTicker(interval))
}
}
Loading