From 8eabef1f91b48dcf50dab3ecc4304cea3c901acc Mon Sep 17 00:00:00 2001 From: Steve Simpson Date: Wed, 19 Jun 2024 11:40:22 +0200 Subject: [PATCH] Alerting: Update remote alertmanager to use extended receivers API. (#89253) * Alerting: Update remote alertmanager to use extended receivers API. * Update integration test and Mimir image * Update Mimir image in more places --- .drone.yml | 12 ++++++------ .../blocks/mimir_backend/docker-compose.yaml | 2 +- pkg/services/ngalert/remote/alertmanager.go | 17 +---------------- .../ngalert/remote/alertmanager_test.go | 8 +++++++- .../remote/client/alertmanager_configuration.go | 16 +++++++++++++++- pkg/services/ngalert/remote/client/mimir.go | 3 +++ scripts/drone/utils/images.star | 2 +- 7 files changed, 34 insertions(+), 26 deletions(-) diff --git a/.drone.yml b/.drone.yml index 658e2d4adde..2efa39792df 100644 --- a/.drone.yml +++ b/.drone.yml @@ -865,7 +865,7 @@ services: - commands: - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP + image: grafana/mimir-alpine:r295-a23e559 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -1312,7 +1312,7 @@ services: - commands: - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP + image: grafana/mimir-alpine:r295-a23e559 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -2299,7 +2299,7 @@ services: - commands: - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP + image: grafana/mimir-alpine:r295-a23e559 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -4154,7 +4154,7 @@ services: - commands: - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP + image: grafana/mimir-alpine:r295-a23e559 name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -4673,7 +4673,7 @@ steps: - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM plugins/slack - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM python:3.8 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM postgres:12.3-alpine - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/mimir-alpine:r295-a23e559 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mysql:5.7.39 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mysql:8.0.32 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM redis:6.2.11-alpine @@ -4708,7 +4708,7 @@ steps: - trivy --exit-code 1 --severity HIGH,CRITICAL plugins/slack - trivy --exit-code 1 --severity HIGH,CRITICAL python:3.8 - trivy --exit-code 1 --severity HIGH,CRITICAL postgres:12.3-alpine - - trivy --exit-code 1 --severity HIGH,CRITICAL us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP + - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/mimir-alpine:r295-a23e559 - trivy --exit-code 1 --severity HIGH,CRITICAL mysql:5.7.39 - trivy --exit-code 1 --severity HIGH,CRITICAL mysql:8.0.32 - trivy --exit-code 1 --severity HIGH,CRITICAL redis:6.2.11-alpine diff --git a/devenv/docker/blocks/mimir_backend/docker-compose.yaml b/devenv/docker/blocks/mimir_backend/docker-compose.yaml index 76a19755d9f..2297d16acc6 100644 --- a/devenv/docker/blocks/mimir_backend/docker-compose.yaml +++ b/devenv/docker/blocks/mimir_backend/docker-compose.yaml @@ -1,5 +1,5 @@ mimir_backend: - image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP + image: grafana/mimir-alpine:r295-a23e559 container_name: mimir_backend command: - -target=backend diff --git a/pkg/services/ngalert/remote/alertmanager.go b/pkg/services/ngalert/remote/alertmanager.go index 4feca91ed4b..2014220eda9 100644 --- a/pkg/services/ngalert/remote/alertmanager.go +++ b/pkg/services/ngalert/remote/alertmanager.go @@ -15,7 +15,6 @@ import ( amalert "github.com/prometheus/alertmanager/api/v2/client/alert" amalertgroup "github.com/prometheus/alertmanager/api/v2/client/alertgroup" 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" @@ -487,21 +486,7 @@ func (am *Alertmanager) GetStatus(ctx context.Context) (apimodels.GettableStatus } func (am *Alertmanager) GetReceivers(ctx context.Context) ([]apimodels.Receiver, error) { - params := amreceiver.NewGetReceiversParamsWithContext(ctx) - res, err := am.amClient.Receiver.GetReceivers(params) - if err != nil { - return []apimodels.Receiver{}, err - } - - rcvs := make([]apimodels.Receiver, len(res.Payload)) - for i, rcv := range res.Payload { - rcvs[i] = apimodels.Receiver{ - Name: *rcv.Name, - Integrations: []apimodels.Integration{}, - } - } - - return rcvs, nil + return am.mimirClient.GetReceivers(ctx) } func (am *Alertmanager) TestReceivers(ctx context.Context, c apimodels.TestReceiversConfigBodyParams) (*notifier.TestReceiversResult, error) { diff --git a/pkg/services/ngalert/remote/alertmanager_test.go b/pkg/services/ngalert/remote/alertmanager_test.go index 5016ab49e38..9617a0f820d 100644 --- a/pkg/services/ngalert/remote/alertmanager_test.go +++ b/pkg/services/ngalert/remote/alertmanager_test.go @@ -717,7 +717,13 @@ func TestIntegrationRemoteAlertmanagerReceivers(t *testing.T) { // We should start with the default config. rcvs, err := am.GetReceivers(context.Background()) require.NoError(t, err) - require.Equal(t, "empty-receiver", rcvs[0].Name) + require.Equal(t, []apimodels.Receiver{ + { + Active: true, + Name: "empty-receiver", + Integrations: []apimodels.Integration{}, + }, + }, rcvs) } func genAlert(active bool, labels map[string]string) amv2.PostableAlert { diff --git a/pkg/services/ngalert/remote/client/alertmanager_configuration.go b/pkg/services/ngalert/remote/client/alertmanager_configuration.go index f3a66451163..ebb61ce9196 100644 --- a/pkg/services/ngalert/remote/client/alertmanager_configuration.go +++ b/pkg/services/ngalert/remote/client/alertmanager_configuration.go @@ -11,7 +11,8 @@ import ( ) const ( - grafanaAlertmanagerConfigPath = "/api/v1/grafana/config" + grafanaAlertmanagerConfigPath = "/api/v1/grafana/config" + grafanaAlertmanagerReceiversPath = "/api/v1/grafana/receivers" ) type UserGrafanaConfig struct { @@ -63,3 +64,16 @@ func (mc *Mimir) CreateGrafanaAlertmanagerConfig(ctx context.Context, cfg *apimo func (mc *Mimir) DeleteGrafanaAlertmanagerConfig(ctx context.Context) error { return mc.doOK(ctx, grafanaAlertmanagerConfigPath, http.MethodDelete, nil) } + +func (mc *Mimir) GetReceivers(ctx context.Context) ([]apimodels.Receiver, error) { + response := []apimodels.Receiver{} + + // nolint:bodyclose + // closed within `do` + _, err := mc.do(ctx, grafanaAlertmanagerReceiversPath, http.MethodGet, nil, &response) + if err != nil { + return nil, err + } + + return response, nil +} diff --git a/pkg/services/ngalert/remote/client/mimir.go b/pkg/services/ngalert/remote/client/mimir.go index cf0a0941652..1fda8206c4d 100644 --- a/pkg/services/ngalert/remote/client/mimir.go +++ b/pkg/services/ngalert/remote/client/mimir.go @@ -29,6 +29,9 @@ type MimirClient interface { DeleteGrafanaAlertmanagerConfig(ctx context.Context) error ShouldPromoteConfig() bool + + // Mimir implements an extended version of the receivers API under a different path. + GetReceivers(ctx context.Context) ([]apimodels.Receiver, error) } type Mimir struct { diff --git a/scripts/drone/utils/images.star b/scripts/drone/utils/images.star index 3a0114cb442..5f85f735b08 100644 --- a/scripts/drone/utils/images.star +++ b/scripts/drone/utils/images.star @@ -21,7 +21,7 @@ images = { "plugins_slack": "plugins/slack", "python": "python:3.8", "postgres_alpine": "postgres:12.3-alpine", - "mimir": "us.gcr.io/kubernetes-dev/mimir:santihernandezc-validate_grafana_am_config-1e903e462-WIP", + "mimir": "grafana/mimir-alpine:r295-a23e559", "mysql5": "mysql:5.7.39", "mysql8": "mysql:8.0.32", "redis_alpine": "redis:6.2.11-alpine",