Erklärung. BeerTender - ein Gerät zum Kühlen und Abfüllen von Bier von Krups und Heineken. Nach Angaben der Hersteller bleibt die Qualität von frischem Bier 30 Tage nach dem Öffnen des Fasses erhalten. Natürlich ist es für Systemadministratoren und Entwickler bequem, die Temperatur und den Stand des Bieres in ihrem Fass mithilfe der üblichen Online-Dashboards zu überwachen. Im vorherigen Artikel wurde beschrieben, wie BeerTender mit Warp 10 verbunden wird. Jetzt richten wir das Grafana-Dashboard ein
OVHcloud, der größte europäische Hoster und Cloud-Anbieter, nutzt aktiv die Warp 10-Plattform, deren Überwachungsdaten in einem Warp 10-Cluster zusammengeführt werden. Das sind 400.000 Server, 27 Rechenzentren, insgesamt mehrere Millionen Metriken pro Sekunde!
Sie haben viele Dashboards, und jetzt ist OVHcloud der Betreuer des Open Source-
Plugins Warp 10 Grafana , mit dessen Entwicklung wir vor einiger Zeit begonnen haben. Wir werden über ihn reden. Wenn Sie es selbst ausprobieren möchten, sind die Daten gemeinfrei - Sie können WarpScript unten kopieren.
Wir haben bereits darüber gesprochen, wie BeerTender mit Warp 10 verbunden werden kann.Installation
Installieren Sie zunächst Grafana. Folgen Sie den
Anweisungen auf der Website .
Wir stellen eine Verbindung mit der Standard-
http://localhost:3000/
, wechseln zum Standardkennwort admin / admin und ändern das Administratorkennwort.
Für die neueste Version von Grafana muss das Plug-In manuell installiert werden. Die Methode mit
grafana-cli
wird nicht funktionieren. Sie müssen nur das Plugin-Repository in das Grafana-Plugin-Verzeichnis klonen und die Berechtigungen überall festlegen.
sudo systemctl stop grafana-server.service sudo chown -R grafana:mygroup /var/lib/grafana/ sudo chmod g+rw /var/lib/grafana/plugins git clone git@github.com:ovh/ovh-warp10-datasource.git /var/lib/grafana/plugins/ovh-warp10-datasource sudo chown -R grafana:mygroup /var/lib/grafana/plugins sudo systemctl start grafana-server.service
Konfiguration
Wechseln Sie in der Grafana-Konfiguration zum Abschnitt Datenquellen und fügen Sie eine Datenquelle vom Typ Warp 10 hinzu. Stellen Sie sicher, dass sie auf die erforderliche Instanz von Warp 10 verweist. Sie können dieselben Einstellungen wie unsere angeben:
Es ist Zeit, Daten vom BeerTender zu nehmen ...
Temperaturanzeige
Erstellen Sie ein neues Dashboard, fügen Sie ein Bedienfeld mit dem Visualisierungstyp "Diagramm" hinzu und rufen Sie den Abfragemodus auf:
Anfangstemperatur (ganzzahlige Werte vom Sensor)- Wählen Sie in der Datenquelle Warp 10 (oder den Standardwert).
- Schalten Sie den WarpScript-Editor ein
- Kopiere WarpScript unten
- Wählen Sie in der oberen rechten Ecke "Letzte 30 Tage" aus.
- Speichern Sie das Ergebnis
"gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE [ $rt 'beertender.rawtemperature' {} NOW 30 d ] FETCH 0 GET
Dieses Skript zeigt die Anfangswerte des ADC-Sensors an. Bitte beachten Sie, dass der WarpScript-Editor in Grafana nicht mehr so leistungsfähig ist wie zuvor. Es gibt hier keine automatische Vervollständigung mehr. Sie können ein Skript in WarpStudio oder VSCode schreiben, um Syntaxhervorhebungen und Online-Dokumentation zu erhalten. Kopieren Sie das Ergebnis und fügen Sie es in Grafana ein.
Automatischer Abstand
Wählen Sie in diesem Beispiel das 30-Tage-Intervall aus und legen Sie den Ansichtsmodus in Grafik für die letzten 30 Tage fest. Wenn wir den Anzeigemodus für den letzten Tag oder das letzte Jahr auswählen, fordert WarpScript immer alle 30 Tage Daten an. Das Plugin löst dieses Problem: In WarpScript stehen zwei Variablen zur Verfügung -
$end
und
$interval
.
[ $rt 'beertender.rawtemperature' {} $end $interval ] FETCH 0
Biertemperatur
Ich habe mehrere Messungen von Wasser, Eis und heißem Wasser durchgeführt und mit einem Referenzsensor verglichen ... Das Ergebnis war das Folgende:
T (° C) Anfangswert
18,3 680
41,5 870
37,6 841
10 586
11 596
8 559
1,467
4,500
6,5 535
Fügen Sie diese Werte in die
GTS- Zeitreihe ein und sortieren Sie das Ergebnis nach den Anfangswerten des Sensors:
NEWGTS 'linearInterpolation' RENAME 680 NaN NaN NaN 18.3 ADDVALUE 870 NaN NaN NaN 41.5 ADDVALUE 841 NaN NaN NaN 37.6 ADDVALUE 586 NaN NaN NaN 10 ADDVALUE 596 NaN NaN NaN 11 ADDVALUE 559 NaN NaN NaN 8 ADDVALUE 467 NaN NaN NaN 1 ADDVALUE 500 NaN NaN NaN 4.5 ADDVALUE 535 NaN NaN NaN 6.5 ADDVALUE SORT
Erwartete InterpolationDie Quelldaten vom Sensor liegen in Form von ganzen Zahlen vor. Am einfachsten interpolieren Sie,
indem Sie zuerst die Kurve
erstellen und dann mit der
ATTICK- Funktion die Werte in Grad daraus ablesen.
Die Interpolation in WarpScript ist einfach.
Wir erstellen einen Eimer , um die gewünschte Periode einzustellen, und starten dann die Interpolation, wobei
wir die fehlenden Werte ausfüllen.
[ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET INTERPOLATE 'truthtableGTS' STORE

Großartig. Jetzt müssen Sie Ihren eigenen Mapper schreiben, um jeden Wert vom Sensor durch einen realen physikalischen Temperaturwert zu ersetzen und das Ergebnis in das vom Graphan verwendete Format zu bringen.
Warnung : Die Werte kommen alle 10 Sekunden an. In drei Monaten werden sich 270 Tausend Werte ansammeln. Zu viel für Grafana ... Behalte einfach den Maximalwert jeder Stunde. In WarpScript ist dies
BUCKETIZE mit dem bucketizer.max-
Bucketizer .
Sie können dieses WarpScript in Grafana kopieren:
// raw value interpolation "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE NEWGTS 'linearInterpolation' RENAME 680 NaN NaN NaN 18.3 ADDVALUE 870 NaN NaN NaN 41.5 ADDVALUE 841 NaN NaN NaN 37.6 ADDVALUE 586 NaN NaN NaN 10 ADDVALUE 596 NaN NaN NaN 11 ADDVALUE 559 NaN NaN NaN 8 ADDVALUE 467 NaN NaN NaN 1 ADDVALUE 500 NaN NaN NaN 4.5 ADDVALUE 535 NaN NaN NaN 6.5 ADDVALUE SORT 'linearInterpolation' STORE [ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET INTERPOLATE 'truthtableGTS' STORE [ $rt 'beertender.rawtemperature' {} NOW $end $interval ] FETCH // subsampling, keep max of every hour [ SWAP bucketizer.max 0 1 h 0 ] BUCKETIZE UNBUCKETIZE // do not try to interpolate missing buckets. // interpolation [ SWAP <% 'l' STORE [ $l 0 GET //same tick NaN NaN NaN //no latitude/longitude/elevation $truthtableGTS $l 7 GET 0 GET ATTICK 4 GET //take the interpolated value ] %> MACROMAPPER 0 0 0 ] MAP 'temperature (°C)' RENAME
5 ° C, normal für Bier
BeerTender Dashboard, erste VersionFassniveau
Der Dehnungsmesser misst den Füllstand im Fass ... Aber das ist ein billiger Dreileiter-Sensor auf einem rostigen Metallständer. Es ist nicht möglich, genaue Informationen von solchen Geräten zu erhalten. Daher ist es nicht verwunderlich, dass die Ausgabe wirklich ein verrauschtes Ergebnis ist und Absolutwerten nicht vertraut werden kann. Für unseren BeerTender habe ich eine experimentelle Formel gefunden, mit der Grafana den aktuellen Füllstand in Prozent anzeigt.
Tipp: Das Warp 10-Plugin ruft nur Daten von GTS ab. Auch wenn Sie einen einzelnen Wert anzeigen möchten, müssen Sie ihn in den GTS-Daten an einer Stelle anzeigen.Hier ist WarpScript, das den letzten Datenpunkt in einen Prozentwert umwandelt und außerdem eine Zeitreihe mit einem Punkt erstellt:
"gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE //read for beer level [ $rt 'beertender.rawvalue' {} NOW -1 ] FETCH 0 GET VALUES 0 GET 'rawSensorValue' STORE //raw correction: // empty: 30.8e6 // full (and cold): 30.5e6 30.8e6 $rawSensorValue - 0 MAX 2800 / 100 MIN 'beerlevelPercent' STORE $beerlevelPercent NEWGTS 'Barre Level (%25)' RENAME 1 NaN NaN NaN $beerlevelPercent ADDVALUE
Verwenden Sie dieses WarpScript als Anforderung für ein Bedienfeld mit einem Anzeigevisualisierungstyp:
Schöner IndikatorWenn Sie interessiert sind, können Sie sich die Quelldaten ansehen ... Jetzt haben wir ein Token für den Zugriff auf einzigartige Statistiken zum Bierkonsum!
Schlussfolgerungen
