Alerting: Send merged configuration to the remote alertmanager (#107004)

This commit is contained in:
Alexander Akhmetov
2025-07-02 21:35:24 +02:00
committed by GitHub
parent d57155a19b
commit b483a04aec
9 changed files with 621 additions and 27 deletions
@@ -11,6 +11,7 @@ import (
"github.com/grafana/e2e"
gapi "github.com/grafana/grafana-api-golang-client"
"github.com/grafana/grafana/pkg/services/ngalert/remote/client"
"github.com/stretchr/testify/require"
)
@@ -43,6 +44,7 @@ type AlertmanagerScenario struct {
Webhook *WebhookService
Postgres *PostgresService
Loki *LokiService
Mimir *MimirService
}
func NewAlertmanagerScenario() (*AlertmanagerScenario, error) {
@@ -381,3 +383,10 @@ func mapInstancePeers(is []string) map[string][]string {
return mIs
}
func (s *AlertmanagerScenario) NewMimirClient(tenantID string) (client.MimirClient, error) {
if s.Mimir == nil {
return nil, fmt.Errorf("mimir service not started")
}
return NewMimirClient("http://"+s.Mimir.HTTPEndpoint(), tenantID)
}
+67
View File
@@ -0,0 +1,67 @@
package alertmanager
import (
"fmt"
"net/url"
"github.com/grafana/e2e"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/services/ngalert/metrics"
"github.com/grafana/grafana/pkg/services/ngalert/remote/client"
"github.com/prometheus/client_golang/prometheus"
)
const (
mimirImage = "grafana/mimir:r348-017076d8"
mimirBinary = "/bin/mimir"
mimirHTTPPort = 33667
mimirGRPCPort = 33668
)
type MimirService struct {
*e2e.HTTPService
}
func NewMimirService(name string) *MimirService {
flags := map[string]string{
"-target": "alertmanager",
"-server.http-listen-port": fmt.Sprintf("%d", mimirHTTPPort),
"-server.grpc-listen-port": fmt.Sprintf("%d", mimirGRPCPort),
"-alertmanager.web.external-url": "http://localhost:8080/alertmanager",
"-alertmanager-storage.backend": "filesystem",
"-alertmanager-storage.filesystem.dir": "/tmp/mimir/alertmanager",
"-alertmanager.grafana-alertmanager-compatibility-enabled": "true",
}
return &MimirService{
HTTPService: e2e.NewHTTPService(
name,
mimirImage,
e2e.NewCommandWithoutEntrypoint(mimirBinary, e2e.BuildArgs(flags)...),
e2e.NewHTTPReadinessProbe(mimirHTTPPort, "/ready", 200, 299),
mimirHTTPPort,
),
}
}
func NewMimirClient(mimirURL, tenantID string) (client.MimirClient, error) {
u, err := url.Parse(mimirURL)
if err != nil {
return nil, err
}
cfg := &client.Config{
URL: u,
TenantID: tenantID,
Password: "", // No password needed for test
Logger: log.NewNopLogger(),
}
registry := prometheus.NewRegistry()
metrics := metrics.NewRemoteAlertmanagerMetrics(registry)
tracer := tracing.InitializeTracerForTest()
return client.New(cfg, metrics, tracer)
}