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

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

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

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

Supports memory (default), sqlite, postgres.

Docker

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