Gatus
Developer-oriented health dashboard. Defines endpoints and checks in YAML; renders a public status page and fires alerts on failures. Supports HTTP, DNS, TCP, ICMP, WebSocket, and SSH.
Config example
endpoints:
- name: my-api
url: https://api.example.com/health
interval: 30s
conditions:
- "[STATUS] == 200"
- '[BODY] == {"status":"ok"}'
- "[RESPONSE_TIME] < 500"
- name: my-db
url: tcp://db.example.com:5432
interval: 1m
conditions:
- "[CONNECTED] == true"
- name: dns-check
url: "8.8.8.8"
dns:
query-name: example.com
query-type: A
conditions:
- "[DNS_RCODE] == NOERROR"Conditions
| Placeholder | Description |
|---|---|
[STATUS] | HTTP status code |
[BODY] | Response body (supports JSONPath [BODY].path.to.field) |
[RESPONSE_TIME] | Response time in ms |
[CONNECTED] | TCP/ICMP connectivity (true/false) |
[CERTIFICATE_EXPIRATION] | TLS cert expiry duration |
[DNS_RCODE] | DNS response code |
Alerting
alerting:
slack:
webhook-url: "https://hooks.slack.com/..."
default-alert:
enabled: true
failure-threshold: 3
success-threshold: 2
send-on-resolved: true
endpoints:
- name: my-api
url: https://api.example.com/health
alerts:
- type: slackSupported: Slack, PagerDuty, Opsgenie, email, Telegram, Discord, Teams, Gotify, ntfy, custom webhook.
Storage
storage:
type: sqlite
path: /data/gatus.dbSupports memory (default), sqlite, postgres.
Docker
docker run -p 8080:8080 \
-v $(pwd)/config.yaml:/config/config.yaml \
twinproduction/gatus