Alerting: Pass metrics Registerer into NewExternalAlertmanagerSender. (#88313)

* Alerting: Pass metrics Registerer into NewExternalAlertmanagerSender.

I will work on a separate change to export the metrics from Grafana, this
is a little more complicated.

* Typo
This commit is contained in:
Steve Simpson 2024-05-24 23:03:34 +02:00 committed by GitHub
parent bbef011e43
commit ed42119907
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 9 additions and 6 deletions

View File

@ -17,6 +17,7 @@ import (
amgeneral "github.com/prometheus/alertmanager/api/v2/client/general"
amreceiver "github.com/prometheus/alertmanager/api/v2/client/receiver"
amsilence "github.com/prometheus/alertmanager/api/v2/client/silence"
"github.com/prometheus/client_golang/prometheus"
alertingClusterPB "github.com/grafana/alerting/cluster/clusterpb"
alertingNotify "github.com/grafana/alerting/notify"
@ -123,7 +124,7 @@ func NewAlertmanager(cfg AlertmanagerConfig, store stateStore, decryptFn Decrypt
return c.Do(req.WithContext(ctx))
}
senderLogger := log.New("ngalert.sender.external-alertmanager")
s := sender.NewExternalAlertmanagerSender(senderLogger, sender.WithDoFunc(doFunc))
s := sender.NewExternalAlertmanagerSender(senderLogger, prometheus.NewRegistry(), sender.WithDoFunc(doFunc))
s.Run()
err = s.ApplyConfig(cfg.OrgID, 0, []sender.ExternalAMcfg{{URL: cfg.URL + "/alertmanager"}})
if err != nil {

View File

@ -12,6 +12,7 @@ import (
"time"
"github.com/benbjohnson/clock"
"github.com/prometheus/client_golang/prometheus"
"github.com/grafana/grafana/pkg/api/datasource"
"github.com/grafana/grafana/pkg/infra/log"
@ -164,7 +165,7 @@ func (d *AlertsRouter) SyncAndApplyConfigFromDatabase(ctx context.Context) error
// No sender and have Alertmanager(s) to send to - start a new one.
d.logger.Info("Creating new sender for the external alertmanagers", "org", cfg.OrgID, "alertmanagers", redactedAMs)
senderLogger := log.New("ngalert.sender.external-alertmanager")
s := NewExternalAlertmanagerSender(senderLogger)
s := NewExternalAlertmanagerSender(senderLogger, prometheus.NewRegistry())
d.externalAlertmanagers[cfg.OrgID] = s
s.Run()

View File

@ -80,7 +80,7 @@ func (cfg *ExternalAMcfg) headerString() string {
return result.String()
}
func NewExternalAlertmanagerSender(l log.Logger, opts ...Option) *ExternalAlertmanager {
func NewExternalAlertmanagerSender(l log.Logger, reg prometheus.Registerer, opts ...Option) *ExternalAlertmanager {
sdCtx, sdCancel := context.WithCancel(context.Background())
s := &ExternalAlertmanager{
logger: l,
@ -90,7 +90,7 @@ func NewExternalAlertmanagerSender(l log.Logger, opts ...Option) *ExternalAlertm
s.manager = NewManager(
// Injecting a new registry here means these metrics are not exported.
// Once we fix the individual Alertmanager metrics we should fix this scenario too.
&Options{QueueCapacity: defaultMaxQueueCapacity, Registerer: prometheus.NewRegistry()},
&Options{QueueCapacity: defaultMaxQueueCapacity, Registerer: reg},
s.logger,
)

View File

@ -5,6 +5,7 @@ import (
"github.com/grafana/grafana/pkg/infra/log"
"github.com/prometheus/alertmanager/api/v2/models"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/prometheus/model/labels"
"github.com/stretchr/testify/require"
)
@ -50,7 +51,7 @@ func TestSanitizeLabelName(t *testing.T) {
for _, tc := range cases {
logger := log.New("ngalert.sender.external-alertmanager")
am := NewExternalAlertmanagerSender(logger)
am := NewExternalAlertmanagerSender(logger, prometheus.NewRegistry())
t.Run(tc.desc, func(t *testing.T) {
res, err := am.sanitizeLabelName(tc.labelName)
@ -98,7 +99,7 @@ func TestSanitizeLabelSet(t *testing.T) {
for _, tc := range cases {
logger := log.New("ngalert.sender.external-alertmanager")
am := NewExternalAlertmanagerSender(logger)
am := NewExternalAlertmanagerSender(logger, prometheus.NewRegistry())
t.Run(tc.desc, func(t *testing.T) {
require.Equal(t, tc.expectedResult, am.sanitizeLabelSet(tc.labelset))
})