Monitoring & incident communication
Server monitoring: fewer alerts, better ones
Server monitoring is not about measuring everything. It is about picking the handful of signals you agree to be woken up for. A noisy probe gets muted, a silent one misses the outage. This page covers how to choose checks, how to set intervals and hysteresis, the concrete moves that cut alert noise, what to publish on a status page while the outage is still running, and how to run a post-mortem that actually changes a setting. All of it applies to any monitoring stack; the last section explains how Servor keeps checks, thresholds, status pages and incidents in one console.
What should you actually check on a production server?
Start with what the user experiences: a full HTTP request that asserts both a status code and an expected fragment of the response body. Then add the layers underneath, network reachability, TCP port, DNS resolution, certificate validity, and finally the local resources, disk space and process presence. If a check cannot change a decision, it does not belong in the list.
The usual failure is a wall of infrastructure probes and nothing that talks to the service itself. A host that answers ping tells you nothing about an exhausted connection pool or a stuck worker. The opposite mistake is just as common: one check on the homepage stops being enough the moment the product depends on several backends. Give every critical path its own probe, and make health endpoints report failure when their dependencies are down. A probe that returns 200 while the database is unreachable is worse than no probe at all.
Slow-burning checks deserve separate handling. They do not measure availability, they buy time: a certificate expiring in ten days, a volume at 88 percent, a daemon that stopped without a sound. Nothing breaks today, everything breaks on a Sunday morning. Run them slowly, once to four times an hour, and route them somewhere other than the on-call rotation.
- 01HTTP: does the service answer with the right status and the right content, not merely with an open socket?
- 02TCP: is the port still listening, for everything that does not speak HTTP, a database, a broker, an SMTP relay?
- 03ICMP ping: is the host reachable at all, a different question from whether the service is running.
- 04DNS: does the record still resolve to the expected value, often the first visible sign of a botched migration.
- 05SSL certificate: how many days are left, the most predictable outage in the trade and still one of the most common.
- 06SSH: is the administration channel still open, including when the public site is already dead?
- 07Disk space and process presence: the two most ordinary causes of a three in the morning wake-up.
- 08Custom script: the only way to assert a business rule that no generic probe knows about.
How do you pick an interval and a threshold that won't page anyone for nothing?
Detection time equals the interval multiplied by the number of consecutive failures required before the state flips. A check every 60 seconds that flips on the third failure detects in three minutes, not one. Decide what delay the service can absorb, then derive the interval and hysteresis pair from it. Never the other way round.
Thirty seconds is a sensible floor for an HTTP check on a public endpoint; hourly is plenty for a certificate or a disk volume. Sampling faster costs load on the target and, more importantly, costs false positives: the higher the frequency, the more transient network blips you catch that no user ever noticed. On a healthy link, most isolated failures clear before the next run, and nobody should have heard about them.
Resource thresholds follow different rules. CPU pinned at 100 percent for twenty seconds during a build is not an incident; load above capacity for ten minutes is. Alert on sustained breach, with an explicit minimum duration. For disk, the percentage on its own lies: 90 percent of a 2 TB volume buys weeks, 90 percent of 20 GB buys one night. Think in days remaining at the observed growth rate, and keep a second, non-negotiable high threshold as a backstop.
- 01External HTTP check on a public endpoint: every 30 to 60 seconds, flip on the second or third failure.
- 02TCP or ping on an internal service: every 60 seconds, flip on the third failure.
- 03SSL certificate: hourly is enough, with a first warning at 30 days and a reminder at 7.
- 04Disk space: every 5 to 15 minutes, with a warning threshold well ahead of the critical one.
- 05CPU and memory: never on an instantaneous sample, always on a breach sustained for several minutes.
How do you cut alert noise without going blind?
Three settings do most of the work: asymmetric hysteresis, which requires several failures to flip down and several successes to flip back; a throttle that stops an already active alert from repeating itself; and a triage rule, any notification that implies no action leaves the pager and moves to a dashboard.
Hysteresis is what kills flapping, the monitor that oscillates between states and produces two notifications a minute. Requiring three consecutive failures to declare an outage and two successes to declare recovery absorbs short dips without meaningfully delaying detection. The asymmetry is deliberate: be slow to shout, and slower still to say everything is fine, because a service that comes back once and drops again has not recovered. The same caution applies before closing a public incident.
The second source of noise is structural. When a host dies, its eight checks die with it and whoever is on call receives eight messages for one event. Separate the cause signal, the silent host or the unreachable agent, from the consequence signals, and suppress the latter while the former is active. Separate the channels too: the pager carries what needs hands on a keyboard now, a team channel carries the rest, and slow trends live on a screen nobody is required to read in the middle of the night.
- 01An alert that repeats every five minutes during a known outage adds nothing. Throttle it until the state actually changes.
- 02Put the expected action in the message, not just the symptom. An alert with no action attached is an alert to delete.
- 03Count notifications per person per week. Past a handful, attention drops and real outages slip through.
- 04Replay the last month of alerts. Anything that resolved itself before a human acted is a candidate for tighter hysteresis.
- 05Planned maintenance must mute the checks it affects, otherwise the team learns to ignore alerts during work windows.
Where do your checks run from, and why does it change what you see?
A check measures a path, not an absolute state. From a single vantage point, a transit failure between that point and your server looks exactly like your server being down. That is the structural limit of any single-region monitoring, and it is better understood before you announce an outage to your customers.
Two families of probes coexist and they tell different stories. An external probe queries the service the way a user would: it sees perceived availability and knows nothing about the cause. A local probe, run by an agent installed on the machine, sees disks, processes and memory, but disappears together with the machine. Hence the value of an explicit signal when the agent stops reporting: it is often the first trustworthy information about a host failure, and it lands before the surface probes react.
Servor runs its checks from a single point. They can also run directly on the agent installed on the machine, which makes them independent of any open browser session. There are no probes spread across continents. If you need to formally separate a transit failure from a service failure, or to measure availability from several countries, pair Servor with a service built for that. Saying so upfront avoids an unpleasant discovery during the first dispute.
What should a status page say while the outage is still going?
Four facts in the first post, and nothing more: what is broken, who is affected, since when, and when the next update lands. No suspected cause, no invented restoration time. A commitment you keep every thirty minutes is worth more than one estimate you miss.
Wording sets expectations. Four states are in common use: we are investigating, we have identified it, we have applied a fix and are watching, it is closed. Each says something different, and jumping to the last one early forces a reopening, which costs far more trust than ten minutes of patience. Write in the language of the customer rather than the language of your infrastructure: outgoing email is delayed, not the queue consumer stopped acknowledging jobs.
Two technical constraints shape the exercise. The page has to live outside the infrastructure it describes, otherwise it goes down at the exact moment it becomes useful, and it has to sit at an address your customers already know, which means your own domain with a valid certificate. Add a push channel as well, double opt-in email or a webhook into your customers own tooling, because nobody thinks to open a status page until twenty minutes are already lost.
- 01Title: the affected service and the symptom, in five words that survive a notification preview.
- 02Body: what is degraded, what still works, and the start time in both local time and UTC.
- 03A cadence commitment: next update at a stated time, published even if nothing has changed.
- 04No cause until it is confirmed, no restoration estimate until you can hold it.
- 05After closing: a short summary, the real impact, and what changes so it does not happen again.
How do you run a post-mortem that changes something?
A useful post-mortem is built on records, not recollection. It needs a timestamped narrative: first symptom, first alert, first human action, then the commands that were actually run and what they returned. The gap between the first symptom and the first alert is the most direct measurement of how good your monitoring really is.
That reconstruction assumes the data still exists when you go looking for it. Fine-grained samples are expensive to keep, so most tools retain full resolution for days and only an hourly rollup for months. Know which of the two you are reading, because a thirty-second spike is invisible in an hourly average and a lot of wrong conclusions start there. Capture what matters during the incident, not three weeks later.
The deliverable is not the story, it is the decisions. Every incident should produce at least one changed setting: a threshold that fired too late, hysteresis that fired too eagerly, a notification that woke someone with no action available, a public update that aged badly. Without that loop, monitoring degrades quietly while the fleet grows, and the team ends up trusting instinct over instrumentation.
How does Servor keep checks, thresholds and status pages in one console?
Servor brings the terminal, commands, monitoring, status pages and runbooks for all your servers into a single console, with an AI copilot that proposes an action, waits for your approval, then verifies the result. On the monitoring side that means nine check types (HTTP, TCP, ping, SSH, DNS, SSL certificate, disk space, process presence, custom script), an interval adjustable from 30 seconds to 1 hour, and configurable hysteresis: how many failures before the state flips, how many successes before it flips back.
Checks can run from the agent installed on the machine. That agent is a single compiled binary that opens no inbound port: it initiates an outbound connection, so it works behind NAT, a corporate firewall or a VPN-only network. It pushes metrics every 15 to 300 seconds, 60 by default: overall and per-core CPU, load, detailed memory and swap, disks per mount point, network, uptime, processes. Raw samples are kept for 7 days, hourly rollups for 90. CPU, memory and disk threshold alerts fire on sustained breach and do not repeat while the alert stays active, and a separate alert tells you when an agent has gone silent.
Communication lives in the same place. An incident is created manually or automatically when a monitor flips, moves through four statuses, keeps its update log and notifies subscribers. Public status pages get an immutable unique hostname, a custom URL, a custom domain with an automatic certificate, visual customisation, 90 days of history, and subscribers by double opt-in email or signed webhook. Notifications go out to email, Slack, Discord or a signed webhook, with filtering rules and an anti-repetition throttle.
- 01Free, 0 EUR: two servers, the console and the web terminal, no monitors and no status page.
- 02Operations, 9 EUR excluding tax per month: unlimited servers, 100 monitors, 5 status pages.
- 03AI, 29 EUR excluding tax per month: unlimited monitors and status pages, plus the AI copilot and the public API.
- 04Enterprise: on quote, for isolated fleets and stricter traceability requirements.
- Check types
- 9 — HTTP, TCP, ping, SSH, DNS, SSL certificate, disk, process, custom script
- Interval
- 30 seconds to 1 hour
- Hysteresis
- failures before flip · successes before recovery
- Agent metrics
- every 15 to 300 seconds, 60 by default
- Retention
- raw samples 7 days · hourly rollups 90 days
- Status page history
- 90 days
- Notifications
- email, Slack, Discord, signed webhook
Frequently asked
Detection time is the interval multiplied by the number of failures required before the state flips. Thirty to sixty seconds suits a public endpoint; hourly is enough for a certificate or a disk volume. Going below thirty seconds mostly increases false positives, rarely detection quality.
Require several consecutive failures before declaring an outage, and several successes before declaring recovery. That hysteresis absorbs transient blips without hiding a real failure. Add a throttle so an active alert cannot repeat itself, and group consequence signals under the cause signal.
Yes. A page served by the failing infrastructure disappears exactly when it becomes useful. Host it outside that blast radius, publish it on your own domain with a valid certificate, and back it with a push channel, email or webhook, aimed at the people actually affected.
Yes, as long as the probe originates from the machine. The Servor agent opens no inbound port: it establishes an outbound connection to the control plane, which works behind NAT, a corporate firewall or a network reachable only through a VPN.
No. Checks run from a single point, and there are no multi-region probes. To formally separate a transit failure from a service failure, or to measure availability from several continents, pair Servor with a service dedicated to that job.
The free plan includes no monitors and no status page. Operations, at 9 EUR excluding tax per month, unlocks 100 monitors and 5 status pages across unlimited servers. The AI plan, at 29 EUR excluding tax, makes both unlimited. Enterprise is quoted individually.
Put monitoring, alerting and your status page in one console
Create an account, install the agent on a first server, declare your first checks and tune their hysteresis. No commitment, cancellable from the interface.
Start for free