diff --git a/rules/alerting.go b/rules/alerting.go index fdd3d00a88..b102ee4cab 100644 --- a/rules/alerting.go +++ b/rules/alerting.go @@ -110,6 +110,10 @@ func (rule *AlertingRule) Name() string { return rule.name } +func (r *AlertingRule) equal(o *AlertingRule) bool { + return r.name == o.name && r.labels.Equal(o.labels) +} + func (r *AlertingRule) sample(alert *Alert, ts model.Time, set bool) *model.Sample { metric := model.Metric(r.labels.Clone()) diff --git a/rules/manager.go b/rules/manager.go index 0e2542f6a9..d1736dd6fa 100644 --- a/rules/manager.go +++ b/rules/manager.go @@ -212,8 +212,12 @@ func (g *Group) copyState(from *Group) { if !ok { continue } - if far.Name() == ar.Name() { - ar.active = far.active + // TODO(fabxc): forbid same alert definitions that are not unique by + // at least on static label or alertname? + if far.equal(ar) { + for fp, a := range far.active { + ar.active[fp] = a + } } } }