meine Probleme mit InfluxDB 2.7

Ich nutze InfluxDB 2.7 zusammen mit OpenHAB, beide laufen in separaten Docker-Containern. OpenHAB schreibt fleissig Messwerte, aber manchmal möchte man nachträglich historische Daten hinzufügen, korrigieren oder löschen. In der „neuen tollen GUI“ von 2.7 gibt es jedoch keine direkte Möglichkeit, Messwerte zu löschen oder zu bearbeiten.

Ein Downgrade auf InfluxDB1.* und Chronograf habe ich zwar versucht (dort hat das damals nämlich „einfach so“ funktioniert) aber klappte schlussendlich nicht wegen den Daten die ich nicht migrieren konnte sowie der Chronograf der einfach nicht starten wollte.

Einen halben Tag damit versauert und entnervt aufgegeben mit dem Gedanken, den Scheiss nie mehr anzufassen.

New Day, New Trys…

Aber, am nächsten Tag: nächster Versuch gestartet. Diesmal Daten per CSV eintragen (das hab ich nämlich damals mit 1.8 und Chronograf einfach so gemacht). Jetzt mit einer neueren Version von Influx sollte das ja noch viel einfacher sein! Doch egal was ich tat – immer Fehlermeldungen. Immer mit dem Hinweis, man solle doch den Raw-Import versuchen. „Ja wiedenn?!?“ Kein Button, keine Infos, nichts was dir hilft. Ich dachte, die müssen die CLI meinen, also hab ich mich darauf ausgerichtet.
Kurz gesagt: der Scheiss hat auch nicht funktioniert, immer Probleme mit dem Zeitstempel: Weder Epoch noch ISO noch RFC3339 wollten so wie ich. Am ehesten noch Epoch (Unix nanoseconds), aber auch da stimmten die Werte/Zeitstempel nie. Auch jede Zeile einzeln – keine Chance.

Line Protocol habe ich natürlich ebenfalls getestet, exakt nach Doku mit Headern und Metadaten – Fehlanzeige. Auch abgespeckte Varianten mit minimalen Headern funktionierten nicht. Also weiter mit CSV probiert, in der Annahme, das sei doch „einfacher“. War es nicht.

Nach einigen weiteren Stunden gab ich auf. Mein letzter Versuch war, in der GUI eine LineProtocol-Datei hochzuladen. Schlug natürlich fehl – trotz UTF-8 und LF (alle drei Varianten getestet) als Zeilenende.
Doch dann, die Wendung die alles veränderte: „Enter manually“
Ausprobiert:

<measurement> value=123 <19stelligerZeitstempel>

SIMPLE AS FUCKING THAT

Enter. Akzeptiert. Korrekt drin. Bier aufgemacht.
Rest der Daten genauso eingegeben. (Export aus LibreOffice Calc mit der Zellenformatierung *“value=“#* als CSV mit Leerzeichen-Trenner, in Notepad++ geöffnet, alles kopiert, im GUI eingefügt, Enter → alle Einträge drin.)

Natürlich…

habe ich hier nicht alles dokumentiert – ursprünglich wollte ich über den ganzen Frust noch ausführlicher ranten, inklusive meiner Abstecher in Python-Skripte, die einem den Import erleichtern würden, die API mit der das auch geht, und warum ich das alles dann doch nicht nutzte. Früher™ in InfluxDB 1.* war das in meiner Erinnerung einfacher.

Ich frage mich schon, warum die Entwickler von Influx sich nicht ein Beispiel an eben diesen Scripten nehmen und das direkt in ihr Produkt einbauen… Dann wäre doch allen geholfen?

Aber: Ich habe meinen Weg gefunden – und das wollte ich hier festhalten, vielleicht hilft es ja irgendwem der einfach nicht weiterkommt.


TL;DR

Um einige historische Daten in influxDB2.7 zu bekommen würde ich die GUI -> Load Data -> Lineprotocol -> Enter Manually verwenden.

<measurement> value=123 <19stelligerZeitstempel>
<measurement> value=124 <19stelligerZeitstempel>
<measurement> value=125 <19stelligerZeitstempel>
<measurement> value=126 <19stelligerZeitstempel>

CLI Befehle

Docker

Datei in Docker-Container schieben:

docker cp <lokale Datei> <containername>:/pfad/im/container/

Datei aus Container auf Host

docker cp <container>:/pfad/zur/datei ./  

Docker Container interaktiv (Shell) ausführen (auch wenn euch die KI sagt, man solle hintendran anstatt /bin/bash -> influx schreiben, funktioniert nur in influx1.* richtig)

docker exec -it <containername> /bin/bash

Login in die InfluxDB GUI

Falls Benutzer/Passwort unbekannt sind: in der docker-compose.yml oder den ENV-Variablen nachschauen.
In der GUI anmelden → oben links auf den Namen klicken → About.

  • Org: manchmal funktioniert die ID, bei mir brauchte ich den Klartext-Namen.
  • Token: unter Load Data → API Tokens abrufbar. Bei Bedarf neuen Token anlegen und später wieder löschen.

alte InfluxDB v1 shell

influx v1 shell \
--host http://localhost:8086 \
--org <name der organisation> \
--token <api token>

Influx Bucket-Namen

influx bucket list --org <name der organisation> --token <api token>

CSV importieren

influx write \
  --org <name der organisation> \
  --token <api token> \
  --bucket <bucket name> \
  --file xyz.csv \
  --format csv
  --log-level debug

Anhängen falls gewünscht, dann nur Logoutput, hat mir aber nichts gebracht da unzureichende „Fehlerbeschreibung“.

Komplettes measurement löschen

influx delete \
--bucket <bucket name> \
--org <name der organisation> \
--token <api token> \
--start 1970-01-01T00:00:00Z \
--stop 2100-01-01T00:00:00Z \
--predicate '_measurement="<name des measurements>"'

Für was ich die v1 Shell brauchte

dort drin konnte ich schnell überprüfen ob die Werte reingeschrieben wurden. Zuerst mit „use <db>“ die Datenbank/Bucket auswählen, dann mit „SELECT * FROM _measurement“ anzeigen lassen (aktualisiert sich nicht von selbst, mit q raus und Pfeil nach oben, Enter = neue Daten), oder mit drop eben das ganze measurement löschen.