Compare commits

...

1 Commits

Author SHA1 Message Date
Wade Simmons
06372e12f1 stats: add ability to set static prometheus labels
This changes lets you define static Prometheus labels in the config.
This can be useful for tagging your stats with the custom labels you
need for your environment.

    stats:
      type: prometheus
      labels:
        myLabelOne: value1
        myLabelTwo: value2
2024-03-27 14:37:23 -04:00
2 changed files with 19 additions and 4 deletions

View File

@@ -272,6 +272,10 @@ logging:
#namespace: prometheusns #namespace: prometheusns
#subsystem: nebula #subsystem: nebula
#interval: 10s #interval: 10s
# You can optionally set static labels to include with all metrics
#labels:
# myStaticLabel1: value1
# myStaticLabel2: value2
# enables counter metrics for meta packets # enables counter metrics for meta packets
# e.g.: `messages.tx.handshake` # e.g.: `messages.tx.handshake`

View File

@@ -93,8 +93,19 @@ func startPrometheusStats(l *logrus.Logger, i time.Duration, c *config.C, buildV
return nil, fmt.Errorf("stats.path should not be empty") return nil, fmt.Errorf("stats.path should not be empty")
} }
pr := prometheus.NewRegistry() pry := prometheus.NewRegistry()
pClient := mp.NewPrometheusProvider(metrics.DefaultRegistry, namespace, subsystem, pr, i) var prr prometheus.Registerer = pry
labelsRaw := c.GetMap("stats.labels", nil)
if labelsRaw != nil {
labels := prometheus.Labels{}
for k, v := range labelsRaw {
labels[fmt.Sprintf("%v", k)] = fmt.Sprintf("%v", v)
}
prr = prometheus.WrapRegistererWith(labels, prr)
}
pClient := mp.NewPrometheusProvider(metrics.DefaultRegistry, namespace, subsystem, prr, i)
if !configTest { if !configTest {
go pClient.UpdatePrometheusMetrics() go pClient.UpdatePrometheusMetrics()
} }
@@ -111,14 +122,14 @@ func startPrometheusStats(l *logrus.Logger, i time.Duration, c *config.C, buildV
"boringcrypto": strconv.FormatBool(boringEnabled()), "boringcrypto": strconv.FormatBool(boringEnabled()),
}, },
}) })
pr.MustRegister(g) prr.MustRegister(g)
g.Set(1) g.Set(1)
var startFn func() var startFn func()
if !configTest { if !configTest {
startFn = func() { startFn = func() {
l.Infof("Prometheus stats listening on %s at %s", listen, path) l.Infof("Prometheus stats listening on %s at %s", listen, path)
http.Handle(path, promhttp.HandlerFor(pr, promhttp.HandlerOpts{ErrorLog: l})) http.Handle(path, promhttp.HandlerFor(pry, promhttp.HandlerOpts{ErrorLog: l}))
log.Fatal(http.ListenAndServe(listen, nil)) log.Fatal(http.ListenAndServe(listen, nil))
} }
} }