InfluxDB abfragen

Begonnen von KernSani, 22 Dezember 2019, 15:38:32

Vorheriges Thema - Nächstes Thema

KernSani

Hallo zusammen,

ich habe mal wieder gebastelt. Hintergrund ist, dass ich in letzter Zeit ein bisschen mit Telegraf, InfluxDB und Grafana gespielt habe. Nun wollte ich einzelne Werte aus der InfluxDB in FHEM verwenden. Zunächst hatte ich was in myUtils gebastelt, habe das aber jetzt in ein (noch sehr rudimentäres) Modul gegossen.
Aktuell kann das Modul nur Queries an die InfluxDB schicken und das Ergebnis in Readings speichern. Sinn macht das natürlich nur, wenn man nur einen oder wenige Werte zurück erwartet.

Definition erfolgt mit:

define meineInfluxDB InfluxDBQuery
 

Die Attribute sind eigentlich weitgehend selbsterklärend:
ix_host, ix_port sind host und port der influxDB
ix_db ist die Datenbank
ix_user und ix_passw sind user und passwort der DB (Passwort aktuell noch im Klartext, baue ich irgendwann mal um)
ix_query ist die Query, die ausgeführt werden soll. Es gehen auch mehrere durch Semikolon getrennte SELECTs
ix_queryNames dient zur schöneren Aufbereitung der generierten Readings und erwartet eine Komma-separierte Liste von beliebigen Namen, in der Reihenfolge der SELECTs in ix_query.

wird ix_interval gesetzt, wird die Query alle ix_interval Sekunden ausgeführt.

Get query führt dann die Query aus und erzeugt für jeden Ergebniswert ein Reading in der Form:
queryName_measurement_column_counter

Das Modul ist mal ein erster Wurf, der für meine Zwecke vorerst ausreichend ist, ich schraube bei Interesse und guten Ideen aber gerne noch mehr dran rum.

Schöne Feiertage,

Oli

zum ausprobieren:


defmod SYS_ix_cpu InfluxDBQuery
attr SYS_ix_cpu ix_db telegraf
attr SYS_ix_cpu ix_host localhost
attr SYS_ix_cpu ix_interval 60
attr SYS_ix_cpu ix_passw myPass
attr SYS_ix_cpu ix_port 8086
attr SYS_ix_cpu ix_query SELECT mean("usage_idle") * -1 + 100 FROM "cpu" WHERE ("cpu" = 'cpu-total') AND time >= now() - 30s GROUP BY time(30s) fill(null) ORDER BY time DESC LIMIT 1;;\
SELECT mean("used_percent") FROM "mem" WHERE time >= now() - 30s GROUP BY time(30s) fill(null) ORDER BY time DESC LIMIT 1;;
attr SYS_ix_cpu ix_queryNames cpu,mem
attr SYS_ix_cpu ix_user admin
attr SYS_ix_cpu stateFormat {"CPU: ".ReadingsNum($name,"cpu_cpu_mean_0",0,2)."% Mem:".ReadingsNum($name,"mem_mem_mean_0",0,2)."%"}



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

pitre

Liefert schon genau den Wert, den ich haben will!
DANKE! Jetzt muss ich das nur noch gescheit implementieren!

KernSani

Zitat von: pitre am 22 Dezember 2019, 22:45:48
Liefert schon genau den Wert, den ich haben will!
DANKE! Jetzt muss ich das nur noch gescheit implementieren!
Wenn du eine Idee hast, wie das Modul beim "gescheit implementieren" noch helfen kann, lass es mich wissen :-)

Frohes Fest!
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

raiderxxl

#3
Coole Sache das...


kann mir jemand kurz helfen wie ich nur den CPU wert eines bestimmten host (hostname=blablabla) anrufe?
Ich habe mehrere Telegraf client die in die influxdb schreiben...

Mit dem Beispiel wird ja nur der Wert des Server-Host geholt oder?

Grüßle

Pascal

Ich helfe mir mal selber :-)

defmod SYS_ix_cpu_2 InfluxDBQuery
attr SYS_ix_cpu_2 DbLogExclude .*
attr SYS_ix_cpu_2 ix_db telegraf
attr SYS_ix_cpu_2 ix_host ipdaresse
attr SYS_ix_cpu_2 ix_interval 60
attr SYS_ix_cpu_2 ix_passw myPass
attr SYS_ix_cpu_2 ix_port 8086
attr SYS_ix_cpu_2 ix_query SELECT mean("usage_idle") * -1 + 100 FROM "cpu" WHERE ("cpu" = 'cpu-total') AND "host"='hostname' AND time >= now() - 30s GROUP BY time(30s) fill(null) ORDER BY time DESC LIMIT 1;;\

attr SYS_ix_cpu_2 ix_queryNames cpu
attr SYS_ix_cpu_2 ix_user admin
attr SYS_ix_cpu_2 stateFormat {"".ReadingsNum($name,"cpu_cpu_mean_0",0,2)}\



Muss jetzt noch ein Userreading anlegen auf das ich vernünftig reagieren kann :-)


FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

raiderxxl

So nach 6 Stunden aktualisiert sich der Wert nicht mehr...

Zeitstempel geht hoch CPU nicht, drücke ich manuell auf geht query aktualisiert sich der Wert.

Grüßle

Pascal
FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

KernSani

Zitat von: raiderxxl am 24 April 2020, 23:18:47
So nach 6 Stunden aktualisiert sich der Wert nicht mehr...

Zeitstempel geht hoch CPU nicht, drücke ich manuell auf geht query aktualisiert sich der Wert.

Grüßle

Pascal
Hi Pascal,
hast du irgendwelche Meldungen im Log? Die Beispielquery oben läuft bei mir seit Monaten...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

raiderxxl

Hi,

hab mal auf Verbose auf 0 gestellt.

erster Abruf war intern über den Intervall der zweite dann wenn ich auf get query drücke:

2020.04.25 14:57:31 5:  [SYS_ix_cpu_kugiserver] URI: http://192.168.178.4:8086/query?db=telegraf&u=admin&p=myPass&q=SELECT+mean(%22usage_idle%22)+*+-1+%2B+100+FROM+%22cpu%22+WHERE+(%22cpu%22+%3D+'cpu-total')+AND+%22host%22%3D'kugiserver'+AND+time+%3E%3D+now()+-+30s+GROUP+BY+time(30s)+fill(null)+ORDER+BY+time+DESC+LIMIT+1%0A
2020.04.25 14:57:31 5:  [SYS_ix_cpu_kugiserver] {
  'statement_id' => 0,
  'series' => [
                {
                  'values' => [
                                [
                                  '2020-04-25T12:57:30Z',
                                  undef
                                ]
                              ],
                  'name' => 'cpu',
                  'columns' => [
                                 'time',
                                 'mean'
                               ]
                }
              ]
}

2020.04.25 14:58:11 5:  [SYS_ix_cpu_kugiserver] URI: http://192.168.178.4:8086/query?db=telegraf&u=admin&p=myPass&q=SELECT+mean(%22usage_idle%22)+*+-1+%2B+100+FROM+%22cpu%22+WHERE+(%22cpu%22+%3D+'cpu-total')+AND+%22host%22%3D'kugiserver'+AND+time+%3E%3D+now()+-+30s+GROUP+BY+time(30s)+fill(null)+ORDER+BY+time+DESC+LIMIT+1%0A
2020.04.25 14:58:11 5:  [SYS_ix_cpu_kugiserver] {
  'statement_id' => 0,
  'series' => [
                {
                  'values' => [
                                [
                                  '2020-04-25T12:58:00Z',
                                  '3.83451059426292'
                                ]
                              ],
                  'name' => 'cpu',
                  'columns' => [
                                 'time',
                                 'mean'
                               ]
                }
              ]
}
FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

raiderxxl

update nach fhem neu start tuts wieder ... komisch ...
FHEM VM Ubuntu-Server auf Intel® NUC-Kit NUC6i5SYH ESXi 6.5
FHEM auf Raspberry2 OSMC Hyperion und TTS

Homematic,TradfriHub und Lampen,WIFILight,Fritzbox,FritzDECT,NanoCul433,IT Steckdosen,Diverse Nachbar-Sensoren,XiaomiZigbee,
ESP_Signalduino,ESPEasy,Amad,HarmonyHub,WLED,MQTT,Tasmota....

timmib

Hallo zusammen,

es gibt jetzt ein Modul mit dem man aktiv von InfluxDB , genau genommen Kapacitor, die neuen Werte geschickt bekommt.

https://forum.fhem.de/index.php/topic,118208.0.html

Das heißt man braucht kein Polling mit Inerval mehr.

Außerdem lassen sich mit Kapacitor die tollsten statistischen Operationen realisieren, wenn einem einfach die aktullen Werte nicht reichen.

Viele Grüße

Tim