Gatus
1 min read

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

yaml
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

PlaceholderDescription
[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

yaml
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: slack

Supported: Slack, PagerDuty, Opsgenie, email, Telegram, Discord, Teams, Gotify, ntfy, custom webhook.

Storage

yaml
storage:
type: sqlite
path: /data/gatus.db

Supports memory (default), sqlite, postgres.

Docker

sh
docker run -p 8080:8080 \
-v $(pwd)/config.yaml:/config/config.yaml \
twinproduction/gatus