MONITORING
July 23, 2026

How to Get Notified the Moment Your Site Goes Down

6 min read
Author
CloudStick Team
Backend Developer
Share this article
How to Get Notified the Moment Your Site Goes Down
CloudStick
Downtime Alerts

Uptime monitoring vs. server monitoring

Server monitoring tells you the machine is healthy; uptime monitoring is the only thing that tells you the site is actually reachable. These are two separate disciplines, and confusing them is why teams get blindsided by outages their dashboards never flagged. Server monitoring watches CPU load, RAM usage, disk space, and process health — all metrics about the box itself. Uptime monitoring is external: it makes an HTTP request from outside your infrastructure and checks whether a human visitor would get a working page back.

A server can report 4% CPU and 30% RAM usage — every metric green — while Nginx is silently returning a 502 to every single visitor because PHP-FPM crashed five minutes ago. Server monitoring will never catch that. Only a check that hits the actual URL and reads the actual response will.

The failure modes that only an external check catches are common: a misconfigured Nginx `server` block, a database connection pool that silently maxes out, a certificate that expired overnight, a firewall rule that blocks inbound traffic on port 443 but not 80. None of these show up as a resource spike. All of them show up instantly to a visitor trying to load your homepage. If you only have server monitoring today, you have a blind spot exactly where it matters most — at the point where a real user hits your site.

Setting up a fast HTTP check

Three settings decide whether an HTTP check catches an outage in one minute or in twenty. First, use a 1-minute check interval for anything customer-facing — a 5- or 10-minute interval, which is still the default on a lot of free monitoring tiers, means a site can be down for most of that window before anyone's phone buzzes. A minute of downtime you find out about immediately is far better than ten minutes you find out about eventually.

Second, check for a specific expected status code — 200, or whatever your homepage actually returns — not just "any response." A check that only confirms the server answered will happily pass while your site serves a 500 error page, a maintenance splash screen, or a WordPress "database connection error" message, because all of those are still valid HTTP responses. Configuring the monitor to fail on anything other than the expected code turns a false sense of security into a real one.

Third, if your monitoring tool supports it, check from multiple geographic regions rather than a single location. A single-region check can miss a regional network issue — a peering problem between your host's data center and one part of the world, or a DNS resolver having a bad day in one region — that a genuinely global audience would still notice. Checking from at least two or three regions catches problems a lone check would simply never see.

Multi-channel alerting

Email alone is too slow for anything urgent — inboxes get checked in batches, not in real time, and a downtime alert sitting unread for twenty minutes defeats the entire point of monitoring. Pair email with a channel someone will actually notice immediately: SMS or a push notification for the first alert, since both interrupt a phone the way email doesn't, and a Slack or Discord webhook so the whole team has visibility without anyone needing to forward anything.

Most monitoring tools and custom scripts alike can deliver a webhook alert as a simple JSON POST. The shape is almost always the same — a message payload the receiving service (Slack, Discord, a custom endpoint) knows how to render:

POST https://hooks.slack.com/services/T000/B000/XXXX
Content-Type: application/json
{
"text": "🔴 example.com is DOWN — HTTP 502 at 03:14 UTC"
}

That single `text` field is enough for a channel to show the alert the moment it fires, with no polling or middleware needed. Wire the same webhook to a recovery message too — "example.com is back up" — so the channel reflects the current state instead of leaving an unresolved red alert sitting at the top of the feed.

Avoiding alert fatigue with escalation

Require 2–3 consecutive failed checks before an alert fires — a single blip, like one dropped packet during a routine reboot or a momentary network hiccup, shouldn't wake anyone at 3 a.m. Most monitoring tools call this a "confirmation" or "retry" setting, and it's usually off by default. Turning it on is the single highest-leverage change you can make to cut false alarms without losing real ones, since a genuine outage will still fail the second and third check a minute or two later.

Layer escalation tiers on top of that. Notify the on-call person first — SMS or push, immediate. If the incident is still unresolved after a fixed window, say 10–15 minutes, escalate to the whole team over Slack or a second phone call. This structure means one person isn't paged for every transient issue, but a real outage that isn't getting fixed doesn't quietly stay a one-person problem either. Without escalation tiers, teams either over-alert everyone for everything — and people start ignoring the channel — or under-alert, and a serious outage sits unattended because the one person who got pinged was in a meeting.

A lightweight self-hosted fallback

A one-minute cron job with curl is enough to build a working downtime alert with nothing but tools already on your server. The core of it is a single curl command that fetches only the HTTP status code:

#!/bin/bash
# /usr/local/bin/check-site.sh
URL="https://example.com"
CODE=$(curl -o /dev/null -s -w "%{http_code}" --max-time 10 "$URL")
if [ "$CODE" != "200" ]; then
echo "Site $URL returned $CODE at $(date)" | mail -s "ALERT: $URL is down" you@example.com
fi

Make it executable and wire it into cron to run every minute:

chmod +x /usr/local/bin/check-site.sh
crontab -e
# add this line:
* * * * * /usr/local/bin/check-site.sh

Swap the `mail` line for a `curl -X POST` to a webhook URL if you'd rather land in Slack than in an inbox — the CodeBlock above from the multi-channel section shows the exact JSON shape to send. The blind spot with this approach is that it checks from a single location and a single network path — usually your own server or a small VPS you run it from — so it can't catch a regional network issue or confirm the site is reachable from the outside world the way a visitor in another country would experience it. Treat it as a free backstop that catches obvious failures, not a replacement for a proper external monitor with multi-region checks and escalation built in.

Getting alerted, then what

An alert only tells you the site is down — the next few minutes are spent figuring out why, and that's where having the right dashboard open already matters. CloudStick's Server Stats and Web Application Logs are available on every plan, and having both open the moment an alert fires turns "the site is down" into "here's exactly what happened" without leaving the same screen: Server Stats shows whether CPU, RAM, or disk hit a ceiling at the exact timestamp the check failed, and the Web Application Logs show the actual error — a PHP fatal error, a database connection refusal, a 502 from a crashed PHP-FPM pool — right alongside it.

That combination cuts the time between "I got an alert" and "I know what broke and I'm fixing it" from a round of guesswork and log-tailing over SSH down to a single glance at one dashboard. Set the monitor up today, while nothing is on fire — not during the next outage, when you'll wish you already had.

Leave a comment
Full Name
Email Address
Message
Contents