Neues Modul Kapacitor(für InfluxDBs)

Begonnen von timmib, 26 Januar 2021, 23:57:27

Vorheriges Thema - Nächstes Thema

Karflyer

Hallo Tim,

ich habe deine Module nun auch in Verbindung mit InfluxDB 2.0 am laufen. Habe aber folgendes Verhalten:
Ich habe measurements, die von telegraf-clients beschrieben werden. Bei einem measurement (system) werden dessen Feldinhalte (load1, load2... ) vom Modul in die entsprechenden Readings geschrieben. Sobald ich hier das Attribut where (lambda: "host" == 'netpi') setze, kommen keine Werte mehr.
Bei einem zweiten measurement (cpu_temperature) kommen überhaupt keine Werte. Ich kann nicht feststellen warum es bei einem measurement wenigstens halbwegs klapp und bei einem anderen gar nicht.
Eine Idee?

Grüße
Stefan

timmib

#31
Zeig mal bitte wie das Attribut where genau gesetzt ist, oder wie es bei

kapacitor show auf der CLI gezeigt wird.

Karflyer

ZitatZeig mal bitte wie das Attribut where genau gesetzt ist, oder wie es bei

in FHEM sieht das so aus:
Attributes:
   meanField  load1
   room       Log
   where      lambda: "host" == 'smartnuc'
   windowSize 5s


kapacitor show liefert:
stream
    |from()
        .measurement('system')
        .where(lambda: "host" == 'smartnuc')
    |window()
        .period(30s)
        .every(5s)
    |mean('load1')
    |alert()
        .id('fhem.kaptask01')
        .info(lambda: TRUE)
        .tcp('192.168.xxx.xxx:50226')

timmib

#33
Schade, das sieht alles gut aus.

Und was sagen die stats?

Dort sieht man ja schön wo in der Pipeline wieviel Daten verarbeitet wurden.

valvak

Danke für die rasche Umsetzung tim, komme leider erst am Wochenende zum produktivem umsetzen.

Gruß Mark

Karflyer

#35
Eine kleine Zusammenfassung was zu tun ist um Kapacitor mit InfluxDB 2.0 in Verbindung mit diesem Modul und Telegraf zu nutzen.
In der InfluxDB 2.0-Doku https://docs.influxdata.com/influxdb/cloud/tools/kapacitor/#use-kapacitor-stream-tasks gibt es eine Beschreibung wie die Telegraf-Config (telegraf.conf) aussehen muss, wenn Kapacitor genutzt werden soll. Die hier aufgeführten Beispielkonfigurationen sind fehlerhaft. Richtig muss es so lauten:
# Write to InfluxDB Cloud or OSS
[[outputs.influxdb_v2]]
  urls = ["http://URL zur InfluxDB:8086"]
  token = "Dein Token"
  organization = "Deine Organisation"
  bucket = "telegraf"

# Write to Kapacitor
[[outputs.influxdb]]
  urls = ["http://URL zu Kapacitor:9092"]
  database = "telegraf"
  retention_policy = "Deine RP"
  skip_database_creation = true


Beide Blöcke müssen in alle Telegraf-Konfigurationen über die Daten in die INFLUX-DB geschrieben werden.

In der Konfigurationsdatei von Kapacitor (kapacitor.conf) muss der InfluxdB-Block mindestens wie folgt aussehen:
[[influxdb]]
  enabled = true
  urls = ["http://URL zur InfluxDB:8086"]
  username = "Dein Username in der InfluxdB"
  password = "Dein Token" (nicht das Password)
  disable-subscriptions = true


Als Token reicht jeweils ein Token der Schreibrechte auf die Telegraf-Datenbank hat.

Weil ich selbst zunächst selber darüber gestolpert bin. Wer parallel zu InfluxDB 2.0 und Kapacitor Chronograf nutzt, um z.B. leichter die von Tim's Modul erzeugten TICKscript's zu sehen, braucht zwingend Chrongraf aus dem 'quay.io/influxdb/chronograf:1.8.9.1' Repository. Chronograf aus dem TICK-Stack funktioniert hier nicht.

Tim, damit müsste dein ToDo 'InfluxDB2 support' erledigt sein.

Grüße
Stefan

timmib

Super Beitrag,

wir brauchen echt mal eine Wiki-Seite rund um den TICK-Stack in Kombination mit FHEM.

Tsturm

Hi Tim

bin gerade dabei, Dein Kapacitor-Modul einzusetzen. Ich stolpere allerdings noch bei der Einrichtung, ich habe bei den Tasks eine ganze Liste von TCP-Adressen, die Kapacitator scheinbar nicht mag. Definiert habe ich es mit der .10 IP adresse. Mein Raspi hat sowohl wlan als auch lan, bie IF config wird diese TCP-Adressenliste gezeigt. Irgendwie greift sich Kapacitor die ganze IP-Liste im Task:

        .tcp('192.168.178.10 192.168.178.82 172.17.0.1 169.254.177.247 169.254.224.215:50226')


auf jeden Fall kommt noch nichts im Task bei FHEM an. Any hints? Wie kann ich die Verbindung schrittweise checken?

VG timmo

PS - danke für das INFLUX-Modul - läuft super!

Anbei die Lists:

Internals:
   CFGFN     
   DEF        192.168.178.10
   FD         25
   FUUID      608875a6-f33f-8338-d893-c01112509903f175
   HOST       192.168.178.10
   KAPACITOR_PORT 9092
   NAME       Influx_kapa
   NR         374
   PORT       50226
   STATE      opened
   TYPE       Kapacitor
   READINGS:
     2021-04-27 22:35:50   state           opened
Attributes:


Internals:
   CFGFN     
   DATABASE   plants
   DEF        Influx_kapa plants autogen sensor1
   FUUID      608875c6-f33f-8338-d980-08d6b246e21a582d
   IODev      Influx_kapa
   MEASUREMENT sensor1
   NAME       Influx_kapa_Task1
   NR         382
   RETENTIONPOLICY autogen
   STATE      created
   TYPE       KapacitorTask
   READINGS:
     2021-04-27 22:36:22   state           created
Attributes:


List task:
pi@sturmserver:~ $ kapacitor show fhem.Influx_kapa_Task1
ID: fhem.Influx_kapa_Task1
Error:
Template:
Type: stream
Status: enabled
Executing: true
Created: 27 Apr 21 22:36 CEST
Modified: 27 Apr 21 22:36 CEST
LastEnabled: 27 Apr 21 22:36 CEST
Databases Retention Policies: ["plants"."autogen"]
TICKscript:
stream
    |from()
        .measurement('sensor1')
    |alert()
        .id('fhem.Influx_kapa_Task1')
        .info(lambda: TRUE)
        .tcp('192.168.178.10 192.168.178.82 172.17.0.1 169.254.177.247 169.254.224.215:50226')

DOT:
digraph fhem.Influx_kapa_Task1 {
graph [throughput="0.00 points/s"];

stream0 [avg_exec_time_ns="0s" errors="0" working_cardinality="0" ];
stream0 -> from1 [processed="0"];

from1 [avg_exec_time_ns="0s" errors="0" working_cardinality="0" ];
from1 -> alert2 [processed="0"];

alert2 [alerts_inhibited="0" alerts_triggered="0" avg_exec_time_ns="0s" crits_triggered="0" errors="0" infos_triggered="0" oks_triggered="0" warns_triggered="0" working_cardinality="0" ];
}



timmib

Hallo Timmo,

dafür gibt es das Attribut ownhost beim parent Modul "Kapacitor".

Hier der Auszug aus der Doku:
ZitatOptional special IP or DNS Name of this server to be used by Kapacitor.
Die Doku erreicht man, indem man rechts unten auf "Device specific help" klickt.

Zum Debuggen bieten sich, auf dem Rechner wo Kapacitor läuft, die Befehle "watch" und "show" an.
Siehe hier: https://docs.influxdata.com/kapacitor/v1.5/working/cli_client/#core-commands

Du kannst auch mittels "get stats" auf dem KapacitorTask in FHEM die Stats nach FHEM holen in ein Reading namens "stats".

Viele Grüße

Tim

Tsturm

Hi Tim,

super, das wars. Die ist irgendwie noch nicht in den Hilfe-Screen eingeflossen (wie triggert man das?), habe den Text nur in der Source nachgelesen, und das übersehen. Und dann hilft  es, wenn der entsprechende Sensor auch was sendet ... ;D

VG timmo

Tsturm

Hi Tim,

noch eine Frage:
im Log wird immer das Schließen des TCP ports genannt - kann man das abschalten? Verbose habe ich schon auf 0.
VG Timmo


2021.05.02 21:32:55.456 3 : Kapacitor (Influx_kapa_192.168.178.10_39588) - Socket closed.
2021.05.02 21:32:55.458 3 : Kapacitor (Influx_kapa_192.168.178.10_39588) - Connection closed for Influx_kapa_192.168.178.10_39588


Internals:
   CONNECTS   984
   DEF        192.168.178.10
   FD         11
   FUUID      608875a6-f33f-8338-d893-c01112509903f175
   HOST       192.168.178.10
   KAPACITOR_PORT 9092
   NAME       Influx_kapa
   NR         343
   PORT       50226
   STATE      opened
   TYPE       Kapacitor
   stacktrace  TcpServer_Close:167 Kapacitor_Close:106 Kapacitor_Attr:3888 CallFn:3116 CommandAttr:1265 AnalyzeCommand:1116 AnalyzeCommandChain:1403 CommandInclude:619
   READINGS:
     2021-05-01 23:21:49   state           opened
Attributes:
   ownhost    192.168.178.10
   verbose    0


Tsturm

Mit der Hilfe - habs rausbekommen. Scheinbar hat das Kopieren die Dateien als DOS formatiert, nach öffnen und ein Leerzeichen einfügen, und speichern wird auch die Hilfe richtig angezeigt. perl ./contrib/commandref_join.pl  ist der Syntax check für die CMD Referenz (siehe Wiki).

sudo perl ./contrib/commandref_join.pl /opt/fhem/FHEM/93_Kapacitor.pm

*** EN /opt/fhem/FHEM/93_Kapacitor.pm: ignoring text due to DOS encoding


Jetzt noch die Logmeldungen anschauen ..
VG timmo

timmib

#42
Hallo,

ZitatHi Tim,

noch eine Frage:
im Log wird immer das Schließen des TCP ports genannt - kann man das abschalten? Verbose habe ich schon auf 0.
VG Timmo

Ja, da bin ich die Tage selber drüber gestolpert. Das stellt man beim verbose attribut vom IODEV also zentral am Kapacitor Modul um.
Der macht ja einen TCP Port für alle Kinder auf.

Das scheinst Du ja auch gepostet zu haben. Dann schau mal in global Device rein, wie da das verbose Attribut gesetzt ist.

Übrigens habe ich vorne beim ersten Post eine neue Version hineingebracht, die mit der neuesten FHEM Version wieder funktioniert.

Viele Grüße und sorry für die späte Antwort.

Tim