Es ist so weit, `influxDB V3` ist raus

Moin,

ich habe heute mal etwas herumgespielt und mir einen Stack gebaut, der jetzt erst einmal so funktioniert, es sind noch Kleinigkeiten, wie z. B. alles über Environment zu steuern, anstatt alles im compose.yml hineinzuschreiben, auch gibt es noch ein Schönheitsfehler, der influxDB Container wird als unhealthy angezeigt, daher können auch die zwei anderen Container nicht gebaut werden, daher ist dieser Test kommentiert.
Die Dokumentation hat mir die KI geschrieben, da bin ich ja faul :slight_smile:

Nachtrag
das Problem mit dem Health Check habe ich gelöst :slight_smile:


InfluxDB v3 Core Monitoring Stack – Dokumentation

Diese Dokumentation beschreibt ein lokales Monitoring-Setup unter Verwendung von InfluxDB v3 Core als Zeitreihendatenbank, InfluxDB Data Explorer für Datenexploration und Grafana für Visualisierungen. Daten können von einem externen Telegraf-Agenten (z.B. auf Ihrem Host-PC) an InfluxDB gesendet werden.

1. Überblick der Komponenten

  • InfluxDB v3 Core (influxdb:3-core): Die Time-Series-Datenbank, die für die Speicherung aller Metriken zuständig ist. Lauscht auf Port 8181 (intern und extern).
  • InfluxDB Data Explorer (influxdata/influxdb3-ui:1.0.0): Eine Web-Oberfläche zur direkten Interaktion mit InfluxDB v3, zum Abfragen und Anzeigen von Daten. Erreichbar über Port 8888 auf Ihrem Host.
  • Grafana (grafana/grafana:latest): Eine leistungsstarke Plattform zum Erstellen von Dashboards und Visualisierungen. Erreichbar über Port 3000 auf Ihrem Host.
  • Telegraf (extern): Ein Metrik-Collector, der auf Ihrem Host-System läuft und Daten an die InfluxDB-Instanz im Docker-Stack sendet.

2. Verzeichnisstruktur auf dem Host

Stellen Sie sicher, dass die folgenden Verzeichnisse auf Ihrem Host-System existieren, bevor Sie den Stack starten. Diese werden für die persistente Speicherung von Daten und Konfigurationen verwendet, z. B.:

/mnt/docker/appdata/my_tig/
├── influxdb3_data/      # Persistente Daten für InfluxDB v3 Core
├── influxdb3_plugins/   # Plugins für InfluxDB v3 Core (optional)
├── grafana_data/        # Persistente Daten für Grafana (Dashboards, Benutzer etc.)
└── grafana_provisioning/
    └── datasources/     # Konfigurationsdateien für Grafana Datenquellen

Erstellen Sie diese Verzeichnisse bei Bedarf:
mkdir -p /mnt/docker/appdata/my_tig/influxdb3_data /mnt/docker/appdata/my_tig/influxdb3_plugins /mnt/docker/appdata/my_tig/grafana_data /mnt/docker/appdata/my_tig/grafana_provisioning/datasources

3. InfluxDB v3 Core Initialisierung

Nach dem allerersten Start der InfluxDB v3 Core Instanz müssen Sie manuell einen Operator-Token erstellen. Dieser Token ist entscheidend für die Authentifizierung aller Clients.

  1. Starte NUR den InfluxDB-Container:
    docker compose up -d influxdb
  2. Gehe in den Container:
    docker exec -it influxdb-v3-core bash
  3. Erstelle den Operator-Token:
    influxdb3 create token --admin
    Wichtig: Der hier ausgegebene Token ist Ihr Operator-Token. Kopieren Sie ihn sofort und sorgfältig! Sie benötigen ihn für alle weiteren Schritte.
  4. Verlasse den Container:
    exit

4. Konfiguration der Dienste

Alle Dienste benötigen den von Ihnen erstellten Operator-Token zur Authentifizierung bei InfluxDB.

4.1. docker-compose.yml

Aktualisieren Sie die Platzhalter in der docker-compose.yml mit Ihrem generierten Operator-Token. Die Tokens müssen in den environment-Sektionen der jeweiligen Dienste eingefügt werden.

4.2. Grafana Datenquelle

4.3. Telegraf Konfiguration (telegraf.conf)

Diese Datei wird vom externen Telegraf-Agenten auf Ihrem Host verwendet, um Daten an InfluxDB zu senden.

# Beispiel: Input-Plugin für Systemmetriken
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  fielddrop = ["time_guest", "time_guest_nice", "time_steal"]

[[inputs.mem]]

[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs"]

[[inputs.diskio]]

[[inputs.net]]

# Output-Plugin für InfluxDB v2/v3
[[outputs.influxdb_v2]]
  urls = ["http://localhost:8181"] # Wenn Telegraf auf dem Host läuft, ist es localhost
  token = "tokentokentokentokentokentokentokentokentokentokentokentoken" # Ihr Operator-Token
  organization = "my_org" # Ihre Organisation kann man mit Dummy ausfüllen z. B. "telegraf"
  bucket = "my_bucket" # Ihr Bucket, ich nehme der Einfachheithalber "telegraf"

5. Starten des Stacks

Nachdem Sie alle Konfigurationen vorgenommen und die Platzhalter durch Ihre tatsächlichen Werte ersetzt haben:

  1. Bereinigen Sie alte Container und Daten (optional, aber empfohlen bei Problemen):
    docker compose down -v
    sudo rm -rf /mnt/docker/appdata/my_tig/influxdb3_data/* (falls Sie einen ganz sauberen Start wünschen)
  2. Starten Sie den gesamten Stack:
    docker compose up -d

6. Zugriffs-URLs

  • InfluxDB v3 Core UI: http://ip.vom.docker:8181
  • InfluxDB Data Explorer: http://ip.vom.docker:8888
  • Grafana Dashboard: http://ip.vom.docker:3000 (Standard-Login: admin/admin), bitte gleich ändern!

Docker Compose File (docker-compose.yml)

version: '3.8'

services:
  # InfluxDB v3 Core (Single Node)
  # Datenbank für Zeitreihendaten
  influxdb:
    image: influxdb:3-core
    container_name: influxdb-v3-core
    ports:
      - "8181:8181" # Exponiert den InfluxDB HTTP/API-Port
    command:
      # Startbefehle für InfluxDB v3 Core
      - influxdb3
      - serve
      - --node-id=node0 # Eindeutige ID für diesen einzelnen Knoten
      - --object-store=file # Konfiguriert die Speicherung im lokalen Dateisystem
      - --data-dir=/var/lib/influxdb3/data # Pfad für die Daten im Container
      - --plugin-dir=/var/lib/influxdb3/plugins # Pfad für Plugins im Container
    volumes:
      # Bind-Mounts für die persistente Speicherung auf dem Host-Verzeichnis
      - type: bind
        source: /mnt/docker/appdata/my_tig/influxdb3_data
        target: /var/lib/influxdb3/data
      - type: bind
        source: /mnt/docker/appdata/my_tig/influxdb3_plugins
        target: /var/lib/influxdb3/plugins
    environment:
      # Dein Operator Token: UNBEDINGT MIT DEINEM ECHTEN TOKEN ERSETZEN!
      - INFLUXDB3_AUTH_TOKEN=tokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentoken
    healthcheck:
      # Healthcheck sendet den Token im Authorization Header mit, da /health Authentifizierung benötigt, dazu aber nicht die Variable nutzen, sonder nden Token direkt eintragen!
      test: ["CMD-SHELL", "curl -f -H 'Authorization: Bearer tokentokentokentokentokentokentokentokentokentokentokentokentokentokentoken' http://localhost:8181/health || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 90s # Lange Startphase, um InfluxDB Zeit zum Initialisieren zu geben
    networks:
      - monitoring_net

  # InfluxDB Data Explorer
  # Web-UI zur Interaktion mit InfluxDB v3 Daten
  influxdb-explorer:
    image: influxdata/influxdb3-ui:1.0.0 # Offizielles Image für InfluxDB 3 UI
    container_name: influxdb-data-explorer
    ports:
      - "8888:80" # Host 8888 auf Container 80 mappen, wie in der Doku
    command: ["--mode=admin"] # Startet den Explorer im Admin-Modus
    environment:
      # Konfiguration der Verbindung zum InfluxDB v3 Core
      - INFLUXDB_URL=http://influxdb:8181 # URL des InfluxDB-Dienstes im Docker-Netzwerk
      - INFLUXDB_VERSION=3 # Informiert den Explorer über die InfluxDB-Version
      # Token für den Explorer: UNBEDINGT MIT DEINEM ECHTEN TOKEN ERSETZEN!
      - INFLUXDB_TOKEN=tokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentokentoken
    depends_on:
      # Abhängigkeit vom InfluxDB-Container, wartet nur bis dieser gestartet ist
      # (Service Healthy könnte zu Problemen führen, wenn Healthcheck instabil ist)
      influxdb:
        condition: service_started
    networks:
      - monitoring_net

  # Grafana
  # Dashboard- und Visualisierungsplattform
  grafana:
    image: grafana/grafana:latest # Offizielles Grafana-Image
    container_name: grafana
    ports:
      - "3033:3000" # Exponiert den Grafana Web-UI-Port (Host 3033 auf Container 3000)
    volumes:
      # Bind-Mount für die persistenten Grafana-Daten
      - type: bind
        source: /mnt/docker/appdata/my_tig/grafana_data
        target: /var/lib/grafana
      # Bind-Mount für das Grafana Provisioning (Datenquellen, Dashboards etc.)
      - type: bind
        source: /mnt/docker/appdata/my_tig/grafana_provisioning
        target: /etc/grafana/provisioning
    environment:
      # Standard-Admin-Zugangsdaten (BITTE IN PRODUKTION ÄNDERN!)
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false # Deaktiviert die Benutzerregistrierung
    depends_on:
      # Abhängigkeit vom InfluxDB-Container, wartet nur bis dieser gestartet ist
      influxdb:
        condition: service_started
    networks:
      - monitoring_net

# Docker Netzwerke für die interne Kommunikation der Dienste
networks:
  monitoring_net:
    driver: bridge # Standard-Bridge-Netzwerk
2 „Gefällt mir“