WHAT IS IT?
Gatus is a self-hosted health dashboard written in Go and driven by a YAML file. Every monitored endpoint is described with its target, its interval and a list of conditions it has to satisfy to count as healthy. What you get is a readable status page plus an alerting engine, with no SaaS behind it and no agent to deploy on the monitored machines.
WHY IS IT INTERESTING?
- Conditions, not just a ping: validation is written with placeholders such as
[STATUS] == 200,[RESPONSE_TIME] < 500,[BODY].user.name == johnusing JSONPath, orlen([BODY].data) < 5. You assert on the content of the response, not merely on the fact that one arrived. - Plenty of protocols: HTTP, TCP, UDP, SCTP, ICMP, DNS, SSH, WebSocket and gRPC. Dedicated conditions also cover certificate expiry with
[CERTIFICATE_EXPIRATION] > 48hand domain expiry. - All in YAML: the config supports environment variable interpolation and loading several merged files from a directory. It versions and deploys like code.
- Alerts everywhere: around forty built-in providers, from Slack and Discord to PagerDuty, Opsgenie, ntfy, Gotify or Home Assistant, plus custom webhooks for the rest.
- Storage your way: memory by default, in which case nothing survives a restart, SQLite with write-through caching, or PostgreSQL for a shared instance.
USE CASES
- Exposing a public status page for your services
- Asserting that an API returns the right JSON rather than just a 200
- Watching TLS certificate and domain expiry before either one bites
- Monitoring internal services of a Kubernetes cluster from the inside
- Routing homelab alerts to ntfy or Gotify
