Alerting: Move the unified alerting settings to its own struct (#39350)

This commit is contained in:
gotjosh 2021-09-20 08:12:21 +01:00 committed by GitHub
parent f3002931f4
commit 2ad82b9354
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 47 additions and 42 deletions

View File

@ -122,7 +122,7 @@ func (ng *AlertNG) init() error {
OrgStore: store, OrgStore: store,
MultiOrgNotifier: ng.MultiOrgAlertmanager, MultiOrgNotifier: ng.MultiOrgAlertmanager,
Metrics: ng.Metrics.GetSchedulerMetrics(), Metrics: ng.Metrics.GetSchedulerMetrics(),
AdminConfigPollInterval: ng.Cfg.AdminConfigPollInterval, AdminConfigPollInterval: ng.Cfg.UnifiedAlerting.AdminConfigPollInterval,
} }
stateManager := state.NewManager(ng.Log, ng.Metrics.GetStateMetrics(), store, store) stateManager := state.NewManager(ng.Log, ng.Metrics.GetStateMetrics(), store, store)
schedule := schedule.NewScheduler(schedCfg, ng.DataService, ng.Cfg.AppURL, stateManager) schedule := schedule.NewScheduler(schedCfg, ng.DataService, ng.Cfg.AppURL, stateManager)

View File

@ -133,7 +133,7 @@ func newAlertmanager(orgID int64, cfg *setting.Cfg, store store.AlertingStore, k
dispatcherMetrics: dispatch.NewDispatcherMetrics(false, m.Registerer), dispatcherMetrics: dispatch.NewDispatcherMetrics(false, m.Registerer),
Store: store, Store: store,
peer: peer, peer: peer,
peerTimeout: cfg.HAPeerTimeout, peerTimeout: cfg.UnifiedAlerting.HAPeerTimeout,
Metrics: m, Metrics: m,
orgID: orgID, orgID: orgID,
} }

View File

@ -55,16 +55,16 @@ func NewMultiOrgAlertmanager(cfg *setting.Cfg, configStore store.AlertingStore,
clusterLogger := gokit_log.With(gokit_log.NewLogfmtLogger(logging.NewWrapper(l)), "component", "cluster") clusterLogger := gokit_log.With(gokit_log.NewLogfmtLogger(logging.NewWrapper(l)), "component", "cluster")
moa.peer = &NilPeer{} moa.peer = &NilPeer{}
if len(cfg.HAPeers) > 0 { if len(cfg.UnifiedAlerting.HAPeers) > 0 {
peer, err := cluster.Create( peer, err := cluster.Create(
clusterLogger, clusterLogger,
m.Registerer, m.Registerer,
cfg.HAListenAddr, cfg.UnifiedAlerting.HAListenAddr,
cfg.HAAdvertiseAddr, cfg.UnifiedAlerting.HAAdvertiseAddr,
cfg.HAPeers, // peers cfg.UnifiedAlerting.HAPeers, // peers
true, true,
cfg.HAPushPullInterval, cfg.UnifiedAlerting.HAPushPullInterval,
cfg.HAGossipInterval, cfg.UnifiedAlerting.HAGossipInterval,
cluster.DefaultTcpTimeout, cluster.DefaultTcpTimeout,
cluster.DefaultProbeTimeout, cluster.DefaultProbeTimeout,
cluster.DefaultProbeInterval, cluster.DefaultProbeInterval,
@ -98,7 +98,7 @@ func (moa *MultiOrgAlertmanager) Run(ctx context.Context) error {
case <-ctx.Done(): case <-ctx.Done():
moa.StopAndWait() moa.StopAndWait()
return nil return nil
case <-time.After(moa.settings.AlertmanagerConfigPollInterval): case <-time.After(moa.settings.UnifiedAlerting.AlertmanagerConfigPollInterval):
if err := moa.LoadAndSyncAlertmanagersForOrgs(ctx); err != nil { if err := moa.LoadAndSyncAlertmanagersForOrgs(ctx); err != nil {
moa.logger.Error("error while synchronizing Alertmanager orgs", "err", err) moa.logger.Error("error while synchronizing Alertmanager orgs", "err", err)
} }

View File

@ -33,7 +33,7 @@ func TestMultiOrgAlertmanager_SyncAlertmanagersForOrgs(t *testing.T) {
m := metrics.NewNGAlert(reg) m := metrics.NewNGAlert(reg)
cfg := &setting.Cfg{ cfg := &setting.Cfg{
DataPath: tmpDir, DataPath: tmpDir,
AlertmanagerConfigPollInterval: 3 * time.Minute, // do not poll in tests UnifiedAlerting: setting.UnifiedAlertingSettings{AlertmanagerConfigPollInterval: 3 * time.Minute}, // do not poll in tests.
} }
mam, err := NewMultiOrgAlertmanager(cfg, configStore, orgStore, kvStore, m.GetMultiOrgAlertmanagerMetrics(), log.New("testlogger")) mam, err := NewMultiOrgAlertmanager(cfg, configStore, orgStore, kvStore, m.GetMultiOrgAlertmanagerMetrics(), log.New("testlogger"))
require.NoError(t, err) require.NoError(t, err)
@ -95,7 +95,7 @@ func TestMultiOrgAlertmanager_AlertmanagerFor(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
cfg := &setting.Cfg{ cfg := &setting.Cfg{
DataPath: tmpDir, DataPath: tmpDir,
AlertmanagerConfigPollInterval: 3 * time.Minute, // do not poll in tests UnifiedAlerting: setting.UnifiedAlertingSettings{AlertmanagerConfigPollInterval: 3 * time.Minute}, // do not poll in tests.
} }
kvStore := newFakeKVStore(t) kvStore := newFakeKVStore(t)
reg := prometheus.NewPedanticRegistry() reg := prometheus.NewPedanticRegistry()

View File

@ -419,14 +419,7 @@ type Cfg struct {
GeomapEnableCustomBaseLayers bool GeomapEnableCustomBaseLayers bool
// Unified Alerting // Unified Alerting
AdminConfigPollInterval time.Duration UnifiedAlerting UnifiedAlertingSettings
AlertmanagerConfigPollInterval time.Duration
HAListenAddr string
HAAdvertiseAddr string
HAPeers []string
HAPeerTimeout time.Duration
HAGossipInterval time.Duration
HAPushPullInterval time.Duration
} }
// IsLiveConfigEnabled returns true if live should be able to save configs to SQL tables // IsLiveConfigEnabled returns true if live should be able to save configs to SQL tables

View File

@ -19,39 +19,51 @@ const (
AlertmanagerDefaultConfigPollInterval = 60 * time.Second AlertmanagerDefaultConfigPollInterval = 60 * time.Second
) )
type UnifiedAlertingSettings struct {
AdminConfigPollInterval time.Duration
AlertmanagerConfigPollInterval time.Duration
HAListenAddr string
HAAdvertiseAddr string
HAPeers []string
HAPeerTimeout time.Duration
HAGossipInterval time.Duration
HAPushPullInterval time.Duration
}
func (cfg *Cfg) ReadUnifiedAlertingSettings(iniFile *ini.File) error { func (cfg *Cfg) ReadUnifiedAlertingSettings(iniFile *ini.File) error {
uaCfg := UnifiedAlertingSettings{}
ua := iniFile.Section("unified_alerting") ua := iniFile.Section("unified_alerting")
var err error var err error
cfg.AdminConfigPollInterval, err = gtime.ParseDuration(valueAsString(ua, "admin_config_poll_interval", (SchedulerDefaultAdminConfigPollInterval).String())) uaCfg.AdminConfigPollInterval, err = gtime.ParseDuration(valueAsString(ua, "admin_config_poll_interval", (SchedulerDefaultAdminConfigPollInterval).String()))
if err != nil { if err != nil {
return err return err
} }
cfg.AlertmanagerConfigPollInterval, err = gtime.ParseDuration(valueAsString(ua, "alertmanager_config_poll_interval", (AlertmanagerDefaultConfigPollInterval).String())) uaCfg.AlertmanagerConfigPollInterval, err = gtime.ParseDuration(valueAsString(ua, "alertmanager_config_poll_interval", (AlertmanagerDefaultConfigPollInterval).String()))
if err != nil { if err != nil {
return err return err
} }
cfg.HAPeerTimeout, err = gtime.ParseDuration(valueAsString(ua, "ha_peer_timeout", (AlertmanagerDefaultPeerTimeout).String())) uaCfg.HAPeerTimeout, err = gtime.ParseDuration(valueAsString(ua, "ha_peer_timeout", (AlertmanagerDefaultPeerTimeout).String()))
if err != nil { if err != nil {
return err return err
} }
cfg.HAGossipInterval, err = gtime.ParseDuration(valueAsString(ua, "ha_gossip_interval", (AlertmanagerDefaultGossipInterval).String())) uaCfg.HAGossipInterval, err = gtime.ParseDuration(valueAsString(ua, "ha_gossip_interval", (AlertmanagerDefaultGossipInterval).String()))
if err != nil { if err != nil {
return err return err
} }
cfg.HAPushPullInterval, err = gtime.ParseDuration(valueAsString(ua, "ha_push_pull_interval", (AlertmanagerDefaultPushPullInterval).String())) uaCfg.HAPushPullInterval, err = gtime.ParseDuration(valueAsString(ua, "ha_push_pull_interval", (AlertmanagerDefaultPushPullInterval).String()))
if err != nil { if err != nil {
return err return err
} }
cfg.HAListenAddr = ua.Key("ha_listen_address").MustString(AlertmanagerDefaultClusterAddr) uaCfg.HAListenAddr = ua.Key("ha_listen_address").MustString(AlertmanagerDefaultClusterAddr)
cfg.HAAdvertiseAddr = ua.Key("ha_advertise_address").MustString("") uaCfg.HAAdvertiseAddr = ua.Key("ha_advertise_address").MustString("")
peers := ua.Key("ha_peers").MustString("") peers := ua.Key("ha_peers").MustString("")
cfg.HAPeers = make([]string, 0) uaCfg.HAPeers = make([]string, 0)
if peers != "" { if peers != "" {
for _, peer := range strings.Split(peers, ",") { for _, peer := range strings.Split(peers, ",") {
peer = strings.TrimSpace(peer) peer = strings.TrimSpace(peer)
cfg.HAPeers = append(cfg.HAPeers, peer) uaCfg.HAPeers = append(uaCfg.HAPeers, peer)
} }
} }
cfg.UnifiedAlerting = uaCfg
return nil return nil
} }

View File

@ -14,26 +14,26 @@ func TestCfg_ReadUnifiedAlertingSettings(t *testing.T) {
// It sets the correct defaults. // It sets the correct defaults.
{ {
require.Equal(t, 60*time.Second, cfg.AdminConfigPollInterval) require.Equal(t, 60*time.Second, cfg.UnifiedAlerting.AdminConfigPollInterval)
require.Equal(t, 60*time.Second, cfg.AlertmanagerConfigPollInterval) require.Equal(t, 60*time.Second, cfg.UnifiedAlerting.AlertmanagerConfigPollInterval)
require.Equal(t, 15*time.Second, cfg.HAPeerTimeout) require.Equal(t, 15*time.Second, cfg.UnifiedAlerting.HAPeerTimeout)
require.Equal(t, "0.0.0.0:9094", cfg.HAListenAddr) require.Equal(t, "0.0.0.0:9094", cfg.UnifiedAlerting.HAListenAddr)
require.Equal(t, "", cfg.HAAdvertiseAddr) require.Equal(t, "", cfg.UnifiedAlerting.HAAdvertiseAddr)
require.Len(t, cfg.HAPeers, 0) require.Len(t, cfg.UnifiedAlerting.HAPeers, 0)
require.Equal(t, 200*time.Millisecond, cfg.HAGossipInterval) require.Equal(t, 200*time.Millisecond, cfg.UnifiedAlerting.HAGossipInterval)
require.Equal(t, 60*time.Second, cfg.HAPushPullInterval) require.Equal(t, 60*time.Second, cfg.UnifiedAlerting.HAPushPullInterval)
} }
// With peers set, it correctly parses them. // With peers set, it correctly parses them.
{ {
require.Len(t, cfg.HAPeers, 0) require.Len(t, cfg.UnifiedAlerting.HAPeers, 0)
s, err := cfg.Raw.NewSection("unified_alerting") s, err := cfg.Raw.NewSection("unified_alerting")
require.NoError(t, err) require.NoError(t, err)
_, err = s.NewKey("ha_peers", "hostname1:9090,hostname2:9090,hostname3:9090") _, err = s.NewKey("ha_peers", "hostname1:9090,hostname2:9090,hostname3:9090")
require.NoError(t, err) require.NoError(t, err)
require.NoError(t, cfg.ReadUnifiedAlertingSettings(cfg.Raw)) require.NoError(t, cfg.ReadUnifiedAlertingSettings(cfg.Raw))
require.Len(t, cfg.HAPeers, 3) require.Len(t, cfg.UnifiedAlerting.HAPeers, 3)
require.ElementsMatch(t, []string{"hostname1:9090", "hostname2:9090", "hostname3:9090"}, cfg.HAPeers) require.ElementsMatch(t, []string{"hostname1:9090", "hostname2:9090", "hostname3:9090"}, cfg.UnifiedAlerting.HAPeers)
} }
} }