Areas we serve

Self-Hosted Gatus: Status Pages That Actually Probe Your Stack

Your Grafana charts look fine. Traffic is flat at zero because the load balancer died twenty minutes ago. Nobody got paged. The first alert was a client asking why the site spins forever.

Metrics tell you how busy things are when requests arrive. They do not always tell you that requests stopped arriving. Gatus (TwiN/gatus) is built for that gap: ~12.4k GitHub stars, a single Go binary, and health checks that actively poke your endpoints on a schedule, then judge the answer with rules you write in config.

What it actually does

Gatus is a developer-oriented status and alerting tool. You define endpoints (HTTP, TCP, ICMP ping, DNS queries), set conditions on status codes, response time, TLS expiry, response body text, even IP addresses, and Gatus runs those checks on an interval. Fail the conditions and it fires alerts.

Conditions, not just up/down. "Return 200" is the boring case. Gatus shines when you need "JSON field status equals ok," "response under 500ms," or "certificate expires in more than 14 days." That same machinery works for smoke tests and lightweight acceptance checks, not only ping monitors.

Dashboard + public status vibe. The UI is a dark-mode-friendly health board (the author runs status.twin.sh on it). Embed uptime badges in READMEs if you want the GitHub flex. Announcements and maintenance windows help you communicate planned work without a separate CMS.

Alert fan-out. Slack, Discord, PagerDuty, Telegram, Rocket.Chat, Gotify, email, Teams workflows, and a long tail of providers. Set defaults per endpoint or route database failures to on-call and staging SSL warnings to email only.

Config lives in YAML (mount a file in Docker or bake it into your deploy pipeline). Storage can be local SQLite or other backends depending on how you scale. OIDC and basic auth exist if you do not want the admin view wide open.

Gatus vs Uptime Kuma vs Cachet

We have posts on Uptime Kuma and Cachet. Quick split:

  • Gatus — config-as-code conditions, proactive synthetic checks, developer/status-page hybrid. Pick it when you want precise rules and Git-reviewed monitor definitions.
  • Uptime Kuma — gorgeous UI, huge notification list, Docker monitors, push heartbeats. Pick it when homelab simplicity and a pretty tile board matter more than YAML.
  • Cachet — incident and component storytelling for humans. Pick it when communication is manual; pair it with something that actually probes endpoints.

Many teams run Kuma or Gatus for checks and a status page for clients. Gatus tries to be both probe engine and status surface in one app.

Why self-host?

Probe internal URLs. Checks can hit https://staging.internal, database ports, or admin routes behind your VPN from a box inside the network. SaaS uptime monitors only see what is public.

Canadian hosting clients. Run Gatus on a Canadian VPS beside the sites you host so latency and routing match what Alberta or BC users see, not a probe farm in Virginia.

No per-check SaaS tax. Gatus is Apache 2.0 licensed. You pay for the VM and your time writing YAML, not per monitor tier upgrades.

GitOps friendly. Drop config.yaml in a repo, review changes in PRs, deploy. When someone adds a condition on login page body text, you see the diff.

What running it takes

Fastest start:

docker run -d --name gatus -p 8080:8080 \
  -v $(pwd)/config.yaml:/config/config.yaml \
  ghcr.io/twin/gatus:stable

Pin :stable or a release tag in production. Mount your config, put nginx or Caddy in front for HTTPS, and back up whatever storage backend you enable.

Resource footprint is small (Go, single process). Plan headroom for check frequency: hundreds of endpoints every 30 seconds matter more than RAM. Start with sane intervals (30s to 60s) unless you enjoy alert fatigue.

Expose a public status URL if clients need transparency; keep the config editor behind auth. Your YAML lists every hostname you care about, which is a map attackers would love.

Who it's for (and who should skip it)

Good fit: dev teams, MSPs monitoring client stacks, SRE-ish shops wanting synthetic checks, hosts who already think in config files, anyone burned by "metrics looked fine but nothing was reachable."

Maybe skip it: you want click-only setup with zero YAML (try Uptime Kuma), you only need a manual incident blog (Cachet), or you already standardized on Prometheus blackbox exporters plus Grafana (you might not need another UI).

Hosting it in Canada

Gatus is a natural fit on the same Docker host you use for client apps: one compose file, checks aimed at production URLs, alerts to your Slack or Rocket.Chat.

Tell us how many endpoints you monitor and we will size a small VM with backups on the config and state store.

Tags:
  • Gatus
  • Monitoring
  • Status Page
  • Alerting
  • Self-Hosted

Need Help With Your Hosting?

Tell us about your application — we respond within 1 hour with honest recommendations.