Raspi 4 + InfluxDB + SSD = SSD-Killer?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Leute,

    Wow ihr seid ja richtig fleißig :thumbup:

    ...

    Die meisten Zeitgenossen neigen (leider) dazu, vorhandene Tutorials unreflektiert nachzumachen.

    ...

    Ich dagegen habe echte Freude beim Programmieren eigener Ideen. Ich brauche dafür keine Datenbank. Mein Favorit sind weiterhin (doppelt) verkettete & indizierte Listen.

    ...

    Hallo Andreas, Danke für Deine umfangreiche Ausführung.

    Ich muss zugeben Du hast zumindest zum Teil Recht. Ja ich habe einiges nach Anleitung von diversen Tutorials installiert und genutzt.

    Aber:

    1. Ich weis was eine Verkettet Liste ist und wie man damit umgeht.
    2. Ich würde ich zwar nicht als Profi bezeichnen, dafür bin ich zu lange raus aber ich hab das mal ne Zeit lang beruflich gemacht.
    3. Man könnte dafür auch einen Microcontroller ohne Betriebssystem nutzen und würde damit nochmal ganz viel "unnützen Ballast" sparen
    4. Wollte ich eben einfach mal ein bisschen was über die Möglichkeiten einer aktuellen Datenbank mit Grafischem Frontend lernen.
    5. Glaubt man manchmal mit etwas Vorgefertigtem etwas schneller zu Rande zu kommen.

    Bitte nicht falsch verstehen, Ich schätze und teile Deine Aussage durchaus!

    Aber vielleicht kommen wir mit den Aussagen zu Cache und

    Vielleicht bringt

    Code
    docker stats

    etwas Licht ins Dunkel.

    Irgend etwas schreibt die SSD voll, bzw. hat hohe Schreibzyklen.

    Btw. Nextcloud nutzt auch eine Datenbank.

    dem Lerneffekt auch näher.

    Ich gehe jetzt mal davon aus, das ist seit dem letztem Start und der war vor rund 23 h

    Wenn ich das jetzt richtig lese, dann werden aus 364MB die über das Netz kommen 552 GB Schreib-Operationen auf der SSD. :@

    Wow nicht schlecht.

    Dann muss ich mich wohl mal näher mit der Konfiguration der influxdb beschäftigen :conf:

    Ich werde mal schauen wie das mit dem cache geht und was es bringt.

    Ich werde berichten...

    Gruß Claus

  • Dann muss ich mich wohl mal näher mit der Konfiguration der influxdb beschäftigen

    Sieh Dir auch an was fuer Daten und wie Du sie genau in die InfluxDB steckst. InfluxDB ist auf Zeitreihen optimiert. Wenn Du bei jedem Datensatz einen unique key in die DB schreibst nutzt Du nicht die Optimierungen :no_sad:

    tamiasunchild Dein Code sieht OK aus.

  • ...

    Bei mir werden von ca 20 Sensoren jede Minute Messdaten in eine InfluxDB geschrieben. Momentan sind um die 20 Millionen Daten in der DB die ich komfortabel per Grafana analysieren kann. Allerdings werden die Daten nicht auf eine SSD geschrieben sondern eine Harddisk :shy: LTW ist 2TiB. 46TB ist sehr viel bei Dir. Ich koennte mir denken dass Deine Daten die Du in die DB reinsteckst ungeschickt gewaehlt sind so dass fuer jede Messung immer wieder ein neuer Datensatz angelegt wird. Das ist z.B. der Fall wenn Du jedes mal einen Timestamp oder sonstigen unique Key (z.B. eine UUID) mit den Daten ablegst.

    Mag sein, dass ich es bei einigen Sensoren mit Sekündlicher Ablage etwas übertreibe, da lässt sich sicher was machen. Und mit der Auswertung, dass ist genau das was ich auch faszinierend finde.

    Auch das Thema Timestamp bzw. UUID müsste ich mir nochmal anschauen.

    Aktuell werden alle Daten von node red in die influx geschrieben. Wie node red macht hab ich noch nicht weiter Untersucht.

    Wobei wir wieder bei der Aussage von Andreas sind :) "Tutorials unreflektiert nachzumachen" :angel:

  • Wie node red macht hab ich noch nicht weiter Untersucht.

    Ich schicke bei mir die Sensordaten per MQTT an mosquitto und Telegraf hat sich auf die Topics subscribed und schreibt sie in die InfluxDB. Warum Du node-red als Durchlauferhitzer nutzt um die Daten in die InfluxDB zu bekommen weiss ich nicht. Falls Du die Daten in node-red brauchst wuerde ich mich auf die MQTT Topics in node-red subscriben und die Daten verarbeiten. Dadurch hast Du das Speichern und realtime Abfragen der Daten getrennt und keinen Durchlauferhitzer mehr.

  • Ich schicke bei mir die Sensordaten per MQTT an mosquitto und Telegraf hat sich auf die Topics subscribed und schreibt sie in die InfluxDB. Warum Du node-red als Durchlauferhitzer nutzt um die Daten in die InfluxDB zu bekommen weiss ich nicht. Falls Du die Daten in node-red brauchst wuerde ich mich auf die MQTT Topics in node-red subscriben und die Daten verarbeiten. Dadurch hast Du das Speichern und realtime Abfragen der Daten getrennt und keinen Durchlauferhitzer mehr.

    Das ist bei mir historisch bedingt, Node Red hatte ich vorher schon. Telegraf hab ich derzeit nicht drauf.

    eins nach dem Anderen, jetzt schaue ich erstmal nach dem Cache...

  • Wie node red macht hab ich noch nicht weiter Untersucht.

    Dann solltest du dort mal nachsehen. Es wäre durchaus denkbar das hier z.B durch eine Schleife ohne Pause gigantische Datenmengen gespeichert werden. Es ist immer gut zu wissen welcher Code so im Projekt läuft. Man muss es ja nicht bis in das letzte Detail verstehen, aber ein grobes nachvollziehen macht Sinn. Nebenbei lernt man einiges dabei.

  • Einer der Docker ist eine InfluxDB. Diese bekommt von mehreren Sensoren teilweise sekündlich Werte. Da es jeweils nur kleine Datenmengen sind ist die 256 GB SSD bisher nur zu 31% gefüllt.

    Hallo Claus,

    ich betreibe InfluxDB und Grafana auf einem Raspberry Pi Zero W seit bald 4 Jahren nur mit der SD Karte und schreibe alle 20 Sekunden 6 Temperaturwerte. Ich habe dieselben Einstellungen betreffend retention policy (0s = nie löschen) und die Datenbank ist nun knapp unter 100 MBytes gross. Durch den Einkern-Prozessor gibt es bei mir Probleme, welche täglich um etwa 05:10 auftreten, wenn influxd ein TSM compaction mit tsm1_strategy=full macht. Dann fehlen bei den Kurven in Grafana Werte, weil der Prozessor Daten umorgelt und andere Tasks nicht dran kommen (Schreibaufträge). Diesen Herbst habe ich mal genauer in die Logs geschaut und bemerkt, dass dies nur mit der internen Datenbank zu tun hat, die interne Statistik führt mit nicht dokumentierten Einträgen (bei mir 113 Werte, alle 10 Sekunden geschrieben), welche wohl eh niemand anschaut und versteht. Dabei werden Unmengen von Daten geschrieben, zusammengefasst und wieder geschrieben. Diese Daten haben eine Lebensdauer von 7 Tagen (168h) und belegen etwa 44 MBytes. Konkret habe ich dabei ein krasses Missverhältnis festgestellt: meine Datenbank wuchs in etwa 7,5 Minuten um 8,6 kBytes, die interne um 14,7 MBytes, und beim Auslesen stellte ich fest, dass die interne für jeden Wert alle 10 Sekunden 208 Werte liefert - wozu weiss ich nicht. Dies ist für mich klar ein SD Karten Killer und ist sicher auch nicht gut für eine SSD.

    Diese interne Datensammlung habe ich in influxdb.conf abgestellt und habe keine Ressourcenprobleme mehr, Grafana hat alle Werte zum Anzeigen und im syslog sind die Fehlermeldungen verschwunden. Für einen Energiezähler habe ich auch einen Raspberry Pi 3A+ im Einsatz, der keine Fehlermeldungen im syslog hat (4 Kern Rechner) und keine Aussetzer in den Grafana Kurven, aber ebenfalls diese unverhältnismässig vielen Daten schreibt, wenn nicht wegkonfiguriert.

    Code
    [monitor]
    # Whether to record statistics internally.
    # store-enabled = true
    store-enabled = false

    Siehe auch https://community.influxdata.com/t/influxdb-and…pi-zero-w/27883

    Freundliche Grüsse

    ufudervo

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!