AdapterRequests icon indicating copy to clipboard operation
AdapterRequests copied to clipboard

Prometheus Exporter für ioBroker Datenpunkte

Open Zipfelmann opened this issue 5 years ago • 5 comments

Hallo zusammen,

eine Möglichkeit die Werte der Datenpunkten aus ioBroker auch in Prometheus abspeichern zu können wäre sehr nützlich.

Dienst: Prometheus Webseite: https://prometheus.io/ Dokumentation: https://prometheus.io/docs/instrumenting/writing_exporters/

Beschreibung: Prometheus speichert Daten wie Metriken in einer Time-Series Database ab ähnlich wie InfluxDB. Diese Daten lassen sich dann sehr gut mit der eigenen Query Sprache PromQL auswerten und z.B. mit Grafana visualisieren. Die Daten werden idr. von Prometheus selbst regelmäßig abgefragt (scraping) und abgespeichert. Prometheus bietet dazu auf Basis der gespeicherten Werte ein vollwertiges Monitoring Sytstem mit Alerting/Notification an. Dazu muss die jeweilige Anwendung eine Webpage mit den zu speichernden Daten und passenden Datentypen bereitstellen. Der Output so einer Page kann Beispielsweise wie folgt aussehen:

# HELP node_arp_entries ARP entries by device
# TYPE node_arp_entries gauge
node_arp_entries{device="wlan0"} 5
# HELP node_boot_time_seconds Node boot time, in unixtime.
# TYPE node_boot_time_seconds gauge
node_boot_time_seconds 1.609855026e+09
# HELP node_context_switches_total Total number of context switches.
# TYPE node_context_switches_total counter
node_context_switches_total 8.644193e+06
# HELP node_cpu_frequency_hertz Current cpu thread frequency in hertz.
# TYPE node_cpu_frequency_hertz gauge
node_cpu_frequency_hertz{cpu="0"} 1.2e+09
node_cpu_frequency_hertz{cpu="1"} 1.2e+09
node_cpu_frequency_hertz{cpu="2"} 1.2e+09
node_cpu_frequency_hertz{cpu="3"} 1.2e+09
# HELP node_cpu_frequency_max_hertz Maximum cpu thread frequency in hertz.
# TYPE node_cpu_frequency_max_hertz gauge
node_cpu_frequency_max_hertz{cpu="0"} 1.2e+09
node_cpu_frequency_max_hertz{cpu="1"} 1.2e+09
node_cpu_frequency_max_hertz{cpu="2"} 1.2e+09
node_cpu_frequency_max_hertz{cpu="3"} 1.2e+09
# HELP node_cpu_frequency_min_hertz Minimum cpu thread frequency in hertz.
# TYPE node_cpu_frequency_min_hertz gauge
node_cpu_frequency_min_hertz{cpu="0"} 6e+08
node_cpu_frequency_min_hertz{cpu="1"} 6e+08
node_cpu_frequency_min_hertz{cpu="2"} 6e+08
node_cpu_frequency_min_hertz{cpu="3"} 6e+08

ioBroker: Neuer Adapter (vllt. History-Adapter) der diese Webpage mit den Werten der Datenpunkte aus ioBroker entsprechend aufbereitet und zum scrapen zur verfügung stellt. Dadurch können Messwerte wie Temperatur aufgezeichnet und ausgewertet werden.

Zipfelmann avatar Jan 05 '21 15:01 Zipfelmann

Ich glaube die challenge ist die korrekte Datenpunkt spezifische Konfigurationen und Mapping (gauge und sonstwas) ... gleiches "problem" wie schon beim RRD Adapter :-)

Apollon77 avatar Jan 05 '21 22:01 Apollon77

Aktuell behelfe ich mir auch über InfluxDB History und dann in Grafana rein, aber Prometheus mit Alertmanager anbinden direkt anbinden zu können... +1!

DanielWeeber avatar Jan 08 '22 23:01 DanielWeeber

Prometheus Support wäre wirklich sehr toll, man könnte es gut mit dem Grafana Labs Free Forever model verknüpfen und müsste das nicht irgendwo lokal speichern:

The (actually useful) free forever plan: Grafana, of course + 10K series Prometheus metrics + 50GB logs + 50GB traces

philippbussche avatar Jan 10 '22 20:01 philippbussche

Ich exportiere die Daten über die "InfluxDB History" an telegraf (mittels InfluxDB V2 Listener Input Plugin ) und übersetze sie mit dem Prometheus Output Plugin. Das Output-Plugin stellt einen Prometheus-Endpunkt bereit von dem die Daten abgeholt werden können.

iobroker --> InfluxDB History --> telegraf: InfluxDB V2 Listener Input Plugin --> telegraf: Prometheus Output Plugin --> prometheus

telegraf ist eine einfache binary die mit wenig Resourceneinsatz eigentlich überall laufen sollte. Es gibt offiziele Container, builds, eine tolle Dokumentation, etc.

Die Übersetzung des Formats ist hier dokumentiert: Prometheus Die Logik dahinter ist einfach gehalten und passt meiner Meinung nach in den allermeisten Fällen. (Die 'TYPE-Hints' in den Kommentaren des Prometheus-Format sind nicht immer korrekt, werden von Prometheus allerdings (noch) nicht wirklich verarbeitet.)

Auf diese Art könnten die Daten auch (alternativ oder gleichzeitig) an InfluxDB, MQTT, .... weitergereicht und zwischen Input- und Output-Plugin außerdem gefiltert, aggregiert etc. werden.

FlorianEndel avatar Apr 08 '22 12:04 FlorianEndel

Ich würde mich ebenfalls über einen Prometheus Support freuen! Zu dem Thema scheint es bereits einen Funktionierenden Code zu geben.

https://github.com/schluo/iobroker2prometheus

Ich bin selbst leider kein Coder, biete mich aber gerne als Unterstützung an!

bloop16 avatar Oct 18 '24 14:10 bloop16