Monitoring That Actually Catches Problems (Before Your Users Do)
Collecting metrics is easy; getting alerted about the right things at the right time is hard. How to build monitoring that warns you early without crying wolf.
There is a special kind of failure where a system has been broken for hours and the first to notice is a user, not the team running it. It is avoidable, and the fix is monitoring — but monitoring done in a way that actually catches problems early, rather than the far more common outcome of dashboards nobody watches and alerts everyone has learned to ignore. Collecting metrics is easy; being reliably warned about the right things at the right time is the real skill.
The two failure modes are equally common: monitoring so sparse that real problems go unnoticed, and monitoring so noisy that real problems drown in false alarms.
Monitor what users feel
The most useful monitoring starts from the user's experience, not the machine's internals. Is the service up? Are requests succeeding or erroring? Are responses fast or slow? These outcome signals — availability, error rate, latency — catch the problems that actually matter, because they are what users feel. A server can be at ninety percent CPU and perfectly fine, or at thirty percent and completely broken; the resource metric alone does not tell you which. Anchoring alerts to user-facing symptoms catches real degradation and avoids paging people about numbers that do not matter.
Underlying resource metrics — CPU, memory, disk, queue depth — remain valuable for diagnosis and for early warning of trends (a disk filling up over days), but the frontline alerts should track whether the service is actually serving.
Alert fatigue is a security and reliability risk
An alert that fires constantly for things that turn out fine trains everyone to ignore alerts — including the one that finally matters. Alert fatigue is not a minor annoyance; it is how real incidents get missed. The discipline is to alert only on conditions that are both real and actionable: something is genuinely wrong, and a human needs to do something about it. Everything else belongs on a dashboard or in a report, not in a page that wakes someone at 3am.
This means tuning thresholds to reality, suppressing duplicate and flapping alerts, and ruthlessly deleting alerts that have never once corresponded to a real problem. Every false alarm removed makes the remaining alerts more trusted.
Catch it early and know what to do
The best monitoring warns before failure, not after. Trending toward a limit — disk approaching full, error rate creeping up, latency degrading — is an early warning that lets you act calmly rather than react to an outage. Pair each alert with clarity on what to do about it: an alert that fires with no indication of the likely cause or next step just spreads panic. A short runbook linked from the alert turns a 3am page from a mystery into a procedure.
Good monitoring, in the end, is less about collecting more data and more about surfacing the right signal, at the right time, to the right person, with enough context to act. Track what users feel, alert only on the real and actionable, warn early on trends, and attach a next step — and you become the one who knows the system is breaking before your users have to tell you.
The four golden signals
A widely used framework from site reliability engineering suggests four signals for any user-facing service: latency, how long requests take; traffic, how much demand the system is handling; errors, the rate of failed requests; and saturation, how close the system is to its limits. Together they cover most of the ways a service degrades. Measure latency for successful and failed requests separately, because fast errors can make average latency look healthy, and look at percentiles such as the 95th or 99th rather than averages, which hide the slow experiences that frustrate users.
Service level objectives
An objective turns vague expectations into numbers: for example, 99.9 percent of requests succeed and 95 percent complete within 300 milliseconds over a 30-day window. Objectives give alerts a meaningful threshold and help teams decide when reliability work should take priority over new features. The gap between perfect and the objective is the error budget — the amount of failure the service can tolerate. When the budget is being consumed quickly, something needs attention; when it is healthy, teams can ship changes with confidence.
Burn-rate alerts
Alerting directly on objectives works better than alerting on every brief spike. A burn-rate alert fires when errors are consuming the error budget much faster than sustainable — fast enough to exhaust it within hours or days. Combining a short window, which catches sudden severe failures quickly, with a longer window, which confirms the problem is real and not a momentary blip, reduces false alarms while still detecting serious problems promptly. Slower burns can create tickets for the next working day rather than paging anyone at night.
Check from the outside
Internal metrics can report that everything is healthy while users cannot reach the service at all, because of a DNS mistake, an expired certificate, a misconfigured load balancer or a regional network problem. Synthetic checks simulate users from outside your infrastructure: loading the home page, logging in with a test account, completing a key transaction. Run them from several locations, alert when they fail repeatedly and treat them as the closest available measure of what customers experience. They are simple to set up and catch a surprising share of real outages.
Metrics, logs and traces each have a job
Metrics are cheap to store and fast to query, which makes them ideal for dashboards and alerts. Logs record detailed events and are essential for understanding exactly what happened in a particular case. Traces follow a single request as it passes through many services, showing where time was spent and where errors arose. Good monitoring uses all three together: a metric alert reveals that something is wrong, a trace shows which component is responsible and logs explain why. Shared identifiers that link them make investigation dramatically faster.
Watch your dependencies
Modern services depend on databases, queues, caches, payment providers, email services and other external APIs. When one degrades, your service suffers, and the symptoms can be confusing. Measure the latency and error rate of calls to each dependency from your side, so that you can see immediately whether the problem is internal or external. Subscribe to status notifications from critical providers, but do not rely on them alone; your own measurements often detect problems before a provider announces them.
Monitor the monitoring
A monitoring system that has stopped working is indistinguishable from a quiet night. Send a regular heartbeat signal through the alerting pipeline and alert, through an independent channel, when it stops arriving. Check that metrics are still being collected from every important service, and alert when a source goes silent. After changes to monitoring configuration, test that alerts still reach the people who need them. The worst time to discover that paging has been broken for a week is during a major incident.
Capacity and trend alerts
Some problems announce themselves days in advance. Disks, databases, certificate expiries, license limits, connection pools and quotas all approach their limits gradually. Alerts based on projected time to exhaustion — "this disk will be full in four days at the current rate" — give teams time to act during working hours instead of reacting to an outage at night. Review capacity trends regularly as part of planning, especially before expected traffic peaks such as product launches or seasonal events.
Routing and on-call
An alert is only useful if it reaches someone who can act. Route alerts by service ownership, so that the team responsible receives them directly. Define severity levels: critical alerts page the on-call engineer immediately, important ones create tickets and informational signals go to dashboards. Set up escalation so that an unacknowledged page reaches a second person. Keep on-call rotations humane, with sensible shift lengths, handover notes and recognition of the work involved, because exhausted responders make mistakes.
Runbooks that actually help
Each alert should link to a short runbook: what the alert means, how to confirm the problem, the most likely causes, the first diagnostic steps and safe mitigation actions such as restarting a component or rolling back a release. Write runbooks for the person woken at night who has never seen this alert before, not for the expert who designed the system. Update them after each incident with what was learned, and remove the ones whose alerts no longer exist.
Learning from every incident
After an incident, ask a specific monitoring question: did our monitoring detect this before users did? If not, what signal would have caught it earlier, and why was it missing? If an alert did fire, was it clear and did it point to the cause? Turning these answers into concrete improvements — a new synthetic check, a better threshold, a clearer runbook — steadily closes gaps. Over time, the proportion of incidents first reported by customers is one of the most honest measures of monitoring quality.
Dashboards with a purpose
Large collections of dashboards tend to go stale. Keep a small number with clear purposes: a service overview showing the golden signals and objectives, a dependency view and capacity views for planning. Put the most important information at the top, include context such as recent deployments, and remove panels that nobody uses. A good dashboard answers "is the service healthy, and if not, where should I look first?" within a few seconds.
Where to start
If monitoring is thin today, begin with external synthetic checks of your most important user journeys and alerts on error rate and latency for each user-facing service. Add a heartbeat for the alerting pipeline, disk and certificate expiry alerts, and a runbook for each alert. Then define objectives for key services and move to burn-rate alerting. Each step reduces the chance that customers discover your problems before you do.
Run AI on your own terms
AXTO gives you world-class AI apps and self-hosted editions — on your own keys, your own data.