# Grafana + InfluxDB 3 Core 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. ## 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` 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: ```bash install -m 600 /dev/null /mnt/user/appdata/secrets/grafana_admin_password.txt ``` 2. Offline-Admin-Token fuer InfluxDB 3 als JSON anlegen: ```json { "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 den ersten Start kann der Token aus `influxdb3_admin_token.json` verwendet werden; sobald ein eingeschraenkter Read-Token existiert, diesen hier eintragen: ```bash install -m 600 /dev/null /mnt/user/appdata/secrets/grafana_influxdb_token.txt ``` 4. Provisioning-Datei aus dem Git-Checkout auf den Host-Appdata-Pfad kopieren: ```bash mkdir -p /mnt/user/appdata/grafana/provisioning/datasources cp /mnt/user/appdata/komodo/core/repos/homelab-infra/ops/grafana-influxdb/provisioning/datasources/influxdb.yml /mnt/user/appdata/grafana/provisioning/datasources/influxdb.yml chmod 644 /mnt/user/appdata/grafana/provisioning/datasources/influxdb.yml ``` 5. Nach dem ersten Start die Datenbank anlegen: ```bash 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. - 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: ```bash 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.