Skip to content

Commit 6544c43

Browse files
notify: add grafana_alerting_alertmanager_templates metric (#557)
1 parent c42905f commit 6544c43

3 files changed

Lines changed: 54 additions & 0 deletions

File tree

‎notify/grafana_alertmanager.go‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -869,6 +869,7 @@ func (am *GrafanaAlertmanager) ApplyConfig(cfg NotificationsConfiguration) (err
869869

870870
am.setReceiverMetrics(cfg.Receivers, len(activeReceivers))
871871
am.setInhibitionRulesMetrics(cfg.InhibitRules)
872+
am.setTemplateMetrics(cfg.Templates)
872873

873874
am.receivers = receivers
874875

@@ -894,6 +895,21 @@ func (am *GrafanaAlertmanager) setInhibitionRulesMetrics(r []InhibitRule) {
894895
am.opts.Metrics.configuredInhibitionRules.WithLabelValues(am.tenantString()).Set(float64(len(r)))
895896
}
896897

898+
func (am *GrafanaAlertmanager) setTemplateMetrics(cfgTemplates []templates.TemplateDefinition) {
899+
// Start all known kinds at 0 so a kind that no longer has any templates
900+
// gets its gauge reset instead of keeping a stale value from a previous config.
901+
byKind := map[templates.Kind]int{
902+
templates.GrafanaKind: 0,
903+
templates.MimirKind: 0,
904+
}
905+
for _, t := range cfgTemplates {
906+
byKind[t.Kind]++
907+
}
908+
for kind, count := range byKind {
909+
am.opts.Metrics.configuredTemplates.WithLabelValues(am.tenantString(), kind.String()).Set(float64(count))
910+
}
911+
}
912+
897913
func (am *GrafanaAlertmanager) setReceiverMetrics(cfgReceivers []models.ReceiverConfig, countActiveReceivers int) {
898914
am.opts.Metrics.configuredReceivers.WithLabelValues(am.tenantString(), ActiveStateLabelValue).Set(float64(countActiveReceivers))
899915
am.opts.Metrics.configuredReceivers.WithLabelValues(am.tenantString(), InactiveStateLabelValue).Set(float64(len(cfgReceivers) - countActiveReceivers))

‎notify/grafana_alertmanager_metrics.go‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type GrafanaAlertmanagerMetrics struct {
1818
configuredReceivers *prometheus.GaugeVec
1919
configuredIntegrations *prometheus.GaugeVec
2020
configuredInhibitionRules *prometheus.GaugeVec
21+
configuredTemplates *prometheus.GaugeVec
2122
}
2223

2324
// NewGrafanaAlertmanagerMetrics creates a set of metrics for the Alertmanager.
@@ -43,5 +44,11 @@ func NewGrafanaAlertmanagerMetrics(r prometheus.Registerer, l log.Logger) *Grafa
4344
Name: "alertmanager_inhibition_rules",
4445
Help: "Number of configured inhibition rules.",
4546
}, []string{"org"}),
47+
configuredTemplates: promauto.With(r).NewGaugeVec(prometheus.GaugeOpts{
48+
Namespace: namespace,
49+
Subsystem: subsystem,
50+
Name: "alertmanager_templates",
51+
Help: "Number of configured templates by kind.",
52+
}, []string{"org", "kind"}),
4653
}
4754
}

‎notify/grafana_alertmanager_test.go‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,37 @@ func TestGrafanaAlertmanager_setInhibitionRulesMetrics(t *testing.T) {
604604
`), "grafana_alerting_alertmanager_inhibition_rules"))
605605
}
606606

607+
func TestGrafanaAlertmanager_setTemplateMetrics(t *testing.T) {
608+
am, reg := setupAMTest(t)
609+
610+
cfgTemplates := []templates.TemplateDefinition{
611+
{Name: "grafana-1", Kind: templates.GrafanaKind},
612+
{Name: "grafana-2", Kind: templates.GrafanaKind},
613+
{Name: "mimir-1", Kind: templates.MimirKind},
614+
}
615+
am.setTemplateMetrics(cfgTemplates)
616+
617+
require.NoError(t, testutil.GatherAndCompare(reg, bytes.NewBufferString(`
618+
# HELP grafana_alerting_alertmanager_templates Number of configured templates by kind.
619+
# TYPE grafana_alerting_alertmanager_templates gauge
620+
grafana_alerting_alertmanager_templates{kind="Grafana",org="1"} 2
621+
grafana_alerting_alertmanager_templates{kind="Mimir",org="1"} 1
622+
`), "grafana_alerting_alertmanager_templates"))
623+
624+
// Applying a config that no longer has Mimir templates must reset that
625+
// kind's gauge to 0 instead of leaving the stale previous value.
626+
am.setTemplateMetrics([]templates.TemplateDefinition{
627+
{Name: "grafana-1", Kind: templates.GrafanaKind},
628+
})
629+
630+
require.NoError(t, testutil.GatherAndCompare(reg, bytes.NewBufferString(`
631+
# HELP grafana_alerting_alertmanager_templates Number of configured templates by kind.
632+
# TYPE grafana_alerting_alertmanager_templates gauge
633+
grafana_alerting_alertmanager_templates{kind="Grafana",org="1"} 1
634+
grafana_alerting_alertmanager_templates{kind="Mimir",org="1"} 0
635+
`), "grafana_alerting_alertmanager_templates"))
636+
}
637+
607638
func TestGrafanaAlertmanager_setReceiverMetrics(t *testing.T) {
608639
am, reg := setupAMTest(t)
609640

0 commit comments

Comments
 (0)