Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure IoT Einsatz Datenflussdiagramme enthalten integrierte Transformationen für allgemeine Verarbeitungsaufgaben wie Zuordnung, Filterung und Aggregation. Wenn Sie benutzerdefinierte Logik benötigen, die über die integrierten Transformationen hinausgeht, können Sie WebAssembly -Module (WASM) als benutzerdefinierte Transformationen in Ihren Datenflussdiagrammpipelines bereitstellen.
Von Bedeutung
Derzeit unterstützt die Web-UI für den Betrieb nur das Erstellen und Anzeigen von Datenflussgraph-Artefakten, die aus Azure Container Registry (ACR) und – bei integrierten Transformationen – aus mcr.microsoft.com bezogen werden. Um mehr zu erfahren, siehe Operations Experience WebUI zeigt nur Datenflussgraph-Artefakte, die von Azure Container Registry (ACR) und mcr.microsoft.com stammen.
Voraussetzungen
- Eine Instanz von Azure IoT Einsatz, die in einem Kubernetes-Cluster bereitgestellt wird. Weitere Informationen finden Sie unter Deploy Azure IoT Einsatz.
- Konfigurieren Sie einen Registrierungsendpunkt für den Zugriff auf WASM-Module und Graphdefinitionen. Sie haben zwei Optionen:
-
Schnellstart mit der öffentlichen Registry: Erstellen Sie einen Registry-Endpunkt für
ghcr.iomit anonymer Authentifizierung. Anweisungen finden Sie unter Verwenden vordefinierter Module aus einer öffentlichen Registrierung. - Private Registrierung: Richten Sie Ihre eigene Containerregistrierung ein, und pushen Sie die Beispielmodule, indem Sie die Anleitungen in "Deploy WebAssembly(WASM)"-Module und -Diagrammdefinitionen ausführen.
-
Schnellstart mit der öffentlichen Registry: Erstellen Sie einen Registry-Endpunkt für
Die Azure CLI-Beispiele in diesem Artikel verwenden Umgebungsvariablen, sodass Sie jeden Wert nur einmal festlegen und die Befehle dann unverändert kopieren und einfügen können. Wenn Sie die Azure IoT Einsatz Codespaces-Umgebung aus dem Quickstart verwenden, sind diese Variablen bereits für Sie festgelegt und Sie können diesen Schritt überspringen. Ansonsten setze die folgenden Umgebungsvariablen in deiner Shell, bevor du die Befehle ausführst.
Die folgenden Skripte legen die am häufigsten verwendeten Umweltvariablen fest:
| Umgebungsvariable | Description |
|---|---|
SUBSCRIPTION_ID |
Die ID des Abonnements, das Ihre Azure IoT Einsatz-Instanz enthält. |
RESOURCE_GROUP |
Der Name der Ressourcengruppe, die Ihre Azure IoT Einsatz-Instanz enthält. |
AIO_INSTANCE_NAME |
Der Name Ihrer Azure IoT Einsatz Instanz. Um Ihre Instanzen aufzulisten, führen Sie az iot ops list -o table aus. |
CLUSTER_NAME |
Der Name des Azure Arc-fähigen Kubernetes-Clusters, der deine Instanz hostet. |
LOCATION |
Die Azure-Region zur Nutzung für neue Ressourcen, zum Beispiel eastus. |
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>
Du musst nur die Variablen festlegen, die dieser Artikel verwendet. Dieser Artikel könnte zusätzliche Umgebungsvariablen für die von Ihnen gewählten Ressourcennamen verwenden. Der Artikel erklärt, wie man sie dort platziert, wo sie eingeführt werden.
Dieser Artikel verwendet außerdem die folgenden Umgebungsvariablen für die von Ihnen gewählten Werte: REGISTRY_ENDPOINT (Name des Registry-Endpunkts), GRAPH_NAME (Name des Datenflussgraphen), PROFILE (Name des Datenflussprofils) und REGISTRY_HOST (Container-Registry-Hostname). Stelle jede einzelne ein, bevor du die zugehörigen Befehle ausführst.
Überblick
Mithilfe von WebAssembly(WASM)-Modulen in Azure IoT Einsatz Datenflussdiagrammen können Sie Daten am Edge mit hoher Leistung und Sicherheit verarbeiten. WASM wird in einer Sandkastenumgebung ausgeführt und unterstützt Rust und Python.
Ein Datenfluss ist eine Pipeline, die Daten mithilfe integrierter Transformationen zwischen Endpunkten bewegt und transformiert. Ein Datenflussdiagramm erweitert Datenflüsse mit komponierbaren Verarbeitungsschritten. Azure IoT Einsatz bietet built-in-Datenflussdiagramme für allgemeine Vorgänge wie Zuordnung, Filterung, Verzweigung und Aggregation. Für benutzerdefinierte Verarbeitungslogik implementieren Sie WebAssembly-Module, wie in diesem Artikel beschrieben. Datenflussdiagramme verwenden YAML-Diagrammdefinitionen, die angeben, wie Operatoren eine Verbindung herstellen. Die Datenflussdiagrammressource umschließt diese Definition und ordnet seine abstrakten Quell- und Senkenvorgänge konkreten Endpunkten wie MQTT-Themen und Kafka-Themen zu.
Tipp
Beginnen Sie bei den meisten Datenverarbeitungsszenarien mit den integrierten Transformationen. Verwenden Sie WASM-Transformationen, wenn Sie benutzerdefinierte Geschäftslogik, spezielle Algorithmen oder Verarbeitung benötigen, die von den integrierten Optionen nicht abgedeckt werden.
Von Bedeutung
Datenflussdiagramme unterstützen derzeit nur MQTT-, Kafka- und OpenTelemetry-Endpunkte. Andere Endpunkttypen wie Data Lake, Microsoft Fabric OneLake, Azure Data Explorer und lokaler Speicher werden nicht unterstützt.
Funktionsweise von WASM-Datenflussdiagrammen
Die WASM-Datenflussimplementierung folgt diesem Workflow:
- Entwickeln Sie WASM-Module: Schreiben Sie benutzerdefinierte Verarbeitungslogik in einer unterstützten Sprache, und kompilieren Sie sie in das WebAssembly Component Model-Format. Weitere Informationen finden Sie unter WASM-Module für Datenflüsse erstellen.
- Entwickeln Sie graphische Definition: Definieren Sie, wie Daten mithilfe von YAML-Konfigurationsdateien durch die Module verschoben werden. Weitere Informationen finden Sie unter Konfigurieren von WebAssembly-Diagrammdefinitionen.
- Speichern Sie Artefakte in der Registrierung: Übertragen Sie die kompilierten WASM-Module und Graphdefinitionen mithilfe von OCI-kompatiblen Tools wie ORAS in eine Containerregistrierung. Weitere Informationen finden Sie unter Deploy WebAssembly (WASM)-Module und -Diagrammdefinitionen.
- Registrierungsendpunkte konfigurieren: Authentifizierungs- und Verbindungsdetails einrichten, damit Azure IoT Einsatz auf die Containerregistrierung zugreifen kann. Weitere Informationen finden Sie unter Konfigurieren von Registrierungsendpunkten.
- Datenflussgraph erstellen: Verwenden Sie die Operations Experience-Web-UI oder Bicep-Dateien, um einen Datenfluss zu definieren, der eine Graphdefinition nutzt.
- Deploy and execute: Azure IoT Einsatz ruft Graphdefinitionen und WASM-Module aus der Containerregistrierung ab und führt sie aus.
Die folgenden Beispiele zeigen, wie SIE WASM-Datenflussdiagramme für gängige Szenarien konfigurieren. In den Beispielen werden hartcodierte Werte und vereinfachte Konfigurationen verwendet, damit Sie schnell loslegen können.
Beispiel 1: Grundlegende Bereitstellung mit einem WASM-Modul
In diesem Beispiel werden Temperaturdaten von Fahrenheit in Celsius mithilfe eines WASM-Moduls konvertiert. Der Quellcode des temperaturemoduls ist auf GitHub verfügbar. Wenn Sie die Beispielschritte in "Deploy WebAssembly(WASM)"-Module und -Diagrammdefinitionen befolgt haben, befinden sich die Diagrammdefinition und das graph-simple:1.0.0 vorkompilierte temperature:1.0.0 Modul bereits in Ihrer Containerregistrierung. Der Beispieldiagrammartefaktpfad ist azure-samples/explore-iot-operations/graph-simple:1.0.0. Verwenden Sie diesen Pfad für die öffentlichen GHCR-Beispiele oder wenn Sie die Beispielartefakte mithilfe desselben Repositorypfads in Ihre eigene Registrierung kopieren.
Funktionsweise des einfachen Diagramms
Die Graph-Definition erstellt eine einfache, dreistufige Pipeline:
- Quelle: Empfängt Temperaturdaten von MQTT
- Karte: Verarbeitet Daten mit dem Temperatur-WASM-Modul
- Sink: Sendet konvertierte Daten zurück an MQTT
Weitere Informationen zur Funktionsweise der einfachen Diagrammdefinition und deren Struktur finden Sie unter Beispiel 1: Einfache Diagrammdefinition.
Eingabeformat:
{"temperature": {"value": 100.0, "unit": "F"}}
Ausgabeformat:
{"temperature": {"value": 37.8, "unit": "C"}}
Die folgende Konfiguration erstellt ein Datenflussdiagramm, das diese Temperaturkonvertierungspipeline verwendet. Das Datenflussdiagramm verweist auf die graph-simple:1.0.0 YAML-Diagrammdefinition und ruft das Temperaturmodul aus Ihrer Containerregistrierung ab. Das Azure Beispieldiagramm wird unter dem Repositorypfad azure-samples/explore-iot-operations gespeichert. Schließen Sie daher diesen Pfad in den Wert artifact ein.
Konfigurieren des Datenflussdiagramms
Diese Konfiguration definiert drei Knoten, die den Temperaturkonvertierungsworkflow implementieren: einen Quellknoten, der eingehende Temperaturdaten abonniert, einen Diagrammverarbeitungsknoten, der das WASM-Modul ausführt, und einen Zielknoten, der die konvertierten Ergebnisse veröffentlicht.
Die Datenflussdiagrammressource umschließt das Diagrammdefinitionsartefakt und verbindet seine abstrakten Quell- und Sinkvorgänge mit konkreten Endpunkten:
- Der
source-Vorgang der Graphdefinition verbindet sich mit dem Quellknoten des Datenflusses (MQTT-Topic) - Der Vorgang
sinkGraphdefinition stellt eine Verbindung mit dem Zielknoten des Datenflusses (MQTT-Thema) her. - Die Verarbeitungsvorgänge der Graphdefinition werden im Diagrammverarbeitungsknoten ausgeführt.
Mit dieser Trennung können Sie dieselbe Diagrammdefinition mit verschiedenen Endpunkten in allen Umgebungen bereitstellen und gleichzeitig die Verarbeitungslogik unverändert beibehalten.
Um ein Datenflussdiagramm in der Betriebsumgebung zu erstellen, wechseln Sie zur Registerkarte "Datenfluss ".
Wählen Sie das Dropdown-Menü neben + Erstellen und wählen Sie einen Datenflussgraphen erstellen.
Wählen Sie den Platzhalternamen "Neuer Datenfluss " aus, um die Datenflusseigenschaften festzulegen. Geben Sie den Namen des Datenflussdiagramms ein, und wählen Sie das zu verwendende Datenflussprofil aus.
Wählen Sie im Datenflussdiagramm " Quelle " aus, um den Quellknoten zu konfigurieren. Wählen Sie unter "Quelldetails" die Option " Objekt" oder "Datenflussendpunkt" aus.
Wenn Sie Objekt auswählen, wählen Sie das Objekt aus, aus dem Daten abgerufen werden sollen. Wählen Sie dann Übernehmen aus.
Wenn Sie Datenflussendpunkt auswählen, geben Sie die folgenden Details ein. Wählen Sie dann Übernehmen aus.
Setting Description Datenflussendpunkt Wählen Sie Standard aus, um den standardmäßigen MQTT-Nachrichtenbroker-Endpunkt zu verwenden. Thema Der Themenfilter, der für eingehende Nachrichten abonniert werden soll. Verwenden Sie Themen>Zeile hinzufügen, um mehrere Themen hinzuzufügen. Nachrichtenschema Das Schema, das zum Deserialisieren der eingehenden Nachrichten verwendet werden soll.
Wählen Sie im Datenflussdiagramm die Option "Diagrammtransformation hinzufügen" (optional) aus, um einen Diagrammverarbeitungsknoten hinzuzufügen. Wählen Sie im Bereich Diagrammauswahl die Option diagramm-einfach:1 aus, und klicken Sie auf Übernehmen.
Sie können einige Diagrammoperatoreinstellungen konfigurieren, indem Sie den Diagrammknoten im Diagramm auswählen. Sie können z. B. einen Modultemperatur-/Kartenoperator auswählen und in
key2den Wertexample-value-2eingeben. Wählen Sie Übernehmen aus, um die Änderungen zu speichern.Wählen Sie im Datenflussdiagramm "Ziel " aus, um den Zielknoten zu konfigurieren.
Wählen Sie " Speichern " unter dem Namen des Datenflussdiagramms aus, um das Datenflussdiagramm zu speichern.
Hinweis
Der Artefaktverweis bezieht sich auf den Host des Registry-Endpunkts. Für die öffentlichen GHCR-Beispiele ist der Host des Registry-Endpunkts ghcr.io, verwenden Sie also azure-samples/explore-iot-operations/graph-simple:1.0.0. Verwenden Sie denselben Artefaktpfad, wenn Sie die Beispielartefakte in Ihre eigene Registrierung unter demselben Repositorypfad kopiert haben. Verwenden Sie für Ihr eigenes flaches privates Registry-Layout einen flachen Artefaktverweis, z. B. graph-simple:1.0.0.
Testen des Datenflusses
Um den Datenfluss zu testen, senden Sie MQTT-Nachrichten aus dem Cluster. Das Temperaturmodul erwartet Nachrichten in einem bestimmten JSON-Format mit einem geschachtelten temperature-Objekt, das value (numerische) und unit (Zeichenfolgen)-Felder enthält. Beispiel: {"temperature":{"value":72,"unit":"F"}}.
Stellen Sie zunächst den MQTT-Client-Pod bereit, indem Sie die Anweisungen in Testen der Konnektivität zum MQTT-Broker mit MQTT-Clients befolgen. Der MQTT-Client stellt die Authentifizierungstoken und Zertifikate bereit, um eine Verbindung mit dem Broker herzustellen. Führen Sie zum Bereitstellen des MQTT-Clients den folgenden Befehl aus:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
Senden von Temperaturmeldungen
Erstellen und ausführen Sie in der ersten Terminalsitzung ein Skript zum Senden von Temperaturdaten in Fahrenheit:
# Connect to the MQTT client pod
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh -c '
# Create and run temperature.sh from within the MQTT client pod
while true; do
# Generate a random temperature value between 0 and 6000 Fahrenheit
random_value=$(shuf -i 0-6000 -n 1)
payload="{\"temperature\":{\"value\":$random_value,\"unit\":\"F\"}}"
echo "Publishing temperature: $payload"
# Publish to the input topic
mosquitto_pub -h aio-broker -p 18883 \
-m "$payload" \
-t "sensor/temperature/raw" \
-d \
--cafile /var/run/certs/ca.crt \
-D PUBLISH user-property __ts $(date +%s)000:0:df \
-D CONNECT authentication-method 'K8S-SAT' \
-D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
sleep 1
done'
Hinweis
Die MQTT-Benutzereigenschaft __ts fügt den Nachrichten einen Zeitstempel hinzu, um eine zeitnahe Verarbeitung mithilfe der Hybrid Logical Clock (HLC) sicherzustellen. Der Zeitstempel hilft dem Datenfluss zu entscheiden, ob die Nachricht angenommen oder abgelegt werden soll. Das Format der Eigenschaft lautet <timestamp>:<counter>:<nodeid>. Damit wird die Datenflussverarbeitung genauer, es ist jedoch nicht zwingend erforderlich.
Das Skript veröffentlicht jede Sekunde zufällige Temperaturdaten für das Thema sensor/temperature/raw. Diese sollte wie folgt aussehen:
Publishing temperature: {"temperature":{"value":1234,"unit":"F"}}
Publishing temperature: {"temperature":{"value":5678,"unit":"F"}}
Beenden Sie das Skript nicht, um die Veröffentlichung von Temperaturdaten fortzusetzen.
Abonnieren von verarbeiteten Nachrichten
Abonnieren Sie in der zweiten Terminalsitzung (ebenfalls mit dem MQTT-Clientpod verbunden) das Ausgabethema, um die konvertierten Temperaturwerte anzuzeigen:
# Connect to the MQTT client pod
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh -c '
mosquitto_sub -h aio-broker -p 18883 -t "sensor/temperature/processed" --cafile /var/run/certs/ca.crt \
-D CONNECT authentication-method "K8S-SAT" \
-D CONNECT authentication-data "$(cat /var/run/secrets/tokens/broker-sat)"'
Du siehst, dass das WASM-Modul die Temperaturdaten von Fahrenheit auf Celsius umwandelt.
{"temperature":{"value":1292.2222222222222,"count":0,"max":0.0,"min":0.0,"average":0.0,"last":0.0,"unit":"C","overtemp":false}}
{"temperature":{"value":203.33333333333334,"count":0,"max":0.0,"min":0.0,"average":0.0,"last":0.0,"unit":"C","overtemp":false}}
Beispiel 2: Bereitstellen eines komplexen Diagramms
In diesem Beispiel wird ein anspruchsvoller Datenverarbeitungsworkflow veranschaulicht, der mehrere Datentypen wie Temperatur, Feuchtigkeit und Bilddaten verarbeitet. Die complex graph definition orchestriert mehrere WASM-Module, um erweiterte Analysen und Objekterkennung durchzuführen.
Funktionsweise des komplexen Diagramms
Das komplexe Diagramm verarbeitet drei Datenströme und kombiniert sie in einer erweiterten Sensoranalyse:
- Temperaturverarbeitung: Wandelt Fahrenheit in Celsius um, filtert ungültige Messwerte und berechnet Statistiken.
- Luftfeuchtigkeitsverarbeitung: Sammelt Luftfeuchtigkeitsmessungen über Zeitintervalle
- Bildverarbeitung: Führt die Objekterkennung für Kameramomentaufnahmen aus und formatiert Ergebnisse.
Weitere Informationen zur Funktionsweise der komplexen Diagrammdefinition, ihrer Struktur und des Datenflusses über mehrere Verarbeitungsphasen finden Sie unter Beispiel 2: Komplexe Diagrammdefinition.
Das Diagramm verwendet spezielle Module aus der Sammlung von Rust-Operatoren.
Konfigurieren des komplexen Datenflussdiagramms
Diese Konfiguration implementiert den Multisensorverarbeitungsworkflow mithilfe der graph-complex:1.0.0 YAML-Diagrammdefinition. Der Beispieldiagrammartefaktpfad ist azure-samples/explore-iot-operations/graph-complex:1.0.0. Beachten Sie, dass die Bereitstellung des Datenflussdiagramms mit Beispiel 1 vergleichbar ist – beide verwenden dasselbe Muster mit drei Knoten (Quelle, Diagrammprozessor, Ziel), obwohl die Verarbeitungslogik unterschiedlich ist.
Diese Ähnlichkeit tritt auf, da die Datenflussdiagrammressource als Hostumgebung fungiert, die Diagrammdefinitionen lädt und ausführt. Die eigentliche Verarbeitungslogik befindet sich in der Diagrammdefinition (graph-simple:1.0.0 oder graph-complex:1.0.0), die die YAML-Spezifikation von Vorgängen und Verbindungen zwischen WASM-Modulen enthält. Die Datenflussdiagrammressource stellt die Laufzeitinfrastruktur bereit, um die Diagrammdefinition abzurufen, die Module zu instanziieren und Daten über den definierten Workflow weiterzuleiten.
Um ein Datenflussdiagramm in der Betriebsumgebung zu erstellen, wechseln Sie zur Registerkarte "Datenfluss ".
Wählen Sie das Dropdown-Menü neben + Erstellen und wählen Sie einen Datenflussgraphen erstellen.
Wählen Sie den Platzhalternamen "Neuer Datenfluss " aus, um die Datenflusseigenschaften festzulegen. Geben Sie den Namen des Datenflussdiagramms ein, und wählen Sie das zu verwendende Datenflussprofil aus.
Wählen Sie im Datenflussdiagramm " Quelle " aus, um den Quellknoten zu konfigurieren. Wählen Sie unter "Quelldetails" die Option " Objekt" oder "Datenflussendpunkt" aus.
Wenn Sie Objekt auswählen, wählen Sie das Objekt aus, aus dem Daten abgerufen werden sollen. Wählen Sie dann Übernehmen aus.
Wenn Sie Datenflussendpunkt auswählen, geben Sie die folgenden Details ein. Wählen Sie dann Übernehmen aus.
Setting Description Datenflussendpunkt Wählen Sie Standard aus, um den standardmäßigen MQTT-Nachrichtenbroker-Endpunkt zu verwenden. Thema Der Themenfilter, der für eingehende Nachrichten abonniert werden soll. Verwenden Sie Themen>Zeile hinzufügen, um mehrere Themen hinzuzufügen. Nachrichtenschema Das Schema, das zum Deserialisieren der eingehenden Nachrichten verwendet werden soll.
Wählen Sie im Datenflussdiagramm die Option "Diagrammtransformation hinzufügen" (optional) aus, um einen Diagrammverarbeitungsknoten hinzuzufügen. Wählen Sie im Bereich "Graph-Auswahl"die Option "graph-complex:1" aus, und wählen Sie "Übernehmen" aus.
Wählen Sie den Graphknoten im Diagramm aus, um die Graphoperator-Einstellungen zu konfigurieren.
Bediener Description Modul-Schnappschuss/Zweig Konfiguriert das snapshotModul, um die Objekterkennung für Bilder durchzuführen. Sie können densnapshot_topicKonfigurationsschlüssel festlegen, um das Eingabethema für Bilddaten anzugeben.Modultemperatur/Karte Wandelt key2Temperaturwerte in eine andere Skala um.Wählen Sie Übernehmen aus, um die Änderungen zu speichern.
Wählen Sie im Datenflussdiagramm "Ziel " aus, um den Zielknoten zu konfigurieren.
Wählen Sie " Speichern " unter dem Namen des Datenflussdiagramms aus, um das Datenflussdiagramm zu speichern.
Testen des komplexen Datenflusses
Bevor Sie eine ausgabe sehen können, richten Sie die Quelldaten ein.
Hochladen von RAW-Bilddateien auf den MQTT-Client-Pod
Die Bilddateien dienen dem Modul snapshot zum Erkennen von Objekten in den Bildern. Die Dateien befinden sich im Bilder-Ordner auf GitHub.
Klonen Sie zuerst das Repository, um Zugriff auf die Bilddateien zu erhalten:
git clone https://github.com/Azure-Samples/explore-iot-operations.git
cd explore-iot-operations
Verwenden Sie den folgenden Befehl, um RAW-Bilddateien aus dem ./samples/wasm/images Ordner in den mqtt-client Pod hochzuladen:
kubectl cp ./samples/wasm/images azure-iot-operations/mqtt-client:/tmp
Überprüfen Sie, ob die Dateien hochgeladen wurden:
kubectl exec -it mqtt-client -n azure-iot-operations -- ls /tmp/images
Die Liste der Dateien sollte im Ordner /tmp/images angezeigt werden.
beaker.raw laptop.raw sunny2.raw
binoculars.raw lawnmower.raw sunny4.raw
broom.raw milkcan.raw thimble.raw
camera.raw photocopier.raw tripod.raw
computer_mouse.raw radiator.raw typewriter.raw
daisy3.raw screwdriver.raw vacuum_cleaner.raw
digital_clock.raw sewing_machine.raw
hammer.raw sliding_door.raw
Veröffentlichen simulierter Temperatur- und Feuchtigkeitsdaten und Senden von Bildern
Sie können die Befehle zum Veröffentlichen von Temperatur- und Feuchtigkeitsdaten kombinieren und Bilder in ein einzelnes Skript senden. Verwenden Sie den folgenden Befehl:
# Connect to the MQTT client pod and run the script
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh -c '
while true; do
# Generate a random temperature value between 0 and 6000
temp_value=$(shuf -i 0-6000 -n 1)
temp_payload="{\"temperature\":{\"value\":$temp_value,\"unit\":\"F\"}}"
echo "Publishing temperature: $temp_payload"
mosquitto_pub -h aio-broker -p 18883 \
-m "$temp_payload" \
-t "sensor/temperature/raw" \
--cafile /var/run/certs/ca.crt \
-D CONNECT authentication-method "K8S-SAT" \
-D CONNECT authentication-data "$(cat /var/run/secrets/tokens/broker-sat)" \
-D PUBLISH user-property __ts $(date +%s)000:0:df
# Generate a random humidity value between 30 and 90
humidity_value=$(shuf -i 30-90 -n 1)
humidity_payload="{\"humidity\":{\"value\":$humidity_value}}"
echo "Publishing humidity: $humidity_payload"
mosquitto_pub -h aio-broker -p 18883 \
-m "$humidity_payload" \
-t "sensor/humidity/raw" \
--cafile /var/run/certs/ca.crt \
-D CONNECT authentication-method "K8S-SAT" \
-D CONNECT authentication-data "$(cat /var/run/secrets/tokens/broker-sat)" \
-D PUBLISH user-property __ts $(date +%s)000:0:df
# Send an image every 2 seconds
if [ $(( $(date +%s) % 2 )) -eq 0 ]; then
file=$(ls /tmp/images/*.raw | shuf -n 1)
echo "Sending file: $file"
mosquitto_pub -h aio-broker -p 18883 \
-f $file \
-t "sensor/images/raw" \
--cafile /var/run/certs/ca.crt \
-D CONNECT authentication-method "K8S-SAT" \
-D CONNECT authentication-data "$(cat /var/run/secrets/tokens/broker-sat)" \
-D PUBLISH user-property __ts $(date +%s)000:0:df
fi
# Wait for 1 second before the next iteration
sleep 1
done'
Überprüfen der Ausgabe
Abonnieren Sie in einem neuen Terminal das Ausgabethema:
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh -c '
mosquitto_sub -h aio-broker -p 18883 -t "analytics/sensor/processed" --cafile /var/run/certs/ca.crt \
-D CONNECT authentication-method "K8S-SAT" \
-D CONNECT authentication-data "$(cat /var/run/secrets/tokens/broker-sat)"'
Die Ausgabe sieht wie im folgenden Beispiel aus:
{"temperature":[{"count":9,"max":2984.4444444444443,"min":248.33333333333337,"average":1849.6296296296296,"last":2612.222222222222,"unit":"C","overtemp":true}],"humidity":[{"count":10,"max":76.0,"min":30.0,"average":49.7,"last":38.0}],"object":[{"result":"milk can; broom; screwdriver; binoculars, field glasses, opera glasses; toy terrier"}]}
{"temperature":[{"count":10,"max":2490.5555555555557,"min":430.55555555555554,"average":1442.6666666666667,"last":1270.5555555555557,"unit":"C","overtemp":true}],"humidity":[{"count":9,"max":87.0,"min":34.0,"average":57.666666666666664,"last":42.0}],"object":[{"result":"broom; Saint Bernard, St Bernard; radiator"}]}
Hier enthält die Ausgabe die Temperatur- und Luftfeuchtigkeitsdaten sowie die erkannten Objekte in den Bildern.
Konfiguration von benutzerdefinierten Datenflussdiagrammen
Dieser Abschnitt enthält ausführliche Informationen zum Konfigurieren von Datenflussdiagrammen mit WASM-Modulen. Es umfasst alle Konfigurationsoptionen, Datenflussendpunkte und erweiterte Einstellungen.
Übersicht über Datenflussdiagramme
Ein Datenflussdiagramm definiert, wie Daten über WebAssembly-Module zur Verarbeitung fließen. Jedes Diagramm besteht aus:
- Modus, der steuert, ob das Diagramm aktiviert oder deaktiviert ist
- Profilreferenz, die mit einem Datenflussprofil verknüpft ist, das Skalierungs- und Ressourceneinstellungen definiert
- Datenträgerpersistenz, die optional beständigen Speicher für den Graph-Zustand ermöglicht
- Knoten, die die Quell-, Verarbeitungs- und Zielkomponenten definieren
- Knotenverbindungen, die angeben, wie Daten zwischen Knoten fließen
Moduskonfiguration
Die Mode-Eigenschaft bestimmt, ob das Datenflussdiagramm aktiv Daten verarbeitet. Legen Sie den Modus auf Enabled oder Disabled fest. Wenn deaktiviert, beendet das Diagramm die Verarbeitung von Daten, behält seine Konfiguration jedoch bei.
Wenn Sie ein Datenflussdiagramm erstellen oder bearbeiten, aktivieren Sie im Bereich "Datenflusseigenschaften " in " Datenfluss aktivieren""Ja ", um den Modus auf "Aktiviert" festzulegen. Wenn du es deaktiviert lässt, ist der Modus deaktiviert.
Profilreferenz
Die Profilreferenz verbindet Ihr Datenflussdiagramm mit einem Datenflussprofil, das Skalierungseinstellungen, Instanzenanzahlen und Ressourcengrenzwerte definiert. Wenn Sie keinen Profilverweis angeben, müssen Sie stattdessen einen Kubernetes-Besitzerverweis verwenden. Die meisten Szenarien verwenden das Standardprofil, das Azure IoT Einsatz bereitstellt.
Wenn Sie ein Datenflussdiagramm erstellen oder bearbeiten, wählen Sie im Eigenschaftenbereich "Datenfluss " das Datenflussprofil aus. Die Betriebserfahrung wählt automatisch das Standardprofil des Datenflusses aus. Weitere Informationen zu Datenflussprofilen finden Sie unter Konfigurieren des Datenflussprofils.
Von Bedeutung
Du kannst das Datenflussprofil nur auswählen, wenn du einen Datenflussgraphen erstellst. Du kannst das Datenflussprofil nicht mehr ändern, nachdem du den Datenflussgraphen erstellt hast. Wenn Sie das Datenflussprofil eines vorhandenen Datenflussdiagramms ändern möchten, löschen Sie das ursprüngliche Datenflussdiagramm, und erstellen Sie ein neues Diagramm mit dem neuen Datenflussprofil.
Anfordern der Datenträgerpersistenz
Die Persistenz der Anforderungsdiskette hilft Datenflussdiagrammen, den Zustand über Neustarts hinweg aufrechtzuerhalten. Wenn du diese Funktion aktivierst, kann der Graph den Verarbeitungszustand wiederherstellen, wenn der verbundene Broker neu startet. Dieses Feature ist nützlich für zustandsbehaftete Verarbeitungsszenarien, in denen der Verlust von Zwischendaten problematisch wäre. Wenn Sie die Persistenz des Anforderungsdatenträgers aktivieren, speichert der Broker die MQTT-Daten, z. B. Nachrichten in der Abonnentenwarteschlange, auf dem Datenträger. Dieser Ansatz stellt sicher, dass die Datenquelle Ihres Datenflusses während Stromausfällen oder Brokerneustarts keinen Datenverlust erlebt. Der Broker hält die optimale Leistung, weil man die Persistenz pro Datenfluss konfiguriert, sodass nur die Datenflüsse, die Persistenz benötigen, diese Funktion nutzen.
Der Datenflussgraph stellt diese Persistenzanfrage während des Abonnements unter Verwendung einer MQTTv5-Benutzereigenschaft ab. Dieses Feature funktioniert nur, wenn:
- Der Datenfluss verwendet den MQTT-Broker als Quelle (Quellknoten mit MQTT-Endpunkt)
- Der MQTT-Broker hat Persistenz aktiviert, wobei der dynamische Persistenzmodus auf den Datentyp festgelegt ist
Enabled, z. B. Abonnentenqueues.
Mit dieser Konfiguration können MQTT-Clients wie Datenflussgraphen die Festplattenpersistenz für ihre Abonnements anfordern, indem sie MQTTv5-Benutzereigenschaften verwenden. Für die detaillierte Konfiguration der MQTT-Broker-Persistenz siehe Konfigurieren der MQTT-Broker-Persistenz.
Die Einstellung akzeptiert Enabled oder Disabled, mit Disabled der Standardeinstellung.
Wenn Sie ein Datenflussdiagramm erstellen oder bearbeiten, aktivieren Sie im Eigenschaftenbereich für Datenfluss unter Datenpersistenz anfordern die Option Ja, um die Anforderungsspeicherbeständigkeit auf Aktiviert zu setzen. Wenn Sie es deaktiviert lassen, ist die Einstellung deaktiviert.
Benennungsregeln und Grenzwerte
Datenflussressourcen und ihre Komponenten unterliegen Benennungsbeschränkungen auf unterschiedlichen Ebenen.
| Komponente | Zulässige Zeichen | Length | Hinweise |
|---|---|---|---|
| Ressourcenname des Datenflussdiagramms | Kleine alphanumerische Zeichen und Bindestriche (a-z, 0-9, -). Muss mit einem alphanumerischen Zeichen beginnen und enden. |
3-63 Zeichen | Erzwungen durch die Azure Resource Manager API. |
| Knotenname | Alphanumerische Zeichen, Unterstriche und Bindestriche (a-zA-Z0-9, _, -). |
Kein dokumentierter Grenzwert | Muss innerhalb des Graphen eindeutig sein. |
| Konfigurationsschlüssel | Alphanumerische Zeichen, Unterstriche und Bindestriche (a-zA-Z0-9, _, -). |
Kein dokumentierter Grenzwert | Schlüsselwertpaare, die an WASM-Module übergeben werden. |
| Name des Datenflussprofils | Alphanumerische Zeichen in Kleinschreibung und Bindestriche. | 3-39 Zeichen | Der 39-Zeichen-Grenzwert ist durch Kubernetes-Podnameneinschränkungen bedingt (63 Zeichen minus des Präfixes aio-dataflow- und des Revisionssuffixes). |
| Schemareferenz | Muss mit dem Format aio-sr://<namespace>/<name>:<version> oder aio-sr://<name>:<version>. |
N/A | Wird in Knotenverbindungsschemas verwendet. |
Das Datenflussdiagramm erzwingt auch die folgenden strukturellen Regeln:
- Keine doppelten Knotennamen: Jeder Knoten im Diagramm muss einen eindeutigen Namen haben.
- Gültige Verbindungstypen: Der Graph erlaubt nur die folgenden Knotenverbindungstypen: Quelle-zu-Graph, Quelle-zu-Ziel, Graph-zu-Graph und Graph-zu-Ziel-Verbindung.
- Keine Zyklen: Das Diagramm kann keine Zirkelverbindungen enthalten, die endlose Verarbeitungsschleifen erstellen.
- Keine Selbstschleifen: Ein Knoten kann keine Verbindung mit sich selbst herstellen.
- Kein Themaüberlappung: Wenn eine Quelle und ein Ziel denselben Endpunkt verwenden, können sich ihre MQTT-Themen nicht überlappen, wodurch eine endlose Nachrichtenschleife entsteht.
Knotenkonfiguration
Knoten sind die Bausteine eines Datenflussdiagramms. Jeder Knoten hat einen eindeutigen Namen innerhalb des Diagramms und führt eine bestimmte Funktion aus. Das Diagramm enthält drei Arten von Knoten:
Quellknoten
Quellknoten definieren, wo Daten in das Diagramm eingegeben werden. Sie stellen eine Verbindung mit Datenflussendpunkten her, die Daten von MQTT-Brokern oder Kafka-Themen empfangen. Jeder Quellknoten muss Folgendes angeben:
- Endpunktverweis, der auf einen konfigurierten Datenflussendpunkt verweist.
- Datenquellen als Liste der MQTT-Themen oder Kafka-Themen, die abonniert werden sollen
- Ressourcenverweis (optional), der auf eine Azure Device Registry-Ressource zur Schemaableitung verweist
Das Datenquellen-Array unterstützt das Abonnement mehrerer Themen, ohne die Endpunktkonfiguration zu ändern. Diese Flexibilität bedeutet, dass Sie Endpunkte über verschiedene Datenflüsse hinweg wiederverwenden können.
Hinweis
Derzeit unterstützen Datenflussdiagramme nur MQTT- und Kafka-Endpunkte als Datenquellen. Weitere Informationen finden Sie unter Konfigurieren von Datenflussendpunkten.
Wählen Sie im Datenflussdiagramm " Quelle " aus, um den Quellknoten zu konfigurieren. Wählen Sie unter "Quelldetails" den Datenflussendpunkt aus, und verwenden Sie dann das Feld "Themen ", um die MQTT-Themenfilter anzugeben, die für eingehende Nachrichten abonniert werden sollen. Fügen Sie mehrere MQTT-Themen hinzu, indem Sie "Zeile hinzufügen" auswählen und ein neues Thema eingeben.
Diagrammverarbeitungsknoten
Diagrammverarbeitungsknoten enthalten die WebAssembly-Module, die Daten transformieren. Diese Knoten rufen WASM-Artefakte aus Containerregistrierungen ab und führen sie mithilfe der angegebenen Konfigurationsparameter aus. Für jeden Diagrammknoten ist Folgendes erforderlich:
- Referenz zum Registrierungsendpunkt, die auf einen Registrierungsendpunkt verweist, um Artefakte zu pullen
- Artefaktspezifikation, die den Modulnamen und die Version definiert, die abgerufen werden soll
- Konfigurationsparameter als Schlüsselwertpaare, die an das WASM-Modul übergeben werden
Das Konfigurationsarray unterstützt die Anpassung des Modulverhaltens, ohne das WASM-Artefakt neu aufbauen zu müssen. Allgemeine Konfigurationsoptionen umfassen Verarbeitungsparameter, Schwellenwerte, Konvertierungseinstellungen und Featurekennzeichnungen.
Wählen Sie im Datenflussdiagramm die Option "Diagrammtransformation hinzufügen" (optional) aus, um einen Diagrammverarbeitungsknoten hinzuzufügen. Wählen Sie im Bereich Diagrammauswahl das gewünschte Diagrammartefakt aus (einfaches oder komplexes Diagramm). Wählen Sie dann Übernehmen aus. Sie können einige Diagrammoperatoreinstellungen konfigurieren, indem Sie den Diagrammknoten im Diagramm auswählen.
Sie übergeben die Konfigurationsschlüssel-Wert-Paare zur Laufzeit an das WASM-Modul. Das Modul kann auf diese Werte zugreifen, um sein Verhalten anzupassen. Mit diesem Ansatz können Sie:
- Stellen Sie dasselbe WASM-Modul mit verschiedenen Konfigurationen bereit.
- Passen Sie Verarbeitungsparameter an, ohne Module neu zu erstellen.
- Aktivieren oder Deaktivieren von Features basierend auf bereitstellungsanforderungen.
- Legen Sie umgebungsspezifische Werte wie Schwellenwerte oder Endpunkte fest.
Von Bedeutung
Überprüfen Sie die Dokumentation oder den Quellcode Ihres WASM-Moduls auf erforderliche Konfigurationsparameter. Wenn ein Modul bestimmte Parameter erwartet (wie Filtergrenzen oder Schwellenwerte) und du sie nicht angibst, kann das Modul zur Laufzeit ausfallen. Ausführliche Informationen zum Definieren von Parametern in Diagrammdefinitionen finden Sie unter Modulkonfigurationsparameter.
Zielknoten
Zielknoten definieren, wohin der Graph verarbeitete Daten schickt. Sie verbinden sich mit Datenflussendpunkten, die Daten an MQTT-Broker oder andere Systeme senden. Jeder Zielknoten gibt Folgendes an:
- Endpunktverweis, der auf einen konfigurierten Datenflussendpunkt verweist.
- Datenziel als spezifisches Thema, Pfad oder Speicherort für Ausgabedaten.
- Ausgabeschemaeinstellungen (optional), die serialisierungsformat und Schemaüberprüfung definieren.
Hinweis
Derzeit unterstützen Datenflussgraphen nur MQTT-, Kafka- und OpenTelemetrie-Endpunkte als Datenziele. Weitere Informationen finden Sie unter Konfigurieren von Datenflussendpunkten.
- Wählen Sie im Datenflussdiagramm den Zielknoten aus.
- Wählen Sie den gewünschten Datenflussendpunkt aus der Dropdownliste " Datenflussendpunktdetails" aus .
- Wählen Sie Fortfahren aus, um das Ziel zu konfigurieren.
- Geben Sie die erforderlichen Einstellungen für das Ziel ein, einschließlich des Themas oder der Tabelle, an das die Daten gesendet werden sollen. Das Portal interpretiert automatisch das Datenzielfeld basierend auf dem Endpunkttyp. Wenn der Datenflussendpunkt beispielsweise ein MQTT-Endpunkt ist, werden Sie von der Zieldetailseite aufgefordert, das Thema einzugeben.
Knotenverbindungen
Knotenverbindungen definieren den Datenflusspfad zwischen Knoten. Jede Verbindung gibt einen Quellknoten und zielknoten an, wodurch die Verarbeitungspipeline erstellt wird. Sie können optional ein Schema in die Verbindung einschließen. Das Modul empfängt das Schema bei der Initialisierung, was die Schema-Validierung wie in diesem Beispiel unterstützt.
Die Betriebsumgebung erstellt automatisch Knotenverbindungen, wenn Sie den Diagrammverarbeitungsknoten auswählen. Du kannst die Verbindungen nach der Erstellung des Graphen nicht mehr ändern.
Datenflussendpunkte
Datenflussdiagramme stellen über Datenflussendpunkte eine Verbindung mit externen Systemen her. Der Endpunkttyp bestimmt, ob Sie ihn als Quelle, Ziel oder beides verwenden können.
MQTT-Endpunkte
MQTT-Endpunkte können sowohl als Quellen als auch als Ziele dienen. Sie verbinden sich mit MQTT-Brokern, einschließlich:
- Azure IoT Einsatz lokaler MQTT-Broker (in jedem Datenfluss erforderlich)
- Azure Event Grid MQTT
- Benutzerdefinierte MQTT-Broker
Ausführliche Konfigurationsinformationen finden Sie unter Konfigurieren von MQTT-Datenflussendpunkten.
Kafka-Endpunkte
Kafka-Endpunkte können sowohl als Quellen als auch als Ziele dienen. Sie verbinden sich mit Kafka-kompatiblen Systemen, darunter:
- Azure Event Hubs (kafka-kompatibel)
- Apache Kafka Cluster
- Confluent Cloud
Ausführliche Konfigurationsinformationen finden Sie unter Configure Azure Event Hubs- und Kafka-Datenflussendpunkten.
Registrierungsendpunkte
Registrierungsendpunkte bieten Zugriff auf Containerregistrierungen zum Abrufen von WASM-Modulen und Graphdefinitionen. Sie werden nicht direkt im Datenfluss verwendet, sondern von Graphverarbeitungsknoten referenziert.
Ausführliche Konfigurationsinformationen finden Sie unter Konfigurieren von Registrierungsendpunkten.
Fehlerbehebung bei Datenflussgrafiken
Dieser Abschnitt enthält Tipps zur Problembehandlung bei häufig auftretenden Problemen beim Arbeiten mit Datenflussdiagrammen.
RegistryEndpoint nicht gefunden
Wenn das Datenflussdiagramm nicht gestartet werden kann und meldet, dass er den Registrierungsendpunkt nicht finden kann, überprüfen Sie Folgendes:
Der Name des Registry-Endpunkts muss übereinstimmen: Der
registryEndpointRefWert in Ihrem Datenflussdiagramm muss exakt mit demnameihrerRegistryEndpointRessource übereinstimmen. Überprüfen Sie auf Tippfehler und die Beachtung der Groß- und Kleinschreibung.# List all registry endpoints in the namespace kubectl get registryendpoints -n azure-iot-operationsDer Registrierungsendpunkt befindet sich im richtigen Namespace: Der Registrierungsendpunkt muss sich im
azure-iot-operationsNamespace (oder demselben Namespace wie Ihr Datenflussdiagramm) befinden.Der Registrierungsendpunkt ist bereit: Überprüfen Sie den Status Ihres Registrierungsendpunkts:
kubectl describe registryendpoint $REGISTRY_ENDPOINT -n azure-iot-operationsAuthentication ist ordnungsgemäß konfiguriert: Wenn Sie verwaltete Identität verwenden, stellen Sie sicher, dass die Azure IoT Einsatz Arc-Erweiterung über
AcrPullBerechtigungen für die Registrierung verfügt. Wenn Sie die anonyme Authentifizierung mit einer öffentlichen Registrierung verwenden, überprüfen Sie, ob die Host-URL korrekt ist.Artefakte sind in der Registrierung vorhanden: Stellen Sie sicher, dass die Graphdefinition und die WASM-Module, auf die in Ihrem Diagramm verwiesen wird, in den erwarteten Tags in der Registrierung verfügbar sind:
# Check if artifacts exist (example with ORAS) oras manifest fetch $REGISTRY_HOST/graph-simple:1.0.0
Der Datenflussgraph wird ausgeführt, aber verarbeitet keine Daten.
Wenn Sie das Datenflussdiagramm bereitstellen, aber keine Nachrichten verarbeiten:
Überprüfen des Datenflussdiagrammstatus: Suchen Sie nach Fehlern im Datenflussdiagramm-Ressourcenstatus.
kubectl get dataflowgraph $GRAPH_NAME -n azure-iot-operations -o yamlÜberprüfen Sie MQTT-Themen: Stellen Sie sicher, dass die Quellthemen in Ihrem Datenflussdiagramm den Themen entsprechen, in denen Sie Daten veröffentlichen.
Überprüfen von Zeitstempeln: Datenflussdiagramme verwenden zeitstempel (Hybrid Logical Clock, HLC) für die Nachrichtenverarbeitung. Fügen Sie die
__tsBenutzereigenschaft ein, wenn Sie MQTT-Nachrichten veröffentlichen, um eine rechtzeitige Verarbeitung sicherzustellen.
Verwandte Inhalte
- Erstellen von WASM-Modulen für Datenflüsse für IDE- und CLI-basierte Entwicklungsworkflows
- Konfigurieren Sie WebAssembly-Graphdefinitionen für die YAML-Graphstruktur und Konfigurationsparameter
- Bereitstellen von WASM-Modulen und Graphdefinitionen für die Registrierungseinrichtung und artefaktverwaltung
- Führen Sie die ONNX-Inferenz in WASM für die Integration von maschinellen Lernmodellen aus
- Konfigurieren von MQTT-Datenflussendpunkten
- Configure Azure Event Hubs- und Kafka-Datenflussendpunkte
- Azure Data Lake Storage-Endpunkte für Datenflüsse konfigurieren
- Configure Microsoft Fabric OneLake-Datenflussendpunkte