diff --git a/pkg/services/ngalert/notifier/alertmanager.go b/pkg/services/ngalert/notifier/alertmanager.go index cbd42c50604..37794f5c73c 100644 --- a/pkg/services/ngalert/notifier/alertmanager.go +++ b/pkg/services/ngalert/notifier/alertmanager.go @@ -55,29 +55,6 @@ const ( defaultResolveTimeout = 5 * time.Minute // memoryAlertsGCInterval is the interval at which we'll remove resolved alerts from memory. memoryAlertsGCInterval = 30 * time.Minute - // To start, the alertmanager needs at least one route defined. - // TODO: we should move this to Grafana settings and define this as the default. - alertmanagerDefaultConfiguration = ` -{ - "alertmanager_config": { - "route": { - "receiver": "grafana-default-email" - }, - "receivers": [{ - "name": "grafana-default-email", - "grafana_managed_receiver_configs": [{ - "uid": "", - "name": "email receiver", - "type": "email", - "isDefault": true, - "settings": { - "addresses": "" - } - }] - }] - } -} -` ) type ClusterPeer interface { @@ -252,19 +229,19 @@ func (am *Alertmanager) SaveAndApplyDefaultConfig() error { defer am.reloadConfigMtx.Unlock() cmd := &ngmodels.SaveAlertmanagerConfigurationCmd{ - AlertmanagerConfiguration: alertmanagerDefaultConfiguration, + AlertmanagerConfiguration: am.Settings.UnifiedAlerting.DefaultConfiguration, Default: true, ConfigurationVersion: fmt.Sprintf("v%d", ngmodels.AlertConfigurationVersion), OrgID: am.orgID, } - cfg, err := Load([]byte(alertmanagerDefaultConfiguration)) + cfg, err := Load([]byte(am.Settings.UnifiedAlerting.DefaultConfiguration)) if err != nil { return err } err = am.Store.SaveAlertmanagerConfigurationWithCallback(cmd, func() error { - if err := am.applyConfig(cfg, []byte(alertmanagerDefaultConfiguration)); err != nil { + if err := am.applyConfig(cfg, []byte(am.Settings.UnifiedAlerting.DefaultConfiguration)); err != nil { return err } return nil diff --git a/pkg/services/ngalert/notifier/multiorg_alertmanager_test.go b/pkg/services/ngalert/notifier/multiorg_alertmanager_test.go index de9f4e0afd5..5e4c2ecba45 100644 --- a/pkg/services/ngalert/notifier/multiorg_alertmanager_test.go +++ b/pkg/services/ngalert/notifier/multiorg_alertmanager_test.go @@ -33,7 +33,7 @@ func TestMultiOrgAlertmanager_SyncAlertmanagersForOrgs(t *testing.T) { m := metrics.NewNGAlert(reg) cfg := &setting.Cfg{ DataPath: tmpDir, - UnifiedAlerting: setting.UnifiedAlertingSettings{AlertmanagerConfigPollInterval: 3 * time.Minute}, // do not poll in tests. + UnifiedAlerting: setting.UnifiedAlertingSettings{AlertmanagerConfigPollInterval: 3 * time.Minute, DefaultConfiguration: setting.AlertmanagerDefaultConfiguration}, // do not poll in tests. } mam, err := NewMultiOrgAlertmanager(cfg, configStore, orgStore, kvStore, m.GetMultiOrgAlertmanagerMetrics(), log.New("testlogger")) require.NoError(t, err) @@ -95,7 +95,7 @@ func TestMultiOrgAlertmanager_AlertmanagerFor(t *testing.T) { require.NoError(t, err) cfg := &setting.Cfg{ DataPath: tmpDir, - UnifiedAlerting: setting.UnifiedAlertingSettings{AlertmanagerConfigPollInterval: 3 * time.Minute}, // do not poll in tests. + UnifiedAlerting: setting.UnifiedAlertingSettings{AlertmanagerConfigPollInterval: 3 * time.Minute, DefaultConfiguration: setting.AlertmanagerDefaultConfiguration}, // do not poll in tests. } kvStore := newFakeKVStore(t) reg := prometheus.NewPedanticRegistry() diff --git a/pkg/setting/setting_unified_alerting.go b/pkg/setting/setting_unified_alerting.go index 68b34e78a84..637e7d96998 100644 --- a/pkg/setting/setting_unified_alerting.go +++ b/pkg/setting/setting_unified_alerting.go @@ -17,6 +17,28 @@ const ( AlertmanagerDefaultPushPullInterval = cluster.DefaultPushPullInterval SchedulerDefaultAdminConfigPollInterval = 60 * time.Second AlertmanagerDefaultConfigPollInterval = 60 * time.Second + // To start, the alertmanager needs at least one route defined. + // TODO: we should move this to Grafana settings and define this as the default. + AlertmanagerDefaultConfiguration = `{ + "alertmanager_config": { + "route": { + "receiver": "grafana-default-email" + }, + "receivers": [{ + "name": "grafana-default-email", + "grafana_managed_receiver_configs": [{ + "uid": "", + "name": "email receiver", + "type": "email", + "isDefault": true, + "settings": { + "addresses": "" + } + }] + }] + } +} +` ) type UnifiedAlertingSettings struct { @@ -28,6 +50,7 @@ type UnifiedAlertingSettings struct { HAPeerTimeout time.Duration HAGossipInterval time.Duration HAPushPullInterval time.Duration + DefaultConfiguration string } func (cfg *Cfg) ReadUnifiedAlertingSettings(iniFile *ini.File) error { @@ -64,6 +87,8 @@ func (cfg *Cfg) ReadUnifiedAlertingSettings(iniFile *ini.File) error { uaCfg.HAPeers = append(uaCfg.HAPeers, peer) } } + // TODO load from ini file + uaCfg.DefaultConfiguration = AlertmanagerDefaultConfiguration cfg.UnifiedAlerting = uaCfg return nil }