← All posts
GuidesJul 8, 2026· 6 min read

How to Monitor Server Uptime From Outside Your Network

Learn how to set up external uptime monitoring for your Linux servers — so you know about outages before your users do.

By The Opservo team

Your internal monitoring says everything is fine. Meanwhile, your users are hitting a blank screen. This is one of the most frustrating situations in production ops — and it happens because monitoring from inside your own network can't tell you what the outside world actually sees. A crashed nginx process, a misconfigured firewall rule, or a full TCP connection queue can take your site down completely while your internal health checks keep reporting green. External uptime monitoring — a check that runs from outside your infrastructure — is how you close that gap.

Why Internal Monitoring Isn't Enough

Internal checks — whether from a cron job, a local Prometheus exporter, or an agent on the same host — share the same failure domain as your application. If your server's network interface goes down, your host-based monitor goes dark too. If a BGP route drops your server off the internet, everything inside the network looks normal. You need at least one monitoring vantage point that lives outside your infrastructure entirely, making real HTTP or TCP requests the same way a user would.

The Simplest Starting Point: Cron Plus curl

If you're not ready to add a third-party service, you can get basic external visibility with a second VPS in a different data center running a cron job. It's not fancy, but it works.

  • Spin up a small instance at a different provider — a $4/month VPS in a different region is enough.
  • Install curl and msmtp (or any mail sender) on it.
  • Add a cron entry like: */5 * * * * curl -sf --max-time 10 https://yourapp.com || echo 'Down at '$(date) | mail -s 'ALERT: yourapp.com down' you@example.com
  • Use curl's -sf flags: -s suppresses progress output, -f makes curl return a non-zero exit code on HTTP 4xx/5xx responses.
  • Add --max-time 10 so a hung connection doesn't silently time out and miss the alert.

This approach has real limits — no dashboards, no history, no alert deduplication — but it catches total outages and costs almost nothing. Treat it as a floor, not a ceiling.

Purpose-Built External Monitoring Services

For anything running production traffic, you want a dedicated uptime monitoring service. These run checks from multiple geographic locations, track response time history, calculate uptime percentages, and send alerts through Slack, PagerDuty, email, or SMS. Several good options exist across different price points.

  • Uptime Robot — free tier includes 50 monitors at 5-minute intervals; paid plans get you 1-minute checks and SMS alerts.
  • Better Uptime — clean UI, incident timelines, on-call scheduling; free tier available.
  • Freshping — checks from 10 global locations on the free plan, good for teams that need geographic spread.
  • Checkly — more developer-focused, lets you write Playwright or Puppeteer scripts to monitor real user flows, not just HTTP status codes.
  • StatusCake — solid free tier with page speed monitoring included.

When configuring any of these, don't just monitor your homepage. Add checks for your API health endpoint (something like /healthz or /api/status), your login flow if you have one, and any critical third-party integrations. A 200 OK on your marketing page doesn't mean your checkout is working.

What to Actually Monitor and How to Configure It

The check type matters. HTTP checks verify that a URL returns an expected status code and optionally that the response body contains a specific string — use the string match feature to confirm your app actually rendered, not just that nginx returned a 200 with an error page. TCP checks confirm a port is accepting connections, useful for databases or non-HTTP services exposed externally. SSL certificate checks alert you before your cert expires — many services offer this built-in, and it's worth enabling on every HTTPS endpoint you own.

  • Set your check interval to 1 minute for anything customer-facing. 5 minutes is too slow for a production incident.
  • Configure alerts to fire after 2–3 consecutive failures to avoid false positives from transient network blips.
  • Set up a status page — even a private one — so your team has a single source of truth during an incident.
  • Monitor from at least two geographic regions to distinguish a regional network issue from a full outage.
  • Store your monitor configuration in version control using the service's API or a Terraform provider if it offers one.

Correlating External Alerts With Server-Side Data

An external monitor tells you that something is down — it can't tell you why. When the alert fires, your next move is usually SSH into the server and start digging: check nginx error logs with sudo journalctl -u nginx --since '5 minutes ago', look at connection state with ss -s, check CPU and memory with top or vmstat 1 5, and see if disk is full with df -h. The gap between 'we got paged' and 'we understand what happened' is where most of the incident time goes.

This is the workflow that Opservo is built around — when an external check fires, you want the server-side context surfaced automatically in plain English rather than having to piece it together from five different commands under pressure. Correlating the external signal with log patterns and resource metrics cuts the time to diagnosis significantly.

External monitoring tells you when you're down. Server-side context tells you why. You need both.

Start with the simplest external check you can set up today — even the cron-and-curl approach — and layer on more sophistication as your infrastructure grows. If you would rather not run the second VPS, Opservo's external uptime monitoring is free on every plan: HTTP, TCP, ping, DNS and heartbeat checks from the cloud, and when one fails the agent on the server tells you why. The worst time to discover your monitoring had a blind spot is during an incident at 2 AM.