Monitoring mit Gatus

Monitoring mit Gatus. Umfangreicher als Uptime-Kuma. Einfacher als Zabbix 😉

Monitoring mit Gatus

In der heutigen digitalen Landschaft ist das Monitoring von IT-Systemen und -Diensten unerlässlich, um eine hohe Verfügbarkeit und Zuverlässigkeit zu gewährleisten. Gatus ist ein modernes Monitoring-Tool, das speziell entwickelt wurde, um die Verfügbarkeit von Webdiensten und Netzwerkdiensten zu überwachen. Mit seiner flexiblen Architektur und einer Vielzahl von Prüfmethoden bietet Gatus eine umfassende Lösung für DevOps-Teams, die kritische Anwendungen und Infrastrukturen betreuen. Die Bedeutung von Monitoring kann nicht genug betont werden: Es ermöglicht nicht nur die frühzeitige Erkennung von Problemen, sondern unterstützt auch eine proaktive Wartung der Systeme. In diesem Artikel werde ich die Vorteile von Gatus im Vergleich zu Uptime Kuma beleuchten.

Überblick über Gatus

Gatus bietet eine Vielzahl von Funktionen, die es zu einer leistungsstarken Wahl für das Monitoring machen. Dazu gehören:

  • Flexible Gesundheitschecks: Gatus ermöglicht es Benutzern, benutzerdefinierte Bedingungen für Gesundheitschecks festzulegen, was eine präzise Überwachung der Dienste gewährleistet.
  • Umfangreiche Alerting-Möglichkeiten: Die integrierte Alerting-Funktionalität informiert Administratoren sofort über Probleme und ermöglicht eine schnelle Reaktion.
  • Einfache Integration: Gatus lässt sich nahtlos in bestehende DevOps-Workflows integrieren.

Die Architektur von Gatus basiert auf einem leichtgewichtigen Ansatz, der es ermöglicht, sowohl lokal als auch in der Cloud betrieben zu werden. Die Konfiguration erfolgt über einfache YAML-Dateien, was die Implementierung und Wartung erheblich vereinfacht.

Das Dashboard von Gatus sieht dem von Uptime-Kuma sehr ähnlich:

Dieser Check wurde entsprechend der Doku eingerichtet:

endpoints:
  - name: Awtrix
    group: LED Devices
    url: http://awtrix1
    interval: 1m
    conditions:
      - "[STATUS] == 200"
      - "[CONNECTED] == true"

Alerting

Da ich mir einen ntfy-Server aufgebaut habe, kann ich die Alarme darüber signalisieren lassen. In der config.yml von Gatus trage ich einfach meinen Server ein:

alerting:
  ntfy:
    url: "https://push.meine-domain.de"
    token: "tk_n36gysc9kjjggzhiizgcjo64dgjoi53ui2w"
    topic: "selfhosted"
    priority: 3
    tags:
      - warning
      - gatus

So kann ich den einzelnen Endpoints mitgeben, wann ein Alarm erfolgen soll:

alerts:
  - type: ntfy
    enabled: true
    failure-threshold: 3
    success-threshold: 2
    send-on-resolved: true

Was ist der Vorteil gegenüber Uptime-Kuma?

Uptime-Kuma sieht schon recht schick aus und läßt sich sehr leicht konfigurieren:

Ich hatte jedoch das Bedürfnis, meinen Mailserver genauer zu überwachen, insbesondere hinsichtlich der SSL-Zertifikate. Es kam in der Vergangenheit immer wieder vor, dass die Zertifikate nicht rechtzeitig erneuert wurden, was zu möglichen Sicherheitslücken führen könnte. Um solche Probleme frühzeitig zu erkennen und rechtzeitig handeln zu können, war es mir wichtig, eine zuverlässige Überwachung für die SSL-Zertifikate einzurichten.

Mit Uptime Kuma ist es jedoch nicht möglich, SSL-Zertifikate außerhalb von regulären Webseiten zu überwachen, was in meinem Fall, da es um einen Mailserver geht, leider eine Einschränkung darstellt.

Wie setzt man Gatus auf?

Man kann auch diesen Container wieder in meine Umgebung einbauen, wenn man das Monitoring aus dem Internet betrachten möchte. In diesem Fall habe ich einfach meinem docker-compose.yml-File folgenden Abschnitt hinzugefügt:

  gatus:
    container_name: gatus
    image: twinproduction/gatus:latest
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
    ports:
      - 3002:8080
    volumes:
      - ./gatus/config:/config
    restart: unless-stopped
    labels:
      - "com.centurylinklabs.watchtower.enable=true"

Dabei bedeuten die Parameter folgendes:

  • Container-Name und Image
    • container_name: Der Container wird im Docker-Umfeld als gatus benannt. Dies ist hilfreich für die Organisation und Verwaltung von Containern.
    • image: Gibt das Docker-Image an, das für den Container verwendet werden soll. In diesem Fall wird das neueste Image von twinproduction/gatus verwendet.
  • Umgebungsvariablen
    • PUID und PGID: Diese Variablen definieren die Benutzer- und Gruppen-ID, unter der der Container ausgeführt wird. Der Wert 1000 ist oft der Standardbenutzer-ID auf Unix-Systemen und wird hier genutzt, um Berechtigungsprobleme mit Volumes und Dateisystemen zu vermeiden.
    • TZ: Diese Variable setzt die Zeitzone des Containers auf Europe/Berlin.
  • Ports
    • Ports: Leitet den Port 8080 des Containers auf den Port 3002 des Hosts weiter. Damit ist die Gatus-Oberfläche oder API auf Port 3002 des Host-Systems erreichbar.
  • Volumes
    • Volumes: Verbindet ein lokales Verzeichnis (./gatus/config) mit dem Verzeichnis /config im Container. Dadurch wird die Konfiguration des Gatus-Containers von außerhalb gespeichert und bei Container-Neustarts beibehalten.
  • Neustart-Strategie
    • restart: Der Container wird automatisch neu gestartet, falls er unerwartet beendet wird, außer er wurde manuell gestoppt (unless-stopped).
  • Labels
    • Labels: Mit diesem Label wird die Integration mit Watchtower aktiviert. Watchtower ist ein Docker-Dienst, der Container-Images automatisch auf Updates prüft und aktualisiert.

Configfile vorbereiten

Das File ./gatus/config/config.yml muss existieren und einen minimalen Inhalt haben, da gatus sonst nicht starten kann. Ein einfacher Start wäre:

# Global configuration
metrics: true  # Enable metrics endpoint
debug: false   # Disable debug mode for production

Checks werden dann, wie oben beschrieben, hinzugefügt.

Ein simples docker-compose up -d startet dann den Container und die Oberfläche ist unter http://[Container-IP]:3002 zu erreichen.

Fazit

Mit Gatus habe ich schließlich ein Tool gefunden, das deutlich mehr Funktionen bietet und es mir ermöglicht, meine Server umfassender zu überwachen. Im Vergleich zu anderen Lösungen erlaubt Gatus eine präzisere Kontrolle und bietet erweiterte Optionen, um verschiedene Aspekte meiner Serverinfrastruktur – einschließlich der SSL-Zertifikate – im Detail zu überwachen. So kann ich sicherstellen, dass potenzielle Probleme frühzeitig erkannt und rechtzeitig behoben werden, was die Sicherheit und Stabilität meiner Systeme erheblich verbessert.