prometheus / prometheus/alertmanager

Optional abandon of long-undelivered notifications to protect receivers after outages

Open
#5,134 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

component/notify
Dominant language
Go
Stars
8.6k
Forks
2.5k
Avg merge
2d 6h
Merged PRs (30d)
61

Description

Proposal

Problem

When a notification receiver or the network path to it is unavailable for a long time, Alertmanager keeps retrying delivery. After connectivity returns, those retries can produce a large burst of stale notifications to webhooks, on-call systems, and other integrations. In practice this can overwhelm the receiver (rate limits, overload) and creates noise from alerts that are no longer actionable in the same form.

This is distinct from normal group_wait / group_interval behaviour: it is about prolonged total delivery failure, not steady-state grouping.

Proposal

Add an opt-in mechanism (global configuration) that:

  1. Tracks the wall-clock time since the first failed delivery attempt for a given notification key.
  2. After a configurable duration, stops calling the integration for that key (“abandon”) instead of retrying indefinitely.
  3. While abandoned, suppresses further delivery attempts for the same firing alert set without calling the integration, so recovery does not turn into a storm of HTTP calls.
  4. Clears or resets state when it is no longer relevant (e.g. firing set changes, group no longer firing), so legitimate new or changed alerts can still be delivered.

Default behaviour when the feature is disabled should remain identical to today.

Configuration (sketch)

Proposed global settings (names can be bikeshedded in the PR):

  • abandon_undelivered_notifications: <bool> — enable the feature.
  • abandon_undelivered_after: <duration> — time from first failure after which delivery is abandoned (must be positive when enabled).

Observability

New or extended metrics should make it possible to see abandons and suppressions after abandon, e.g. counters along the lines of:

  • notifications_abandoned_total
  • notifications_abandoned_suppressed_total

Use case

Datacenter or regional outage, receiver maintenance, or long integration outage → Alertmanager cannot deliver → when the path is healthy again, operators want to avoid DDOS-ing their own receivers with a backlog of stale notifications.


I am willing to submit a PR implementing this if the approach is acceptable to maintainers.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No files, tests, or entry points are named. Start by locating Alertmanager’s notification delivery and retry path, then define how configuration, abandonment state, reset conditions, suppression behavior, metrics, and disabled-by-default compatibility should be tested and documented.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
backend, observability
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.