Add maglev_backend_info variable that correlates backend/address/healthcheck/source_tag

This commit is contained in:
2026-05-01 15:19:00 +02:00
parent fb61e72e06
commit 86b265c2a9
3 changed files with 28 additions and 7 deletions
+16 -3
View File
@@ -21,9 +21,10 @@ import (
// BackendInfo holds the health and config state needed by the collector.
type BackendInfo struct {
Health *health.Backend
Enabled bool
HCName string // healthcheck name from config
Health *health.Backend
Enabled bool
HCName string // healthcheck name from config
SourceTag string // nginx source tag; equals backend name when unset in config
}
// StateSource provides read-only access to the running checker state.
@@ -134,6 +135,7 @@ type Collector struct {
src StateSource
vpp VPPSource // optional; nil when VPP integration is disabled
backendInfo *prometheus.Desc
backendState *prometheus.Desc
backendHealth *prometheus.Desc
backendEnabled *prometheus.Desc
@@ -156,6 +158,11 @@ func NewCollector(src StateSource, vpp VPPSource) *Collector {
return &Collector{
src: src,
vpp: vpp,
backendInfo: prometheus.NewDesc(
"maglev_backend_info",
"Static backend metadata. Always 1; metadata is conveyed via labels.",
[]string{"backend", "address", "healthcheck", "source_tag"}, nil,
),
backendState: prometheus.NewDesc(
"maglev_backend_state",
"Current backend state (1 = active for the given state label).",
@@ -216,6 +223,7 @@ func NewCollector(src StateSource, vpp VPPSource) *Collector {
// Describe implements prometheus.Collector.
func (c *Collector) Describe(ch chan<- *prometheus.Desc) {
ch <- c.backendInfo
ch <- c.backendState
ch <- c.backendHealth
ch <- c.backendEnabled
@@ -247,6 +255,11 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
}
addr := info.Health.Address.String()
ch <- prometheus.MustNewConstMetric(
c.backendInfo, prometheus.GaugeValue, 1.0,
name, addr, info.HCName, info.SourceTag,
)
// One time-series per possible state; the current state is 1, rest 0.
for _, s := range states {
val := 0.0