Relution-Monitoring mit Grafana (Optional)

Einleitung

Relution bietet eine Vielzahl von Metriken, die mittels Grafana visualisiert werden können. Im Folgenden haben wir eine Basiskonfiguration für ein Docker-Setup sowie zwei Dashboards bereitgestellt. Diese Konfigurationen können nach eigenen Bedürfnissen angepasst werden.

Prometheus, Grafana und die einzelnen Dashboards werden nicht vom Relution-Support betreut.

Konfiguration lokaler Service

Diese Konfiguration implementiert Prometheus und Grafana in ein on Premises betriebes Relution Setup in einer Docker Umgebung. Soll ein Server überwacht werden, auf den beispielsweise kein direkter Zugriff besteht, finden Sie die Konfiguration weiter unten.

Notwendige Dateien und Verzeichnisse

Wie erwähnt, sind die Konfigurationen verfügbar und können hier → heruntergeladen und verwendet werden.

Dateien

  • docker-compose.yml
    • Beinhaltet die Konfigurationen der Docker Container Prometheus und Grafana.
  • prometheus.yml
    • Beinhaltet die Konfiguration von Prometheus.
  • .env
    • Hier sind die Variablen GF_SECURITY_ADMIN_USER und GF_SECURITY_ADMIN_PASSWORD enthalten. Für den Produktivbetrieb ist es empfehlenswert, das Passwort zu ändern.

Subfolder

  • Dashboards Beispieldashboards: Die Konfigurationsdateien für zwei Beispieldashboards sind enthalten. Diese Dashboards werden automatisch in den Grafana Docker Container importiert.

  • Provisioning Basiskonfigurationen: Die Konfigurationsdateien für die Datenquelle Prometheus und die beiden Beispieldashboards sind enthalten. Diese Konfigurationen können nach Bedarf angepasst werden.

Einbindung der docker-compose.yml

Die hier beschriebene docker-compose.yml kann auf zwei Arten verwendet werden:

  • Standalone Die Datei kann als eigenständige Datei benutzt werden.

  • Inhaltlich Der Inhalt der kann in eine bestehende docker-compose.yml eingebunden werden.

In unserem Beispiel wird der Inhalt der Datei in die bestehende docker-compose.yml eingebunden. In diesem Fall ist es wichtig, dass die Dateien und Verzeichnisse der Volumes an der entsprechenden Stelle liegen und die korrekten Berechtigungen haben. In unserer verwendeten docker-compose.yml sind die Container mariadb, relution und nginx vorhanden, deshlab sind die Zeilen zwei bis vier sind lediglich zur Orientierung eingefügt worden.

services: # bereits vorhanden
  # mariadb:  bereits vorhanden
  # relution:  bereits vorhanden
  # nginx:  bereits vorhanden

  prometheus:
    image: prom/prometheus:${DOCKER_PROMETHEUS:-latest}
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    networks:
      relution-network:
    ports:
      - "${PORT_PROMETHEUS:-9090}:9090"
    expose:
      - "9090"
    logging:
      driver: "json-file"
      options:
        max-size: "${DOCKER_PROMETHEUS_LOGSIZE:-8m}"
        max-file: "4"
        compress: "true"

  grafana:
    image: grafana/grafana:${DOCKER_GRAFANA:-latest}
    volumes:
      - ./provisioning:/etc/grafana/provisioning
      - ./dashboards:/var/lib/grafana/dashboards
    depends_on:
      - prometheus
    environment:
      # set the placeholder in dashboard, to the actual name of datasource
      DS_PROMETHEUS: "Prometheus"
      # set grafana default admin user
      GF_SECURITY_ADMIN_USER: "${GF_SECURITY_ADMIN_USER}"
      # set grafana default admin password
      GF_SECURITY_ADMIN_PASSWORD: "${GF_SECURITY_ADMIN_PASSWORD}"
    networks:
      relution-network:
    ports:
      - "${PORT_GRAFANA:-3000}:3000"
    expose:
      - "3000"
    logging:
      driver: "json-file"
      options:
        max-size: "${DOCKER_GRAFANA_LOGSIZE:-8m}"
        max-file: "4"
        compress: "true"

In der docker-compose.yml sind die Ports für Prometheus und Grafana auf 9090 bzw. 3000 festgelegt. Dieser Abschnitt kann für das Beispiel in die vorhandene docker-compose.yml eingefügt werden.

Anpassung der .env Datei

Für die Sicherheit ist es empfehlenswert, den Parameter für das Kennwort anzupassen.

GF_SECURITY_ADMIN_USER=admin
GF_SECURITY_ADMIN_PASSWORD=password

Anpassungen der prometheus.yml Datei

global:
  # Default scrape interval
  scrape_interval: 15s

scrape_configs:
  # Job to scrape Prometheus metrics
  - job_name: "prometheus"
    scrape_interval: 5s
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "relution"
    # Job to scrape application metrics
    metrics_path: "/actuator/prometheus"
    scrape_interval: 5s
    static_configs:
      # Call the docker host inside container
      - targets: ["relution:8099"]

In unserem konkreten Setup muss in der letzten Zeile der Name des Containers, in diesem Fall relution:8099, stehen. Mit dem Befehl docker ps kann der Name und der Port des genutzen Container geprüft und anschließend bei Bedarf angepasst werden. Wenn die Container mit docker compose down bzw. docker compose up -d heruntergeladen und gestartet werden, ist die Grafana UI unter der IP des Servers und Port 3000 erreichbar. Es steht nun ein Relution Dashboard zur Verfügung.

Dashboards

Relution Server Dashboard: Grafana Dashboard

Konfiguration für Remote-Server

Grafana wird in diesem Szenario ebenfalls in einem Docker-Container betrieben. Um Metriken korrekt auslesen zu können, sind spezifische Anpassungen notwendig. Der wesentliche Unterschied zur lokalen Konfiguration besteht darin, dass dieses Setup über https mit der Relution-Instanz kommuniziert.

Vorbereitung in Relution

Bevor die Container gestartet werden, muss ein entsprechender Benutzer in Relution existieren:

  • Organisation: Der User muss zwingend in der Global Organisation angelegt werden.
  • Berechtigung: Weisen Sie dem User die Berechtigung Health Check (bzw. Systemzustand) zu.
  • Authentifizierung: Der Zugriff muss über Basic Authentication erfolgen.
  • Benutzerkonten mit OIDC (Single Sign-On) funktionieren für diesen Zweck nicht.
  • Multi-Faktor-Authentifizierung (MFA) muss für diesen Account deaktiviert sein.

Download und Entpacken

Laden Sie die vorbereiteten Konfigurationsdateien herunter:
Grafana Setup herunterladen →

Entpacken Sie das Archiv in ein Verzeichnis Ihrer Wahl auf dem Zielserver.

Anpassung der Konfigurationsdateien

Datei: compose.yml

Passen Sie die Umgebungsvariablen für den administrativen Zugriff auf die Grafana-Oberfläche an:

  • GF_SECURITY_ADMIN_USER: Ihr gewünschter Administrator-Benutzername.
  • GF_SECURITY_ADMIN_PASSWORD: Ein sicheres Passwort für den Grafana-Login.

Datei: prometheus.yml

In dieser Datei wird die Verbindung zur Relution-Schnittstelle definiert. Ersetzen Sie die Platzhalter durch Ihre spezifischen Daten:

ParameterBeschreibung
$SERVER_URLDie externe URL Ihres Relution-Servers (wichtig: ohne das Präfix https://).
usernameDer Benutzername des in Schritt 1 erstellten Relution-Users.
passwordDas zugehörige Passwort des Users.

Deployment

Sobald die Konfiguration abgeschlossen ist, können die Container gestartet werden. Führen Sie dazu folgenden Befehl im Verzeichnis aus:

docker compose up -d

Hinweise zum Zugriff:

  • Grafana ist standardmäßig über den Port 3000 erreichbar.
  • Der Zugriff kann je nach Server-Härtung direkt über die IP/Domain oder gesichert über einen SSH-Tunnel erfolgen.

Um den Zugriff auf Grafana sicher über einen SSH-Tunnel zu realisieren, können Sie die Port-Weiterleitung nutzen. Dies ist besonders sinnvoll, wenn Port 3000 in der Firewall des Servers nach außen hin geschlossen ist.

SSH-Tunnel aufbauen

Führen Sie den folgenden Befehl in Ihrem lokalen Terminal (Windows PowerShell, macOS oder Linux) aus:

ssh -L 3000:localhost:3000 benutzername@ihr-server-ip

Erläuterung der Parameter:

  • -L 3000:localhost:3000: Dies leitet den Port 3000 Ihres lokalen Rechners an den Port 3000 des Remote-Servers weiter.
  • benutzername: Ihr SSH-User auf dem Server.
  • ihr-server-ip: Die IP-Adresse oder der Hostname Ihres Remote-Servers.

Zugriff auf die Oberfläche

  1. Lassen Sie das Terminalfenster mit der aktiven SSH-Verbindung geöffnet.
  2. Öffnen Sie Ihren Webbrowser.
  3. Geben Sie in die Adresszeile ein: http://localhost:3000
  4. Melden Sie sich mit den Zugangsdaten an, die Sie in der compose.yml unter GF_SECURITY_ADMIN_USER und GF_SECURITY_ADMIN_PASSWORD definiert haben.