3 — Alertmanager
Prometheus itself only evaluates rules and decides whether a rule’s state is inactive, pending, or
firing, as covered in Alerting Rules. It does not decide who gets paged, how
often, or whether ten related alerts become ten separate notifications or one. That job belongs to
Alertmanager, which sits downstream of Prometheus and receives a stream of firing (and resolving)
alerts to act on. Three configuration options — group_wait, group_interval, and
repeat_interval — are what actually control that behavior, and they are also the three settings
people confuse most often, because all three are “how long to wait before sending,” just at
different points in an alert’s life.
Why Grouping Exists at All
Prometheus alerts fire per time series, not per underlying incident. If a process crashes across ten instances in the same data center, that’s ten separate firing alert instances hitting Alertmanager, not one. Sending ten separate notifications for what a human recognizes instantly as a single incident is exactly the kind of pager noise that erodes trust in alerting. Alertmanager’s answer is to group related alerts by shared labels before they ever reach a receiver:
group_by: ['alertname', 'job']
Every alert instance whose alertname and job labels match gets folded into the same group and,
from a notification standpoint, treated as one unit. What remains to be decided is when that group
actually sends a notification — and that’s where group_wait and group_interval come in.
Grouping Mechanics: group_wait and group_interval
group_wait governs the very first notification for a brand-new group. Rather than firing a
notification the instant the first alert in a group arrives, Alertmanager waits — buffering — for a
short window, giving other alerts that belong to the same group a chance to arrive and be included
in that same first notification. This is what turns “ten separate pages over the next ninety seconds
as ten instances crash one by one” into “one page covering all ten.”
group_by: ['alertname', 'job']
group_wait: 45s # Usually set between ~0s to a few minutes.
The trade-off is explicit: a longer group_wait catches more of the group before the first page
goes out, but it also delays how quickly anyone finds out something is wrong at all. There’s no
universally correct value — it’s a deliberate trade between completeness of the first notification
and its latency.
group_interval governs everything after that first notification. A rule group is re-evaluated
on its own cadence (see Alerting Rules for the pending/firing mechanics behind
that), which means new alert instances can join an already-notified group at any point afterward — a
fourth instance of the same crash, say, discovered on the next evaluation. Without any control here,
each newly joined alert would trigger its own immediate notification, defeating the point of
grouping in the first place. group_interval sets how long Alertmanager waits, from the last
notification sent for that group, before sending an update that covers whatever new alerts have
joined it since:
group_by: ['instance', 'job']
group_wait: 45s
group_interval: 10m # Usually ~5 mins or more.
So group_wait is about assembling the first notification for a group; group_interval is about
batching updates to a group that’s already been notified once.
Deduplication: repeat_interval
Grouping controls how alerts are batched together in a single notification. repeat_interval
controls something different: how long Alertmanager will wait before re-sending a notification for
an alert that is still firing and has already been successfully delivered. Without it, a
still-firing alert would either never be re-announced (bad — an unacknowledged page for an ongoing
outage should eventually resurface) or would resend on every group evaluation (bad — that’s the
exact noise group_wait/group_interval exist to prevent). repeat_interval is the deliberate
middle ground: a firing alert that’s already been sent gets sent again only after this interval has
elapsed, as a reminder that the condition is still active.
The three settings together answer three genuinely different questions: group_wait — how long to
buffer a new group before its first notification; group_interval — how long to wait before
notifying about new alerts added to a group already notified; repeat_interval — how long to wait
before re-sending an alert that’s already been sent and is still firing.
Routing and Receivers Live Elsewhere
Grouping and deduplication decide when a notification goes out. They say nothing about who it goes to or how escalation works — a routing tree that sends symptom-based alerts to one on-call rotation and cause-based alerts to a different owning team, or an escalation policy that pages a secondary responder if the first doesn’t acknowledge. That organizational layer is covered in Alerting and Routing, and this chapter doesn’t re-derive it. The one routing fact worth noting here, because it’s the reason Alertmanager exists at all in the pipeline: Prometheus pushes firing alerts to Alertmanager, which is what actually notifies receivers — Slack, email, PagerDuty-style integrations, and so on.
What’s Not Covered Here
Three pieces of Alertmanager that a complete treatment would include have no source material behind them in this book yet, and it’s more honest to say so than to pad this chapter with generic detail: silences (temporarily muting a known, already-acknowledged alert), inhibition (suppressing lower-priority alerts when a related higher-priority one is already firing), and Alertmanager HA clustering (running multiple Alertmanager replicas without duplicate notifications). These are real, commonly needed capabilities — they’re just gaps in this book’s current source material, not gaps in Alertmanager itself.
Metadata
| Author | Amit Singh |
| Scope | prometheus |
Local graph
Linked from 9 notes
What is Prometheus
CNCF's second graduated project (2018) — the pull-based metrics monitoring system and query language (PromQL) that defined the exposition format nearly every metrics tool now speaks, and the API that Grafana Mimir scales out horizontally.
3 — Prometheus in the Observability Ecosystem
Where Prometheus sits in the CNCF landscape — its pull-based cloud-native origins, its companion projects, and where this book does (and doesn't yet) connect it to the wider stack.
1 — Prometheus Components
The functional pieces inside a Prometheus server — scrape manager, TSDB, rule engine, query engine — and the real commands used to install and run one on a VM, under systemd, or in Docker.
2 — Alerting Rules
The alert state lifecycle — inactive, pending, firing — built from Prometheus's scrape and evaluation clocks, plus a line-by-line walk through a real alert rule's for:, labels:, and annotation templating.
5 — Prometheus Configuration Reference
A field-by-field reference for prometheus.yml — global settings, scrape_configs options, and worked examples pulled from real multi-job configurations.
Notification & Alerting Strategy
A unified approach to delivering actionable alerts, minimizing noise, and ensuring timely
Visualization, Alerting & SLOs
An effective observability system translates raw telemetry into actionable insights through
3 — Data Flow
A short connective walk through Prometheus end to end — from an instrumented app exposing a metric, through scraping and storage, to a PromQL query surfaced as an alert or a dashboard panel — with each stage pointing to the chapter that owns it.
Prometheus
A book-shaped table of contents for Prometheus: monitoring foundations through architecture, data model, instrumentation, service discovery, PromQL, alerting, production operation, PCA certification, and MAANG interview prep — cross-linking existing notes instead of duplicating them.
Related notes
2 — Alerting Rules
The alert state lifecycle — inactive, pending, firing — built from Prometheus's scrape and evaluation clocks, plus a line-by-line walk through a real alert rule's for:, labels:, and annotation templating.
1 — Recording Rules
Why recording rules exist in an alerting pipeline: pre-computing expensive or frequently-evaluated expressions so alert rules stay cheap, and how that ties to rule-group evaluation cadence.
3 — Prometheus in the Observability Ecosystem
Where Prometheus sits in the CNCF landscape — its pull-based cloud-native origins, its companion projects, and where this book does (and doesn't yet) connect it to the wider stack.
2 — Exporters
What a Prometheus exporter is, installing Node Exporter as a systemd service, and monitoring the container runtime itself via Docker Engine metrics and cAdvisor.