Zum Inhalt

Monitoring

Diese Seite erklärt, was wir auf unseren Hosts messen, womit und warum die Ports der Exporter auf werner offen sein dürfen. Was Managed Services von außen überwachen und wer bei Störungen benachrichtigt wird, steht in Uptime-Monitoring und Cronjob-Monitoring.

Überblick

Wir überwachen auf drei Wegen; Uptime-Monitoring und Cronjob-Monitoring haben eigene Seiten:

Womit Was Wo es läuft Verwaltet über
Prometheus und Grafana Messwerte von werner: Auslastung des Hosts, Container, Caddy, Datenbanken containerhost Repo (Container), externes Repo (Dashboards)
Uptime Kuma ob unsere Dienste von außen erreichbar sind server.camp, Managed Service Web-Oberfläche
healthchecks.io ob das nächtliche Backup gelaufen ist healthchecks.io, Managed Service Web-Oberfläche
flowchart LR
    subgraph werner ["werner"]
        exp["Exporter<br>Host, Podman, Postgres"]
        caddy["Caddy<br>Metriken"]
        backup["system-backup"]
        apps["Apps"]
    end

    subgraph ch ["containerhost"]
        prom["Prometheus"]
        grafana["Grafana"]
    end

    kuma["Uptime Kuma<br>(server.camp)"]
    hc["healthchecks.io"]
    mail(["E-Mail an<br>it-admin@garage-lab.de"])

    prom -->|WireGuard-Tunnel| exp
    prom -->|WireGuard-Tunnel| caddy
    grafana --> prom
    backup -->|meldet jeden Lauf| hc
    kuma -->|prüft öffentliche Adressen| apps
    kuma --> mail
    hc --> mail

Prometheus und Grafana

Prometheus läuft auf containerhost und holt alle 30 Sekunden Messwerte von werner ab. Welche Ziele es abfragt, steht in prometheus.yml in syslet/containerhost/stack-prom.cue. Warum das Monitoring nicht auf werner selbst läuft, steht in containerhost.

Die Messwerte stellen auf werner Exporter bereit, jeder in einem eigenen Container:

  • node-exporter für den Host selbst: Prozessor, Arbeitsspeicher, Platten, Netz (syslet/werner/stack-nodeexporter.cue)
  • Podman-Exporter für die Container, in derselben Datei; er gibt die Container-Labels aus #Labels mit, sodass sich die Container nach App und Rolle gruppieren lassen (siehe syslet in diesem Repo)
  • postgres-exporter für jede Postgres-Datenbank, als eigener Container im Stack der App, zum Beispiel hedgedoc-postgres-exporter in syslet/werner/stack-hedgedoc.cue
  • Caddy liefert Messwerte je Hostname selbst; welcher Hostname zu welchem Container gehört, schreibt der node-exporter zusätzlich als eigene Messgröße aus den Ingress-Einträgen

Grafana läuft ebenfalls auf containerhost, unter grafana.garage-lab.net im Netz vor Ort, und zeigt die Messwerte aus Prometheus als Dashboards. Der Container steht im Repo in derselben Datei; die Dashboards pflegen wir in einem eigenen Repo.

Für Prometheus und Grafana ist im Repo keine Alarmierung eingerichtet; sie dienen zum Nachsehen, etwa wenn eine App langsam ist oder der Speicher knapp wird.

Die offenen Ports der Exporter

Die Exporter und Caddy veröffentlichen ihre Ports auf werner auf allen Netzwerkschnittstellen (PublishPort in den Stack-Dateien, der node-exporter über Network: "host"). Prometheus erreicht sie über den WireGuard-Tunnel unter der Adresse, die werner im Tunnel hat.

Aus dem Internet sind sie nicht erreichbar, weil die Netcup-Firewall sie nicht durchlässt (siehe Firewalls bei werner).

Weiterlesen