mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
fix drop alertmanager on apply config step
Signed-off-by: tommy0 <tommy0@mail.ru>
This commit is contained in:
parent
ab2a7bb74f
commit
7fe64e9d65
|
@ -264,6 +264,14 @@ func (n *Manager) ApplyConfig(conf *config.Config) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If alertmanagers already exists, don't skip it, in reload step will be refreshed new targets.
|
||||||
|
oldAmSets, ok := n.alertmanagers[k]
|
||||||
|
if ok {
|
||||||
|
oldAmSets.mtx.RLock()
|
||||||
|
ams.ams = oldAmSets.ams
|
||||||
|
oldAmSets.mtx.RUnlock()
|
||||||
|
}
|
||||||
|
|
||||||
amSets[k] = ams
|
amSets[k] = ams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -502,6 +502,68 @@ alerting:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReApplyConfig(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
in *targetgroup.Group
|
||||||
|
out string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
in: &targetgroup.Group{
|
||||||
|
Targets: []model.LabelSet{
|
||||||
|
{
|
||||||
|
"__address__": "alertmanager:9093",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
out: "http://alertmanager:9093/api/v2/alerts",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
n := NewManager(&Options{}, nil)
|
||||||
|
|
||||||
|
cfg := &config.Config{}
|
||||||
|
s := `
|
||||||
|
alerting:
|
||||||
|
alertmanagers:
|
||||||
|
- static_configs:
|
||||||
|
`
|
||||||
|
err := yaml.UnmarshalStrict([]byte(s), cfg)
|
||||||
|
require.NoError(t, err, "Unable to load YAML config.")
|
||||||
|
require.Equal(t, 1, len(cfg.AlertingConfig.AlertmanagerConfigs))
|
||||||
|
|
||||||
|
// First apply config.
|
||||||
|
err = n.ApplyConfig(cfg)
|
||||||
|
require.NoError(t, err, "Error applying the config.")
|
||||||
|
|
||||||
|
tgs := make(map[string][]*targetgroup.Group)
|
||||||
|
for _, tt := range tests {
|
||||||
|
for k := range cfg.AlertingConfig.AlertmanagerConfigs.ToMap() {
|
||||||
|
tgs[k] = []*targetgroup.Group{
|
||||||
|
tt.in,
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
// Try reload for new alertmanagers.
|
||||||
|
n.reload(tgs)
|
||||||
|
res := n.Alertmanagers()[0].String()
|
||||||
|
|
||||||
|
require.Equal(t, tt.out, res)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reapply config.
|
||||||
|
err = n.ApplyConfig(cfg)
|
||||||
|
require.NoError(t, err, "Error reapplying the config.")
|
||||||
|
|
||||||
|
// Check that alertmanagers list not empty before next reload apply.
|
||||||
|
for _, tt := range tests {
|
||||||
|
require.Equal(t, len(n.Alertmanagers()), 1, "Alertmanagers list must not be empty")
|
||||||
|
|
||||||
|
res := n.Alertmanagers()[0].String()
|
||||||
|
|
||||||
|
require.Equal(t, tt.out, res)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDroppedAlertmanagers(t *testing.T) {
|
func TestDroppedAlertmanagers(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
in *targetgroup.Group
|
in *targetgroup.Group
|
||||||
|
|
Loading…
Reference in a new issue