Files
homelab-infra/ops/grafana-influxdb/README.md
T

5.0 KiB

Grafana + InfluxDB 3 Core

Status: abgeloester Altstand. Der zentrale Zielzustand ist monitoring/ mit monitoring-grafana, monitoring-influxdb3-core, Prometheus, Loki und Promtail.

Monitoring-Stack fuer Grafana + InfluxDB 3 Core. InfluxDB bleibt ohne Public Route; interne Writer wie Home Assistant koennen ueber einen gezielt gebundenen LAN-Port schreiben.

Nach erfolgreichem monitoring/-Deploy diesen Stack nicht parallel weiterbetreiben. Er bleibt vorerst als Rollback- und Migrationsreferenz im Repo.

Quellen / Entscheidungen

  • Grafana nutzt das offizielle OSS-Image grafana/grafana:12.4.3.
  • InfluxDB nutzt influxdb:3.9.1-core, nicht latest, weil latest bei InfluxDB aktiv in Richtung InfluxDB 3 umgestellt wird.
  • Grafana wird ueber Traefik + authelia@file,secure-headers@file unter grafana.kaleschke.info veroeffentlicht.
  • InfluxDB bleibt ohne Traefik-Route. Der HTTP-Port 8181 kann fuer interne Writer wie Home Assistant ueber INFLUXDB_BIND_IP auf eine LAN-Adresse gebunden werden; Default ist 127.0.0.1.
  • InfluxDB haengt an zwei Compose-Netzen: grafana_influx_internal fuer Grafana und grafana_influx_lan fuer das Docker Host-Port-Publishing. Im laufenden Komodo-Stack heissen sie durch den Compose-Projektpraefix grafana_grafana_influx_internal und grafana_grafana_influx_lan. InfluxDB haengt bewusst nicht im frontend_net.
  • Grafana provisioning legt eine SQL-Datenquelle fuer InfluxDB 3 Core mit der Datenbank homelab und eine Loki-Datasource fuer Container-Logs an.
  • Der Grafana-Datasource-Token liegt als Secret-Datei auf dem Host und wird beim Containerstart nur containerintern in die fuer Grafana-Provisioning noetige Environment-Variable geladen.
  • Home Assistant schreibt mit der InfluxDB-v2-API-Kompatibilitaet nach InfluxDB 3; Details: docs/HOME_ASSISTANT_INFLUXDB_ECOWITT.md.

Initiale Einrichtung

  1. Secret fuer Grafana anlegen:

    install -m 600 /dev/null /mnt/user/appdata/secrets/grafana_admin_password.txt
    
  2. Offline-Admin-Token fuer InfluxDB 3 als JSON anlegen:

    {
      "token": "apiv3_REPLACE_WITH_STRONG_RANDOM_TOKEN",
      "name": "admin",
      "description": "Admin token for KalliLab InfluxDB 3 Core"
    }
    

    Pfad: /mnt/user/appdata/secrets/influxdb3_admin_token.json, Rechte 600.

  3. Grafana-Datasource-Token anlegen. Fuer InfluxDB 3 Core aktuell einen eigenen Named-Admin-Token verwenden, damit der Grafana-Zugang getrennt vom initialen Operator-/Admin-Token rotiert werden kann:

    install -m 600 /dev/null /mnt/user/appdata/secrets/grafana_influxdb_token.txt
    
  4. Provisioning-Dateien aus dem Git-Checkout auf den Host-Appdata-Pfad kopieren:

    mkdir -p /mnt/user/appdata/grafana/provisioning/datasources
    mkdir -p /mnt/user/appdata/grafana/provisioning/dashboards
    cp /mnt/user/appdata/komodo/core/repos/homelab-infra/ops/grafana-influxdb/provisioning/datasources/influxdb.yml /mnt/user/appdata/grafana/provisioning/datasources/influxdb.yml
    cp /mnt/user/appdata/komodo/core/repos/homelab-infra/ops/grafana-influxdb/provisioning/dashboards/* /mnt/user/appdata/grafana/provisioning/dashboards/
    chmod 644 /mnt/user/appdata/grafana/provisioning/datasources/influxdb.yml
    chmod 644 /mnt/user/appdata/grafana/provisioning/dashboards/*
    
  5. Nach dem ersten Start die Datenbank anlegen:

    docker exec influxdb3-core influxdb3 create database homelab --token "$INFLUXDB3_AUTH_TOKEN"
    

Smoke-Test nach Deploy

  • https://grafana.kaleschke.info oeffnet nach Authelia die Grafana-Loginseite.
  • Grafana Connections -> Data sources -> InfluxDB 3 Core -> Save & test ist erfolgreich.
  • Grafana Connections -> Data sources -> Loki -> Save & test ist erfolgreich, sobald der Loki/Alloy-Stack laeuft.
  • Die provisionierten Dashboards Logs - Last 60m, Container Restart Events und Container Error Rate sind sichtbar.
  • InfluxDB bleibt ohne Public Route. Falls INFLUXDB_BIND_IP auf die LAN-IP gesetzt ist, ist Port 8181 nur im internen Netz fuer Writer wie Home Assistant erreichbar.
  • docker ps zeigt fuer influxdb3-core 192.168.178.58:8181->8181/tcp oder den per INFLUXDB_BIND_IP gesetzten Host.
  • ss -ltnp | grep 8181 zeigt einen Listener auf der gebundenen Host-IP.
  • curl -i http://192.168.178.58:8181/ liefert ohne Token erwartbar 401 Unauthorized.

Drift-Check

Wenn Komodo, Gitea und Runtime nicht zusammenpassen, zuerst docs/GITOPS_DRIFT_RUNBOOK.md verwenden. Besonders wichtig:

cd /mnt/user/services/stacks/grafana
git rev-parse --short HEAD
grep -nE "ports:|grafana_influx_lan|grafana_influx_internal" -A4 -B2 ops/grafana-influxdb/docker-compose.yml
docker inspect influxdb3-core --format '{{json .NetworkSettings.Ports}}'
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep influx
ss -ltnp | grep 8181

Rollback

  • Stack in Komodo stoppen oder Git auf den letzten Stand ohne ops/grafana-influxdb zuruecknehmen.
  • Persistente Daten liegen unter /mnt/user/appdata/grafana und /mnt/user/appdata/influxdb3; nicht automatisch loeschen.