Alerts Not Firing
Alert silence, inhibition, scrape failures, rule misconfiguration, dead man's switch, and alertmanager routing.
Overview
Overview
Silent alerts are an existential threat to reliability: if alerts fail to fire, you learn about outages from customers. Finding out why an expected alert did not fire means checking the whole pipeline, from metric collection through rule evaluation to notification routing.
Common failure points
- Target scrape failure — Prometheus has no data for that target, so rules evaluating to absent data may not fire — Status > Targets; the absent() function alerts on missing metrics
- Rule misconfiguration — Typo in the PromQL, a label that changed, or a threshold that no longer matches the metric's scale — promtool check rules, or run the query in the Prometheus UI
- Alertmanager silence — A maintenance-window silence is still active — Alertmanager UI, Silences; old silences never removed are a frequent cause
- Inhibition — A "cluster down" alert inhibits all component alerts; the cluster is degraded but not fully down — Alertmanager inhibition rules
Dead man's switch
The Watchdog alert always fires to confirm the whole alerting pipeline works. If the Watchdog stops arriving, the pipeline itself is broken.
> [!TIP] Route the Watchdog to a dedicated receiver that alerts when it goes quiet.
Key concepts
- Dead man's switch (Watchdog)
- An always-firing alert (expr: vector(1)) that continuously sends notifications. If it stops, the alerting pipeline is broken. Route it to a separate receiver that triggers if quiet for >5 minutes.
- Alertmanager inhibition
- Suppresses alerts matching a target matcher when a source alert is firing. Used to reduce noise (e.g., suppress service alerts when the entire cluster is down). Can cause missing alerts if misconfigured.
- Alertmanager silence
- Temporary suppression of alerts matching specific matchers. Created during planned maintenance. Forgotten silences are a common cause of alerts never reaching on-call after maintenance ends.
- absent() function
- Prometheus function that returns 1 if no time series match the selector. Use it to alert when a metric disappears (target down, label changed, service stopped exporting).
- for clause
- Alert fires only after condition is true for this duration (e.g., for: 5m). If the condition resolves before 5 minutes, the alert never fires. Prevents flapping but can delay detection.
When to use it
- Investigating why an expected alert did not fire during a production incident
- Auditing alerting configuration after a postmortem
- Setting up a dead man's switch to detect alerting pipeline failures
- Explaining why an Alertmanager silence from last month is still suppressing alerts
Interview questions
- During a postmortem, you discover that an alert should have fired 30 minutes before the outage was detected. How do you diagnose why it did not fire?
Sign up free to read the full topic
More Troubleshooting topics
- Alert Fatigue and On-Call Burnout
- Canary Deployment Problems
- Connection Pool Exhausted
- CoreDNS Failures in Kubernetes
- CPU Runaway Process Investigation
- CrashLoopBackOff
- Database Deadlock Diagnosis
- Database Migrations in Production
- Deployment Rollback Strategies
- Disk IOPS Saturation
- DNS Failures
- EC2 Instance Unresponsive
Start free on Cariara · Coding problems · System design studio