diff --git a/go.mod b/go.mod index 36d4f5a82ed..6fce69ca4d8 100644 --- a/go.mod +++ b/go.mod @@ -326,7 +326,7 @@ replace github.com/opentracing-contrib/go-stdlib => github.com/grafana/opentraci replace github.com/opentracing-contrib/go-grpc => github.com/charleskorn/go-grpc v0.0.0-20231024023642-e9298576254f // Replacing prometheus/alertmanager with our fork. -replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250211112812-e32be5e2a455 +replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250305143719-fa9fa7096626 // Replacing with a fork commit based on v1.17.1 having cherry-picked the following PRs: // - https://github.com/grafana/franz-go/pull/1 diff --git a/go.sum b/go.sum index 11fe4e41a46..22e0eff82df 100644 --- a/go.sum +++ b/go.sum @@ -1288,8 +1288,8 @@ github.com/grafana/mimir-prometheus v0.0.0-20250304035310-4c85ad035a73 h1:xojy4g github.com/grafana/mimir-prometheus v0.0.0-20250304035310-4c85ad035a73/go.mod h1:9SIFvqYMa125MSHK5SAEnOGLDikyUMk4tHUQjZtbhs8= github.com/grafana/opentracing-contrib-go-stdlib v0.0.0-20230509071955-f410e79da956 h1:em1oddjXL8c1tL0iFdtVtPloq2hRPen2MJQKoAWpxu0= github.com/grafana/opentracing-contrib-go-stdlib v0.0.0-20230509071955-f410e79da956/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= -github.com/grafana/prometheus-alertmanager v0.25.1-0.20250211112812-e32be5e2a455 h1:yidC1xzk4fedLZ/iXEqSJopkw3jPZPwoMqqzue4eFEA= -github.com/grafana/prometheus-alertmanager v0.25.1-0.20250211112812-e32be5e2a455/go.mod h1:FGdGvhI40Dq+CTQaSzK9evuve774cgOUdGfVO04OXkw= +github.com/grafana/prometheus-alertmanager v0.25.1-0.20250305143719-fa9fa7096626 h1:QsMYtDseSPq8hXvoNtA64unFiawJaE5kryizcMsVZWg= +github.com/grafana/prometheus-alertmanager v0.25.1-0.20250305143719-fa9fa7096626/go.mod h1:FGdGvhI40Dq+CTQaSzK9evuve774cgOUdGfVO04OXkw= github.com/grafana/pyroscope-go/godeltaprof v0.1.8 h1:iwOtYXeeVSAeYefJNaxDytgjKtUuKQbJqgAIjlnicKg= github.com/grafana/pyroscope-go/godeltaprof v0.1.8/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/grafana/regexp v0.0.0-20240531075221-3685f1377d7b h1:oMAq12GxTpwo9jxbnG/M4F/HdpwbibTaVoxNA0NZprY= diff --git a/vendor/github.com/prometheus/alertmanager/dispatch/dispatch.go b/vendor/github.com/prometheus/alertmanager/dispatch/dispatch.go index ffb87dad164..ff98a4db8c6 100644 --- a/vendor/github.com/prometheus/alertmanager/dispatch/dispatch.go +++ b/vendor/github.com/prometheus/alertmanager/dispatch/dispatch.go @@ -539,14 +539,17 @@ func (ag *aggrGroup) flush(notify func(...*types.Alert) bool) { } var ( - alerts = ag.alerts.List() - alertsSlice = make(types.AlertSlice, 0, len(alerts)) - now = time.Now() + alerts = ag.alerts.List() + alertsSlice = make(types.AlertSlice, 0, len(alerts)) + resolvedSlice = make(types.AlertSlice, 0, len(alerts)) + now = time.Now() ) for _, alert := range alerts { a := *alert // Ensure that alerts don't resolve as time move forwards. - if !a.ResolvedAt(now) { + if a.ResolvedAt(now) { + resolvedSlice = append(resolvedSlice, &a) + } else { a.EndsAt = time.Time{} } alertsSlice = append(alertsSlice, &a) @@ -556,21 +559,12 @@ func (ag *aggrGroup) flush(notify func(...*types.Alert) bool) { level.Debug(ag.logger).Log("msg", "flushing", "alerts", fmt.Sprintf("%v", alertsSlice)) if notify(alertsSlice...) { - for _, a := range alertsSlice { - // Only delete if the fingerprint has not been inserted - // again since we notified about it. - fp := a.Fingerprint() - got, err := ag.alerts.Get(fp) - if err != nil { - // This should never happen. - level.Error(ag.logger).Log("msg", "failed to get alert", "err", err, "alert", a.String()) - continue - } - if a.Resolved() && got.UpdatedAt == a.UpdatedAt { - if err := ag.alerts.Delete(fp); err != nil { - level.Error(ag.logger).Log("msg", "error on delete alert", "err", err, "alert", a.String()) - } - } + // Delete all resolved alerts as we just sent a notification for them, + // and we don't want to send another one. However, we need to make sure + // that each resolved alert has not fired again during the flush as then + // we would delete an active alert thinking it was resolved. + if err := ag.alerts.DeleteIfNotModified(resolvedSlice); err != nil { + level.Error(ag.logger).Log("msg", "error on delete alerts", "err", err) } } } diff --git a/vendor/github.com/prometheus/alertmanager/store/store.go b/vendor/github.com/prometheus/alertmanager/store/store.go index 9b30542f995..5de0c3eebef 100644 --- a/vendor/github.com/prometheus/alertmanager/store/store.go +++ b/vendor/github.com/prometheus/alertmanager/store/store.go @@ -114,12 +114,17 @@ func (a *Alerts) Set(alert *types.Alert) error { return nil } -// Delete removes the Alert with the matching fingerprint from the store. -func (a *Alerts) Delete(fp model.Fingerprint) error { +// DeleteIfNotModified deletes the slice of Alerts from the store if not +// modified. +func (a *Alerts) DeleteIfNotModified(alerts types.AlertSlice) error { a.Lock() defer a.Unlock() - - delete(a.c, fp) + for _, alert := range alerts { + fp := alert.Fingerprint() + if other, ok := a.c[fp]; ok && alert.UpdatedAt == other.UpdatedAt { + delete(a.c, fp) + } + } return nil } diff --git a/vendor/modules.txt b/vendor/modules.txt index 8bcc2ad23cf..305fe6fd6c9 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -991,7 +991,7 @@ github.com/pmezard/go-difflib/difflib # github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c ## explicit; go 1.14 github.com/power-devops/perfstat -# github.com/prometheus/alertmanager v0.27.0 => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250211112812-e32be5e2a455 +# github.com/prometheus/alertmanager v0.27.0 => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250305143719-fa9fa7096626 ## explicit; go 1.22 github.com/prometheus/alertmanager/api github.com/prometheus/alertmanager/api/metrics @@ -1770,6 +1770,6 @@ sigs.k8s.io/yaml/goyaml.v3 # github.com/munnerz/goautoneg => github.com/grafana/goautoneg v0.0.0-20240607115440-f335c04c58ce # github.com/opentracing-contrib/go-stdlib => github.com/grafana/opentracing-contrib-go-stdlib v0.0.0-20230509071955-f410e79da956 # github.com/opentracing-contrib/go-grpc => github.com/charleskorn/go-grpc v0.0.0-20231024023642-e9298576254f -# github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250211112812-e32be5e2a455 +# github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20250305143719-fa9fa7096626 # github.com/twmb/franz-go => github.com/grafana/franz-go v0.0.0-20241009100846-782ba1442937 # google.golang.org/grpc => google.golang.org/grpc v1.65.0