Zum Hauptinhalt springen
Background Image

Gatus mit Docker Compose einrichten: Monitoring und Health Checks

Inhaltsverzeichnis

Gatus ist ein leistungsstarkes, Open-Source-Tool für Service-Monitoring und Health-Checks. In dieser Anleitung zeige ich dir, wie du Gatus mit Docker Compose einrichtest und konfigurierst, um deine Dienste zu überwachen.

Was ist Gatus?
#

Gatus ist ein modernes Monitoring-Tool, das sich durch folgende Eigenschaften auszeichnet:

  • Einfache Konfiguration über YAML-Dateien
  • Web-Interface für die Überwachung des Service-Status
  • Flexible Endpunkt-Tests (HTTP, TCP, ICMP, DNS)
  • Benachrichtigungen über verschiedene Kanäle (Slack, Discord, Email, etc.)
  • Minimal Resource Usage - perfekt für Docker-Deployments

Docker Compose Setup
#

Hier ist eine Docker Compose-Konfiguration für Gatus:

services:
  gatus:
    image: twinproduction/gatus:v5.27.0@sha256:5091320d752756d7ac0a094d26ac38eb8216d7ed5857642b305522d1c6641f72
    container_name: gatus
    restart: always
    volumes:
      - /opt/docker/gatus/config:/config
      - /opt/docker/gatus/data:/data/
    expose:
      - 8080
    networks:
      - proxy

networks:
  proxy:
    external: true

Gatus-Konfiguration
#

Verzeichnisstruktur erstellen
#

Zuerst erstellen wir die erforderlichen Verzeichnisse:

sudo mkdir -p /opt/docker/gatus/{config,data}
sudo chown -R $USER:$USER /opt/docker/gatus

Basis-Konfiguration (config.yaml)
#

Erstelle die Hauptkonfigurationsdatei /opt/docker/gatus/config/config.yaml:

# Allgemeine Einstellungen
web:
  port: 8080
  
# Datenbank-Konfiguration (SQLite)
storage:
  type: sqlite
  path: /data/data.db

# UI-Konfiguration
ui:
  title: "Service Status Dashboard"
  header: "Service Monitoring"
  
# Endpunkte zum Überwachen
endpoints:
  - name: "Hauptwebsite"
    url: "https://deine-domain.de"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
      - "[RESPONSE_TIME] < 1000"
      - "[BODY] == pat(*Willkommen*)"
    
  - name: "API Service"
    url: "https://api.deine-domain.de/health"
    interval: 60s
    conditions:
      - "[STATUS] == 200"
      - "[BODY].status == UP"
    
  - name: "Database Connection"
    url: "tcp://db.deine-domain.de:5432"
    interval: 30s
    conditions:
      - "[CONNECTED] == true"
      - "[RESPONSE_TIME] < 500"
    
  - name: "DNS Check"
    url: "1.1.1.1"
    dns:
      query-name: "deine-domain.de"
      query-type: "A"
    interval: 60s
    conditions:
      - "[DNS_RCODE] == NOERROR"

Erweiterte Konfigurationsoptionen
#

Benachrichtigungen einrichten
#

Füge Slack-Benachrichtigungen hinzu:

alerting:
  slack:
    webhook-url: "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"
    default-alert:
      description: "Service Alert"
      send-on-resolved: true
      failure-threshold: 3
      success-threshold: 2

Authentifizierung aktivieren
#

Für geschützte Dashboards:

web:
  port: 8080
  
security:
  basic:
    username: "admin"
    password-sha512: "YOUR_SHA512_HASHED_PASSWORD"

Passwort-Hash generieren:

echo -n 'deinpasswort' | sha512sum

Service starten
#

1. Container starten
#

docker compose up -d

2. Logs überprüfen
#

docker compose logs -f

3. Service testen
#

Öffne deinen Browser und navigiere zu http://localhost:8080, um auf das Gatus-Dashboard zuzugreifen.


Monitoring Best Practices
#

Sinnvolle Check-Intervalle
#

  • Kritische Services: 30s - 1min
  • Weniger kritische Services: 2-5min
  • DNS/Infrastruktur: 1-2min

Condition-Beispiele
#

# HTTP Status und Response Zeit
conditions:
  - "[STATUS] == 200"
  - "[RESPONSE_TIME] < 1000"

# JSON Response validieren
conditions:
  - "[STATUS] == 200"
  - "[BODY].status == healthy"
  - "[BODY].database.connected == true"

# Header überprüfen
conditions:
  - "[STATUS] == 200"
  - "[HEADERS].Content-Type == application/json"

# Certificate Monitoring
conditions:
  - "[STATUS] == 200"
  - "[CERTIFICATE_EXPIRATION] > 72h"

Wartung und Updates
#

Container aktualisieren
#

# Neue Version pullen
docker compose pull

# Service neu starten
docker compose up -d

Backup der Daten
#

# Datenbank sichern
cp /opt/docker/gatus/data/data.db /backup/gatus-$(date +%Y%m%d).db

# Konfiguration sichern
tar -czf /backup/gatus-config-$(date +%Y%m%d).tar.gz /opt/docker/gatus/config/

Troubleshooting
#

Häufige Probleme
#

Problem: Service erreichbar, aber Checks schlagen fehl

# Netzwerk-Konnektivität testen
docker exec gatus ping deine-domain.de

# DNS-Auflösung prüfen
docker exec gatus nslookup deine-domain.de

Problem: Hohe Response-Zeiten

  • Überprüfe die Netzwerk-Latenz
  • Reduziere Check-Häufigkeit bei weniger kritischen Services
  • Verwende lokale DNS-Server

Debugging
#

# Detaillierte Logs aktivieren
docker compose logs -f | grep -i error

# Container-Status prüfen
docker compose ps gatus

Fazit
#

Mit dieser Konfiguration hast du ein robustes Monitoring-System, das:

  • Alle wichtigen Services überwacht
  • Bei Ausfällen benachrichtigt
  • Über ein Web-Interface verfügbar ist
  • Minimal Ressourcen verbraucht
  • Einfach zu warten ist

Gatus eignet sich perfekt für kleinere bis mittlere Infrastrukturen und bietet eine gute Alternative zu komplexeren Monitoring-Lösungen wie Prometheus/Grafana, wenn du ein einfaches, aber effektives Status-Dashboard benötigst.

Weiterführende Ressourcen
#

Florian Hoss
Autor
Florian Hoss