NEWS
ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard
-
ioBroker Prozess-Monitor v4.6.0 — Langzeit-Gesundheitsmonitoring
Ich stelle hier mein Script für ein erweitertes Prozess- und Gesundheitsmonitoring von ioBroker vor, inklusive passendem Grafana-Dashboard für InfluxDB v1. (InfluxQL )
InfluxDB v2 ist grundsätzlich vorgesehen, aktuell aber noch nicht als separates Dashboard-Paket enthalten.Das Script nutzt Standard-States wie
system.adapter.*undsystem.host.*und benötigt keinen zusätzlichen eigenen Adapter.
Für Log-Tracking und die Erkennung degradierter Adapter wirdonLogdes JavaScript-Adapters benötigt.Enthalten sind unter anderem:
- CPU-/RAM-Monitoring aller laufenden Adapter
- Restart-Tracking für Flaky-Adapter und Cron-Restarts
- Memory-Leak- und Deadlock-Erkennung
- Log-Error-/Warn-Tracking und Degraded-Adapter-Bewertung
- Host-, Disk- und Health-Score-Monitoring
- Optionale Telegram-Alarme und REST-Auswertung
- Übersicht über deaktivierte Adapter
Neu in v4.6.0:
- Konfigurationsbereich komplett neu strukturiert
- Benutzer-Checkliste ergänzt
- Kommentare und Abschnittsüberschriften vereinheitlicht
- Übersicht für deaktivierte Adapter ergänzt:
DisabledAdaptersCountundDisabledAdapters
Getestet auf Raspberry Pi, VM, LXC, Docker und Unraid; produktiv läuft es aktuell auf Docker/Unraid.
Ziel ist die Früherkennung schleichender Probleme in produktiven ioBroker-Systemen.Wichtig:
Nach dem Import des Dashboards bitte zuerstDSINFLUXDB,DSINFINITYundiobrokerurlprüfen bzw. auswählen.
Erst danach liefern alle Panels und REST-basierten Tabellen zuverlässig Daten.Im Beitrag:
- Script v4.6.0 final
- Grafana-Dashboard InfluxDB v1 ( InfluxQL )
- Grafana-Dashboard InfluxDB v2 (aktuell noch nicht als separates Paket enthalten)
- Die für InfluxDB benötigten Datenpunkte; weitere Tabellen und Zusatzdaten kommen per Infinity direkt über die REST-API

Feedback, Tests in anderen Umgebungen und Verbesserungsvorschläge willkommen! 🚀
🔥 NEU: v4.6.0 final
CHANGELOG v4.6.0 (20.03.2026)
✅ Konfigurationsbereich komplett neu strukturiert
→ Benutzerwerte, Schwellwerte und Expertenwerte klar getrennt✅ Benutzer-Checkliste ergänzt
→ schneller erkennbar, welche Werte angepasst werden sollen✅ Kommentare und Abschnittsüberschriften vereinheitlicht
→ forumtauglicher, übersichtlicher, leichter wartbar✅ Keine funktionale Logikänderung im Monitoring-Kern
→ bestehende States, Prüfungen und Features bleiben erhalten✅ Übersicht für deaktivierte Adapter ergänzt
→DisabledAdaptersCountundDisabledAdapters✅ Header-Beschreibung entsprechend erweitert
CHANGELOG v4.5.9:
✅ Persistenz: saveUptimeHistory() in updateHealthScore() → Keine Restart-Verluste mehr
✅ Schreiblast: MemoryHistoryAll nur 1x/Health-Zyklus (Dirty-Flag)
✅ Schedule: "callback missing" Errors → Cron-Syntax fix, 5 stabile Schedules
✅ Cleanup: Audit-Code + Encoding entfernt
✅ Sofort-Start aller Monitoring-FunktionenScript
script_v4.6.0_finalDas Dashboard (InfluxDB V1) InfluxQL
dashboard-4.6.0-Final


Offene Tuning-Punkte
- Flaky: aktuell 3 Restarts in 24h — sinnvoller Grenzwert, wenn geplante Cron-Restarts toleriert werden?
- Errors: aktuell 3/h Warnung und 20/h kritisch — passen diese Werte in anderen Umgebungen?
- Worst/Best Performer: Gewichtung des Health Scores noch offen für Feintuning.
- Degraded Adapter: aktuell kritische Error-Rate ab 10/h plus CPU > 12 und/oder Event Loop Lag > 100 ms — praxistauglich?
- Event Loop Lag: aktuell 500 ms kritisch als allgemeiner Schwellwert — vermutlich hardwareabhängig?
- Memory Leak: aktuell ab (R^2 > 0.65) und Wachstum > 15 MB/h — Erfahrungswerte willkommen.
- Deadlock: aktuell
alive=trueundconnected=false— eventuell noch erweiterbar.
-
Servus, da ich ja auf sowas stehe (Dashboards), Grafana und influxDB 1.8 nutze, dachte ich mir "komm schau es dir mal an" aber zu meinem Bedauern muss ich sagen ist zwar schön aber nicht so einfach wie gedacht zu nutzen.
Ich will damit nicht sagen das es nicht läuft, aber die Einrichtung und die Darstellung in Grafana sind schon eine Hürde die mich als "normaler" Anwender abschreckt. Man weiß nicht so richtig was man wo und wie einstellen muss, welche Datenpunkt man benötigt usw.Ich weiß das eine Anleitung viel Arbeit macht, aber eine kurze mit Beispielen wäre eine nette Zugabe.
Aber das ist allen meine persönliche Meinung, die Profis hier im Forum mögen das anders sehen.Trotzdem schöne Arbeit und Respekt meinerseits.
-
Servus, da ich ja auf sowas stehe (Dashboards), Grafana und influxDB 1.8 nutze, dachte ich mir "komm schau es dir mal an" aber zu meinem Bedauern muss ich sagen ist zwar schön aber nicht so einfach wie gedacht zu nutzen.
Ich will damit nicht sagen das es nicht läuft, aber die Einrichtung und die Darstellung in Grafana sind schon eine Hürde die mich als "normaler" Anwender abschreckt. Man weiß nicht so richtig was man wo und wie einstellen muss, welche Datenpunkt man benötigt usw.Ich weiß das eine Anleitung viel Arbeit macht, aber eine kurze mit Beispielen wäre eine nette Zugabe.
Aber das ist allen meine persönliche Meinung, die Profis hier im Forum mögen das anders sehen.Trotzdem schöne Arbeit und Respekt meinerseits.
@RoddiEF sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
welche Datenpunkt man benötigt
hab ich oben ergänzt
@RoddiEF sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
aber die Einrichtung und die Darstellung in Grafana
eigendlich sollte alles 1:1 sein, natürlich muss die Data source (Influxdb) angepasst werden und auch die IP in der URL für Infinity
generell bin ich noch am optimieren und hab heute nochmals etwas angepasst, script und dashboard in der aktuellen Fassung sind oben eingefügt
edit:
script ist noch in Bearbeitung um weniger Datenpunkte anzulegen
das Dashboard werde ich noch auf dynamisch mit Variablen umstellen, dann ist es einfacher zum einfügen. Ich ändere das die Tage umund stell es oben bereithab es umgestellt und steht im ersten Beitrag bereit
-
guten Abend @crunchip
ich habe das jetzt mal aktuallisiert und eine Frage zu diesen Bereich im Grafana-Dashboard:
{ "current": { "selected": true, "text": "http://localhost:8093", "value": "http://localhost:8093" }, "hide": 2, "name": "iobroker_url", "options": [ { "selected": true, "text": "http://localhost:8093", "value": "http://localhost:8093" } ], "query": "http://localhost:8093", "skipUrlSync": false, "type": "textbox" }Holt sich das Dashboard direkt die Daten ohne das man die selber in eine InfluxDB schreiben lassen muss und wenn ja muss das auf die eigene (unter der der ioBroker läuft der bei mir als Container auf einem Unraid unter http://unraid-ip:8081 läuft) geändert werden oder für was ist diese URL wichtig/nötig?
Sorry für die Fragen aber ich versuche das zu Verstehen und bin kein Profis.
-
guten Abend @crunchip
ich habe das jetzt mal aktuallisiert und eine Frage zu diesen Bereich im Grafana-Dashboard:
{ "current": { "selected": true, "text": "http://localhost:8093", "value": "http://localhost:8093" }, "hide": 2, "name": "iobroker_url", "options": [ { "selected": true, "text": "http://localhost:8093", "value": "http://localhost:8093" } ], "query": "http://localhost:8093", "skipUrlSync": false, "type": "textbox" }Holt sich das Dashboard direkt die Daten ohne das man die selber in eine InfluxDB schreiben lassen muss und wenn ja muss das auf die eigene (unter der der ioBroker läuft der bei mir als Container auf einem Unraid unter http://unraid-ip:8081 läuft) geändert werden oder für was ist diese URL wichtig/nötig?
Sorry für die Fragen aber ich versuche das zu Verstehen und bin kein Profis.
@RoddiEF ja genau, in der Variablen kommt deine IP des iobroker rein, das plugin infinity holt sich dann die Daten direkt durch den Rest-API Adapter ohne es extra in eine Datenbank zu schreiben.
Was noch zu erwähnen ist (fehlt noch in der Beschreibung) durch das Setzen einer Host Variablen, muss der Host unter security in der datasource angegeben werden. In dem Fall einfach nur einen *
Damit ist jeder Host gültig.
Ich beschreibt das morgen mal etwas genauer -
@crunchip Danke schonmal.
Der Scriptstart sieht bei mir so aus:
javascript.0 18:22:59.710 info [Prozess-Monitor v4.5.8] Initialisiere States ... javascript.0 18:22:59.712 info [Prozess-Monitor v4.5.8] States initialisiert. javascript.0 18:22:59.713 info [Prozess-Monitor v4.5.8] Log-Error-Tracking aktiv (Realtime) javascript.0 18:23:00.186 error Error: TypeError: Cannot destructure property 'flakyAdapters' of 'checkForFlakyAdapters(...)' as it is undefined. javascript.0 18:23:00.187 error at updateMonitoring (script.js.ioBroker_Monitoring:2631:13) javascript.0 18:23:00.187 error at script.js.ioBroker_Monitoring:2796:1 javascript.0 18:23:00.188 error at script.js.ioBroker_Monitoring:2830:3 javascript.0 18:23:00.188 error at Script.runInContext (node:vm:149:12)Sonmal gesehen?
In machen States kommen schonmal Daten an.
Edit: Info laut chatGPT

-
So, um das Dashboard lauffähig zu bekommen musste ich jedes Panel einmal im edit Mode öffnen und dann zurück zum Dashboard gehen.
Aktuell habe ich nur noch das Problem mit den Errormeldungen bei Scriptstart, siehe oben. Vermutl. werden deshalb auch nicht alle DPs gefüllt und die Anzeigen im Dashboard bleiben leer.
-
@RoddiEF zwecks der url hatte ich oben schon geschrieben, aufgrund der variablen ist eine direkte Hosteingabe nicht zulässig, daher muss ein * eingetragen werden, siehe

@RoddiEF sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Ich bekomme noch folgende Fehler:

mann kann auch bei Show on dashboard z.b value aktivieren, dann ist die Datenbank direkt im Dashboard auswählbar

-
@crunchip Danke schonmal.
Der Scriptstart sieht bei mir so aus:
javascript.0 18:22:59.710 info [Prozess-Monitor v4.5.8] Initialisiere States ... javascript.0 18:22:59.712 info [Prozess-Monitor v4.5.8] States initialisiert. javascript.0 18:22:59.713 info [Prozess-Monitor v4.5.8] Log-Error-Tracking aktiv (Realtime) javascript.0 18:23:00.186 error Error: TypeError: Cannot destructure property 'flakyAdapters' of 'checkForFlakyAdapters(...)' as it is undefined. javascript.0 18:23:00.187 error at updateMonitoring (script.js.ioBroker_Monitoring:2631:13) javascript.0 18:23:00.187 error at script.js.ioBroker_Monitoring:2796:1 javascript.0 18:23:00.188 error at script.js.ioBroker_Monitoring:2830:3 javascript.0 18:23:00.188 error at Script.runInContext (node:vm:149:12)Sonmal gesehen?
In machen States kommen schonmal Daten an.
Edit: Info laut chatGPT

@Rushmed sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Sonmal gesehen?
nein, weil bei mir die Historie schon befüllt war, hatte da gestern einen Fehler eingebaut, habs soeben korrigiert und im ersten Beitrag eingestellt, bitte testen
edit:
habs grad nochmal durchgesehen, da sind noch noch ein paar Erststart-Risiken bei uninitialisierten In-Memory-Objekten., die ich bei der gestrigen Änderung nicht bedacht hatte, bzw nicht mehr testen wollte, da ich sonst alle Datenpunkte wieder per Hand für Influxdb aktivieren hätte müssen.
Werd ich morgen noch nachbessern. -
Danke, das sieht schon besser aus. Keine Fehler mehr beim Start. Bitte bei Änderungen die Version anpassen sonst wirds schnell unübersichtlich.
-
Bin heute nicht ganz fertig geworden, morgen kommt ne neue Release.
-
Ok dann warte ich lieber und fang eine frische Installation an wenn die neue Version fertig ist.
Wäre es möglich beim aktuallisieren vom ersten Beitrag auch die Versionsnummern zu ändern wie schon jemand Vorgeschlagen hatte?
Das macht das es einfacher wenn Änderungen anliegen. Thx -
ich habe mir das Skript jetzt mal installiert und folgende Fragen und Anregungen dazu:
-
In Zeile 2240 steht:
'system.adapter.' + processes[i].name + '.' + processes[i].instance + '.info.connection';
Den Datenpunkt kann ich nicht finden, ist das der richtige Pfad? -
Die Auswertung der Log Einträge funktioniert bei mir leider nicht, mein System läuft auf einem Windows Rechner. In Zeile 1195 steht:
on({ id: /^system.adapter...logMessage$/, change: 'any' }, function (obj) {*
Kann es vielleicht daran liegen? -
Besteht die Möglichkeit eine Liste und die Anzahl der deaktivierten Adapter mit einzubauen?
Ich finde dieses Skript echt genial, danke fürs bereitstellen!!!
-
-
ich habe mir das Skript jetzt mal installiert und folgende Fragen und Anregungen dazu:
-
In Zeile 2240 steht:
'system.adapter.' + processes[i].name + '.' + processes[i].instance + '.info.connection';
Den Datenpunkt kann ich nicht finden, ist das der richtige Pfad? -
Die Auswertung der Log Einträge funktioniert bei mir leider nicht, mein System läuft auf einem Windows Rechner. In Zeile 1195 steht:
on({ id: /^system.adapter...logMessage$/, change: 'any' }, function (obj) {*
Kann es vielleicht daran liegen? -
Besteht die Möglichkeit eine Liste und die Anzahl der deaktivierten Adapter mit einzubauen?
Ich finde dieses Skript echt genial, danke fürs bereitstellen!!!
@Oli zu 1 bzw 2 schaue ich ob das mit Windows zusammenhängt.
Zu Punkt 3 mach ich mir mal Gedanken.
edit- Der Datenpunkt
system.adapter.*.info.connectionwird nicht vom Script angelegt – er liest nur aus dem vorhandenen js-controller-State für die Health-Score-Bewertung aus.

@Oli sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Die Auswertung der Log Einträge funktioniert bei mir leider nicht,
stimmt, war ein bug, ist mit neuer Version behoben, gleichzeitig script aufgeräumt und übersichtlich angeordnet
@Oli sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Besteht die Möglichkeit eine Liste und die Anzahl der deaktivierten Adapter mit einzubauen?
auch das habe ich in dem Zuge gleich mit eingebaut. Werde nachher noch alles im ersten Beitrag bereitstellen.
Es gibt dann eine v4.6.0 incl angepasstem Dashboard -
-
@Oli zu 1 bzw 2 schaue ich ob das mit Windows zusammenhängt.
Zu Punkt 3 mach ich mir mal Gedanken.
edit- Der Datenpunkt
system.adapter.*.info.connectionwird nicht vom Script angelegt – er liest nur aus dem vorhandenen js-controller-State für die Health-Score-Bewertung aus.

@Oli sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Die Auswertung der Log Einträge funktioniert bei mir leider nicht,
stimmt, war ein bug, ist mit neuer Version behoben, gleichzeitig script aufgeräumt und übersichtlich angeordnet
@Oli sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Besteht die Möglichkeit eine Liste und die Anzahl der deaktivierten Adapter mit einzubauen?
auch das habe ich in dem Zuge gleich mit eingebaut. Werde nachher noch alles im ersten Beitrag bereitstellen.
Es gibt dann eine v4.6.0 incl angepasstem Dashboard@crunchip
wow bist du schnell, danke für das Feedback, ich muss trotzdem nochmal zum 1. Punkt nachfragenDer Datenpunkt system.adapter..info.connection* existiert ja nicht, zumindest finde ich ihn nicht, allerdings finde ich direkt unter den Adaptern diesen Datenpunk

Dann müsste meiner Meinung nach der Code wie folgt aussehen
const infoConnectionId = processes[i].name + '.' + processes[i].instance + '.info.connection';statt
const infoConnectionId = 'system.adapter.' + processes[i].name + '.' + processes[i].instance + '.info.connection'; - Der Datenpunkt
-
@crunchip Hinweis zum Dashboard.
Du bietest nicht Dashboards zu InfuxV1/2 an, auch wenn das bei manchen dem Sprachgebrauch entspricht, sondern ein Dashboard in InfluxQL und (später) eins in Flux.
Ich benutze schon lange Influx V2, bin aber nie zu Flux umgestiegen. Deswegen hat dein (V1) Dashboard bei mir fast auf Anhieb funktioniert.Mir ist die Umschaltung der Profile noch nicht klar. Ich habe im Script nichts geändert.
wie stelle ich Profile um?Ich finde nur:
// - Zum Wechsel des Profils einfach die entsprechenden Werte // in CONFIG anpassen; es gibt keine automatische UmschaltungWie passe ich die Werte an?
Muss ich in den drei Blöcken das was ich brauche entkommentieren oder die ganzen Blöcke.Begriffsdefinitionen wären hilfreich. Was bedeutet deadlock-, degradierter-, flaky-Adapter?
Warum werden nicht verbundenen Adapter, bspw. (aus device-watcher):

nicht in:

angezeigt?Im ersten Post gabs mal nen Screenshot welche DP per influx geloggt werden müssen. Ich hatte da zwei Abweichungen (kann auch mein Fehler gewesen sein).
Hier meine geloggten DPs:

All meine Kommentare und Fragen sind natürlich mit einem dicken Dankeschön versehen!
-
@crunchip
wow bist du schnell, danke für das Feedback, ich muss trotzdem nochmal zum 1. Punkt nachfragenDer Datenpunkt system.adapter..info.connection* existiert ja nicht, zumindest finde ich ihn nicht, allerdings finde ich direkt unter den Adaptern diesen Datenpunk

Dann müsste meiner Meinung nach der Code wie folgt aussehen
const infoConnectionId = processes[i].name + '.' + processes[i].instance + '.info.connection';statt
const infoConnectionId = 'system.adapter.' + processes[i].name + '.' + processes[i].instance + '.info.connection';@Oli sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Dann müsste meiner Meinung nach der Code wie folgt aussehen
du liegst richtig, gehört zum Adapter-Namespace und nicht unter system.adapter.*.
ich korrigiere es soeben, werde es aber ohne Version Änderung oben erneuernedit
@oli @rushmed @roddief
script korrigiert im ersten Beitrag -
@Oli sagte in ioBroker Prozess- & Gesundheitsmonitor + Grafana Dashboard:
Dann müsste meiner Meinung nach der Code wie folgt aussehen
du liegst richtig, gehört zum Adapter-Namespace und nicht unter system.adapter.*.
ich korrigiere es soeben, werde es aber ohne Version Änderung oben erneuernedit
@oli @rushmed @roddief
script korrigiert im ersten Beitrag

