October 15, 2025  ·  9 min read

Monitoring API Performance Without Alert Fatigue

Featured image — monitoring dashboard with alert thresholds

Alert fatigue is a monitoring failure mode that masquerades as a monitoring success. Your team gets paged. They respond. Everything looks fine. After this happens fifty times, the next alert gets a slower response, then a slower one after that, until eventually someone is checking alerts every few hours instead of immediately — which is exactly when the real incident you were monitoring for finally happens.

The root cause is almost always the same: alert thresholds set at values that fire too often, on metrics that don't correspond cleanly to user impact, without enough context for the on-call engineer to act immediately. The fix requires rethinking what you're measuring and why.

Signal vs Noise at the Metric Level

The fundamental question for any metric is: does a change in this number mean something changed for users? If yes, it's potentially worth alerting on. If no, it's a debugging aid, not an alert trigger.

CPU utilization is a debugging aid, not an alert trigger. CPU can spike to 100% for three seconds without any user experiencing degraded service. What users experience is latency and errors. Alert on those. CPU as a secondary metric in your dashboards helps you understand why latency increased — but the alert should be on the latency, not on the CPU that caused it.

For APIs specifically, the metrics that map cleanly to user impact are: error rate (percentage of requests returning 5xx), p95/p99 latency (what the slowest 5% or 1% of users experience), and successful request rate (which detects traffic drops that might indicate broken clients or upstream failures).

Error rate and latency should be measured per endpoint, not just in aggregate. Aggregate error rate of 0.3% can hide a specific endpoint at 15% error rate that's causing real user pain. Per-endpoint metrics give you the resolution needed to both alert appropriately and diagnose quickly.

Setting Thresholds That Actually Mean Something

Alerting at "error rate > 1%" might be too sensitive for a chatty endpoint and not sensitive enough for a payment endpoint. Threshold values are not universal — they need to be calibrated against what's normal for each endpoint and what's actually impactful for users.

The baseline-relative approach: measure your error rate and latency over a rolling 30-day window. Set your alert threshold at two to three standard deviations above the mean. This way, an alert fires when behavior is abnormal relative to your own history, not relative to an arbitrary absolute value. A slow endpoint that's normally at 800ms p95 shouldn't alert when it hits 850ms; a fast endpoint that's normally at 50ms p95 should definitely alert at 200ms.

The complication is that baselines shift legitimately over time. Deploying a new feature might legitimately change your latency profile. If you alert on deviation from a 30-day mean and you just shipped something that intentionally changed performance characteristics, you'll get false positives until the window adapts. The solution is event markers in your monitoring — annotate the timeline with deployment events so that anomaly detection knows to recalibrate from the deployment point forward.

Tiered Alert Severity

Not every threshold breach warrants waking someone up at 3 AM. A severity tiering that matches response urgency to alert type:

P1 (wake up now): error rate on a revenue-critical endpoint exceeds 5% for more than two minutes. p99 latency on checkout/payment exceeds 10 seconds. API is completely unreachable.

P2 (respond within 30 minutes): error rate on any endpoint exceeds 2% for more than five minutes. p95 latency exceeds 3x normal baseline. A previously healthy endpoint has returned zero successful requests in the past 10 minutes.

P3 (review during business hours): error rate elevated but not critical. Latency trending upward over 24 hours without a clear cause. Synthetic monitoring detecting intermittent failures.

The specific numbers aren't universal — calibrate them against your SLAs and your architecture's normal behavior. The structure matters: one team member gets the P1 page; a channel gets notified for P2; a ticket is created for P3. Response expectation is matched to urgency.

Synthetic Monitoring vs Passive Monitoring

Passive monitoring — observing real traffic — only works when there is real traffic. At 3 AM when usage is minimal, a broken endpoint might generate zero errors in your monitoring window because nobody is calling it. When the 9 AM traffic spike hits, you have a broken endpoint and a lot of angry users, and your on-call hadn't heard anything overnight.

Synthetic monitoring runs real HTTP requests against your endpoints on a schedule, regardless of real traffic. It gives you consistent signal at all hours and lets you detect problems before real users encounter them. A synthetic check running every minute gives you at most 60 seconds from failure to detection, regardless of what real traffic looks like.

Synthetic checks should exercise real business logic, not just health endpoints. Check that your authentication flow produces a valid token. Check that creating a resource works end-to-end. Check that a search query returns results. These tests are harder to write and maintain than simple ping checks, but they catch different failure modes — the ones that actually matter to users.

The Alert Review Ritual

Even well-tuned monitoring drifts. Quarterly, someone should review every alert rule that fired in the past 90 days and answer two questions: did this alert represent real user impact, and did the on-call engineer have enough information to diagnose it within five minutes?

If an alert fired and the issue turned out to be nothing, raise the threshold. If an alert fired and the engineer spent 20 minutes figuring out what was wrong before even starting to fix it, add more context to the alert notification. Link to runbooks. Include the five most common causes for this alert. Show a sparkline of the metric trend in the notification so the engineer can see whether it's getting better or worse.

Good monitoring isn't a configuration you set up once. It's a practice you maintain. The teams that respond fastest to real incidents are the ones that review and iterate on their alerting as consistently as they review and iterate on their code.

Set up alerting that actually works

APIForge monitors your endpoints every minute, lets you configure tiered thresholds per endpoint, and sends alerts with enough context to act immediately. First alert setup takes under five minutes.

Start Free