Die Einschränkungen von 64-Bit-Integern im Prom-Client, Prometheus und Grafana

Da WinCC OA nativ 64-Bit-Long-Integer im Zusammenhang mit der Integration mit neuen Node.js-Managern verwendet, welche die JavaScript-Engine nutzen, ist es entscheidend, die Einschränkungen zu verstehen. Dieses Kapitel befasst sich mit den spezifischen Herausforderungen, die bei der Integration dieser Werte mit Prometheus und Grafana auftreten.

Die Unterscheidung zwischen `number` und `BigInt` in JavaScript

JavaScript verwendet traditionell den Datentyp `number` für numerische Werte, der auf dem IEEE 754 Standard für doppelt genaue Gleitkommazahlen basiert. Dieses Format ermöglicht die Darstellung von Zahlen mit Nachkommastellen, hat aber Einschränkungen, wenn es um sehr große ganze Zahlen geht: - Der Datentyp `number` kann ganze Zahlen bis zu 2^53 - 1 (9.007.199.254.740.991) genau darstellen. Jenseits dieser Schwelle kann die Genauigkeit ganzer Zahlen nicht mehr garantiert werden. Um der Notwendigkeit Rechnung zu tragen, mit Ganzzahlen umzugehen, die größer sind als der Typ `number`, wurde der Datentyp `BigInt` mit dem ECMAScript 2020 (ES11) Update eingeführt: - `BigInt` ist eine neuere Ergänzung zu JavaScript, die speziell dafür entwickelt wurde, ganze Zahlen größer als 2^53 - 1 ohne Obergrenze darzustellen. Diese Fähigkeit ist unerlässlich für Anwendungen, die hochpräzise Arithmetik auf sehr großen ganzen Zahlen erfordern. Trotz seiner mächtigen Fähigkeiten ist die Integration von BigInt in das JavaScript-Ökosystem auf Herausforderungen gestoßen. Wichtige Tools und Bibliotheken, vor allem Prometheus und Grafana, müssen BigInt noch vollständig unterstützen.

Fehlende Unterstützung in Prometheus, Grafana

Prometheus unterstützt ausdrücklich nicht BigInt. Diese Entscheidung wird in den FAQ erläutert, wobei die Entscheidung für 64-Bit-Fließkommazahlen zur Vereinfachung des Designs angeführt wird. Prometheus argumentiert, dass das IEEE 754 Double-Precision Binary Floating-Point Format, das Integer-Präzision für Werte bis zu 2^53 unterstützt, für die meisten Anwendungsfälle ausreichend ist. Die theoretische Möglichkeit der Unterstützung nativer 64-Bit-Ganzzahlen und noch größerer Werte wird zwar anerkannt, aber nicht priorisiert - Grafana kämpft damit, BigInt-Werte unabhängig von seiner Integration mit Prometheus zu unterstützen. Diese Einschränkung bleibt auch bestehen, wenn Grafana sich direkt mit Datenbanken wie InfluxDB® oder SQLite® verbindet, die BigInt-Werte speichern können.

Auswirkungen für WinCC OA-Benutzer

Die WinCC OA Node.js-Manager ist in der Lage, `BigInt'-Zahlen zu erzeugen, was eine Herausforderung darstellt. Benutzer, die eine präzise Überwachung und Visualisierung von großen Ganzzahlen erwarten, können bei Werten über 2^53 auf Ungenauigkeiten stoßen. Dies kann zu Fehlinterpretationen der Daten führen, da die Prometheus-Bibliothek keine Fehler meldet. Solche Beschränkungen erfordern ein Bewusstsein und Anpassungsstrategien für WinCC OA-Benutzer, um potenzielle Auswirkungen auf die Datenintegrität und die Analyse abzuschwächen.

Strategie zur Sicherstellung der Präzision

Als Strings darstellen und als Labels speichern: Wenn die Beibehaltung der vollen Genauigkeit von entscheidender Bedeutung ist, z. B. bei der Speicherung eines Bitfeldes, besteht die einfachste Lösung darin, die Ganzzahl in Zeichenketten umzuwandeln und sie als Bezeichnungen zu speichern, die mit den relevanten Metriken verknüpft sind. Diese Methode verhindert jeglichen Verlust an Datengenauigkeit. Es ist jedoch wichtig zu beachten, dass eine direkte Visualisierung dieser Werte nicht möglich sein wird.