Sdílet prostřednictvím


Použití WebAssembly (WASM) s grafy toku dat (Preview)

Důležité

WebAssembly (WASM) s datovými toky grafů je v ukázkovém režimu. Tato funkce má omezení a není určená pro produkční úlohy.

Další podmínky použití pro Microsoft Azure Preview najdete v právních podmínkách, které se vztahují na funkce Azure, které jsou v beta verzi, preview nebo ještě nejsou vydané v obecné dostupnosti.

Grafy toku dat Azure IoT podporují moduly WebAssembly (WASM) pro vlastní zpracování dat na hraničních zařízeních. Vlastní obchodní logiku a transformace dat můžete nasadit jako součást kanálů toku dat.

Návod

Chcete spustit AI v rámci tohoto pásma? Podívejte se na Spustit ONNX inferenci v grafech toku dat WebAssembly, abyste mohli balit a spouštět malé modely ONNX uvnitř operátorů WASM.

Důležité

Grafy toku dat aktuálně podporují pouze koncové body MQTT, Kafka a OpenTelemetry. Jiné typy koncových bodů, jako jsou Data Lake, Microsoft Fabric OneLake, Azure Data Explorer a Local Storage, se nepodporují. Další informace najdete v tématu Známé problémy.

Požadavky

  • Nasaďte instanci operací Azure IoT v clusteru Kubernetes s podporou arc. Další informace najdete v tématu Nasazení operací Azure IoT.
  • K ukládání modulů a grafů WASM použijte Azure Container Registry (ACR).
  • Nainstalujte rozhraní příkazového řádku OCI Registry As Storage (ORAS) pro nabízení modulů WASM do registru.
  • Vyvíjejte vlastní moduly WASM podle pokynů v článku Vývoj modulů WebAssembly pro grafy toku dat.

Přehled

Moduly WebAssembly (WASM) v grafech toku dat Azure IoT umožňují zpracovávat data na hraničních zařízeních s vysokým výkonem a zabezpečením. WASM běží v sandboxovém prostředí a podporuje Rust a Python.

Jak fungují grafy toku dat WASM

Implementace toku dat WASM se řídí tímto pracovním postupem:

  1. Vývoj modulů WASM: Napište vlastní logiku zpracování v podporovaném jazyce a zkompilujte ji do formátu Model komponent WebAssembly.
  2. Vývoj definice grafu: Definujte, jak data procházejí moduly pomocí konfiguračních souborů YAML. Podrobné informace najdete v tématu Konfigurace definic grafu WebAssembly.
  3. Ukládat artefakty v registru: Nasdílejte kompilované moduly WASM do registru kontejneru pomocí nástrojů kompatibilních s OCI, jako jsou ORAS.
  4. Konfigurace koncových bodů registru: Nastavte podrobnosti o ověřování a připojení, aby operace Azure IoT mohly přistupovat k registru kontejneru.
  5. Vytvoření toku dat: Definujte zdroje dat, název artefaktu a cíle.
  6. Nasazení a spuštění: Operace Azure IoT načítá moduly WASM z registru a spouští je na základě definice grafu.

Začínáme s příklady

Tyto příklady ukazují, jak nastavit a nasadit grafy toku dat WASM pro běžné scénáře. Příklady používají pevně zakódované hodnoty a zjednodušené konfigurace, abyste mohli rychle začít.

Nastavení registru kontejneru

Operace Azure IoT potřebuje registr kontejneru k načtení modulů WASM a definic grafů. Můžete použít Azure Container Registry (ACR) nebo jiný registr kompatibilní s OCI.

Informace o vytvoření a konfiguraci služby Azure Container Registry najdete v tématu Nasazení služby Azure Container Registry.

Instalace rozhraní příkazového řádku ORAS

Pomocí rozhraní příkazového řádku ORAS odešlete do registru kontejneru moduly WASM a definice grafu. Pokyny k instalaci najdete v tématu Instalace ORAS.

Stažení ukázkových modulů z veřejného registru

Použití předem připravených ukázkových modulů:

# Pull sample modules and graphs
oras pull ghcr.io/azure-samples/explore-iot-operations/graph-simple:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/graph-complex:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/temperature:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/window:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/snapshot:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/format:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/humidity:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/collection:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/enrichment:1.0.0
oras pull ghcr.io/azure-samples/explore-iot-operations/filter:1.0.0

Nabízení modulů do registru

Jakmile budete mít ukázkové moduly a grafy, nasdílejte je do registru kontejneru. Nahraďte <YOUR_ACR_NAME> názvem služby Azure Container Registry.

# Log in to your ACR
az acr login --name <YOUR_ACR_NAME>

# Push modules to your registry
oras push <YOUR_ACR_NAME>.azurecr.io/graph-simple:1.0.0 --config /dev/null:application/vnd.microsoft.aio.graph.v1+yaml graph-simple.yaml:application/yaml --disable-path-validation
oras push <YOUR_ACR_NAME>.azurecr.io/graph-complex:1.0.0 --config /dev/null:application/vnd.microsoft.aio.graph.v1+yaml graph-complex.yaml:application/yaml --disable-path-validation
oras push <YOUR_ACR_NAME>.azurecr.io/temperature:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm temperature-1.0.0.wasm:application/wasm
oras push <YOUR_ACR_NAME>.azurecr.io/window:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm window-1.0.0.wasm:application/wasm
oras push <YOUR_ACR_NAME>.azurecr.io/snapshot:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm snapshot-1.0.0.wasm:application/wasm
oras push <YOUR_ACR_NAME>.azurecr.io/format:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm format-1.0.0.wasm:application/wasm
oras push <YOUR_ACR_NAME>.azurecr.io/humidity:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm humidity-1.0.0.wasm:application/wasm
oras push <YOUR_ACR_NAME>.azurecr.io/collection:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm collection-1.0.0.wasm:application/wasm
oras push <YOUR_ACR_NAME>.azurecr.io/enrichment:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm enrichment-1.0.0.wasm:application/wasm
oras push <YOUR_ACR_NAME>.azurecr.io/filter:1.0.0 --artifact-type application/vnd.module.wasm.content.layer.v1+wasm filter-1.0.0.wasm:application/wasm

Návod

Můžete také nabízet vlastní moduly a vytvářet vlastní grafy, viz Konfigurace vlastních grafů toku dat.

Vytvoření koncového bodu registru

Koncový bod registru definuje připojení k vašemu registru kontejneru. Grafy toku dat používají koncové body registru k načtení modulů WASM a definic grafů z registrů kontejnerů. Podrobné informace o konfiguraci koncových bodů registru s různými metodami ověřování a typy registru najdete v tématu Konfigurace koncových bodů registru.

Pro rychlé nastavení pomocí služby Azure Container Registry vytvořte koncový bod registru s ověřováním spravované identity přiřazené systémem:

V současné době nemůžete vytvářet koncové body registru v provozním prostředí. Musíte použít manifesty Bicep nebo Kubernetes. Po vytvoření koncového bodu registru jsou grafy, které jste odeslali do registru kontejneru , připravené k použití v provozním prostředí v grafech toku dat.

Poznámka:

Koncové body registru můžete opakovaně používat napříč několika grafy toku dat a dalšími komponentami operací Azure IoT, jako jsou konektory Akri.

Získání názvu rozšíření

# Get extension name
az k8s-extension list \
  --resource-group <RESOURCE_GROUP> \
  --cluster-name <CLUSTER_NAME> \
  --cluster-type connectedClusters \
  --query "[?extensionType=='microsoft.iotoperations'].name" \
  --output tsv

První příkaz vrátí název rozšíření (například azure-iot-operations-4gh3y).

Konfigurace oprávnění spravované identity

Pokud chcete, aby operace Azure IoT načítá moduly WASM z registru kontejneru, udělte spravované identitě správná oprávnění. Rozšíření IoT Operations používá spravovanou identitu přiřazenou systémem, která potřebuje roli AcrPull ve službě Azure Container Registry. Ujistěte se, že máte následující požadavky:

  • Oprávnění vlastníka ve službě Azure Container Registry
  • Registr kontejneru může být v jiné skupině prostředků nebo předplatném, ale musí být ve stejném tenantovi jako vaše nasazení IoT Operations.

Spuštěním těchto příkazů přiřaďte AcrPull roli spravované identitě ioT Operations:

# Get the IoT Operations extension managed identity
export EXTENSION_OBJ_ID=$(az k8s-extension list --cluster-name $CLUSTER_NAME -g $RESOURCE_GROUP --cluster-type connectedClusters --query "[?extensionType=='microsoft.iotoperations'].identity.principalId" -o tsv)

# Get the application ID for the managed identity
export SYSTEM_ASSIGNED_MAN_ID=$(az ad sp show --id $EXTENSION_OBJ_ID --query "appId" -o tsv)

# Assign the AcrPull role to the managed identity
az role assignment create --role "AcrPull" --assignee $SYSTEM_ASSIGNED_MAN_ID --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"

Další informace o rolích registru kontejnerů najdete v tématu Role a oprávnění služby Azure Container Registry.

Pokud dojde k chybám ověřování pomocí Azure CLI, přiřaďte oprávnění na webu Azure Portal:

  1. Na webu Azure Portal přejděte do služby Azure Container Registry.
  2. V nabídce vyberte Řízení přístupu (IAM ).
  3. Vyberte Přidat>Přiřadit roli.
  4. Zvolte předdefinované role AcrPull .
  5. Jako možnost přiřadit přístup vyberte uživatele, skupinu nebo instanční objekt .
  6. Vyhledejte a vyberte název rozšíření IoT Operations (například azure-iot-operations-4gh3y).
  7. Výběrem Uložit dokončíte přiřazení role.

Podrobné pokyny najdete v tématu Přiřazení rolí Azure pomocí webu Azure Portal.

Příklad 1: Základní nasazení s jedním modulem WASM

Tento příklad převede data o teplotě z Fahrenheita na stupně Celsia pomocí modulu WASM. Zdrojový kód modulu teploty je k dispozici na GitHubu. Použijte předkompilovanou verzi graph-simple:1.0.0 , kterou jste odeslali do registru kontejneru.

Jak to funguje

Definice grafu vytvoří jednoduchý třífázový kanál:

  1. Zdroj: Přijímá teplotní data z MQTT
  2. Mapa: Zpracovává data pomocí modulu WASM o teplotě
  3. Jímka: Odesílá převedená data zpět na MQTT

Podrobné informace o tom, jak funguje jednoduchá definice grafu a její struktura, najdete v příkladu 1: Jednoduchá definice grafu.

Vstupní formát:

{"temperature": {"value": 100.0, "unit": "F"}}

Output format (Výstupní formát):

{"temperature": {"value": 37.8, "unit": "C"}}

Následující konfigurace vytvoří graf toku dat, který používá tento kanál převodu teploty. Graf odkazuje na graph-simple:1.0.0 artefakt, který obsahuje definici YAML a načítá modul teploty z registru kontejneru.

Konfigurace grafu toku dat

Tato konfigurace definuje tři uzly, které implementují pracovní postup převodu teploty: zdrojový uzel, který se přihlásí k odběru příchozích dat o teplotě, uzel zpracování grafu, na kterém běží modul WASM, a cílový uzel, který publikuje převedené výsledky.

Prostředek grafu toku dat "zabalí" artefakt definice grafu a připojí jeho abstraktní operace zdroje nebo jímky k konkrétním koncovým bodům:

  • Operace definice source grafu se připojuje ke zdrojovému uzlu toku dat (téma MQTT).
  • Operace definice sink grafu se připojuje k cílovému uzlu toku dat (téma MQTT).
  • Operace zpracování definice grafu se spouští v uzlu zpracování grafu.

Toto oddělení umožňuje nasadit stejnou definici grafu s různými koncovými body napříč prostředími a přitom zachovat logiku zpracování beze změny.

  1. Pokud chcete vytvořit graf toku dat v provozním prostředí, přejděte na kartu Tok dat .

  2. Vyberte rozevírací nabídku vedle + Vytvořit a zvolte Vytvořit graf toku dat.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak vytvořit graf toku dat

  3. Vyberte zástupný název new-data-flow a nastavte vlastnosti toku dat. Zadejte název grafu toku dat a zvolte profil toku dat, který chcete použít.

  4. V diagramu toku dat vyberte Zdroj a nakonfigurujte zdrojový uzel. V části Podrobnosti o zdroji vyberte prostředek nebo koncový bod toku dat.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak vybrat zdroj grafu toku dat

    1. Pokud vyberete Asset, zvolte asset, ze které chcete načíst data, a klikněte na Použít.

    2. Pokud vyberete koncový bod toku dat, zadejte následující podrobnosti a klikněte na Použít.

      Setting Description
      Koncový bod toku dat Vyberte výchozí nastavení pro použití výchozího koncového bodu zprostředkovatele zpráv MQTT.
      Téma Filtr tématu pro přihlášení k odběru příchozích zpráv. Použijte Téma (Témata)>Přidat řádek pro přidání více témat.
      Schéma zpráv Schéma, které se má použít k deserializaci příchozích zpráv.
  5. V diagramu toku dat vyberte Přidat transformaci grafu (volitelné) a přidejte uzel zpracování grafu. V podokně výběru grafu vyberte graf-simple:1 a klikněte na Použít.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak vytvořit jednoduchý graf toku dat

    Důležité

    Tento příklad používá graph-simple:1.0.0 artefakt, který jste odeslali do registru kontejneru. Vlastní grafy můžete vytvořit tak, že vytvoříte vlastní moduly WASM a nasdílíte je do registru kontejneru. Grafy, které nasdílíte do registru kontejneru, jsou dostupné v podokně výběru grafu .

  6. Některá nastavení operátorů grafu můžete nakonfigurovat výběrem uzlu grafu v diagramu. Můžete například vybrat operátor module-temperature/map a zadat hodnotu key2example-value-2. Klikněte na Použít pro uložení změn.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak nakonfigurovat jednoduchý graf toku dat

  7. V diagramu toku dat vyberte Cíl a nakonfigurujte cílový uzel.

  8. Výběrem možnosti Uložit pod názvem grafu toku dat uložte graf toku dat.

Testování toku dat

Pokud chcete tok dat otestovat, odešlete zprávy MQTT z clusteru. Nejprve nasaďte klientský pod MQTT podle pokynů v části Testování připojení ke zprostředkovateli MQTT pomocí klientů MQTT. Klient MQTT poskytuje ověřovací tokeny a certifikáty pro připojení ke zprostředkovateli. Pokud chcete nasadit klienta MQTT, spusťte následující příkaz:

kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml

Odesílání zpráv o teplotě

V první relaci terminálu vytvořte a spusťte skript pro odesílání dat o teplotě v fahrenheitu:

# 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'

Poznámka:

Vlastnost __ts uživatele MQTT se používá k přidání časového razítka do zpráv, aby se zajistilo včasné zpracování zpráv pomocí hybridních logických hodin (HLC). Když časové razítko pomůže toku dat rozhodnout, jestli zprávu přijmete nebo zahodíte. Formát vlastnosti je <timestamp>:<counter>:<nodeid>. Zpracování toku dat je přesnější, ale není povinné.

Skript publikuje do tématu každou sekundu náhodná data o teplotě sensor/temperature/raw . Měl by vypadat takto:

Publishing temperature: {"temperature":{"value":1234,"unit":"F"}}
Publishing temperature: {"temperature":{"value":5678,"unit":"F"}}

Nechte skript spuštěný a pokračujte v publikování dat o teplotě.

Přihlášení k odběru zpracovaných zpráv

V druhé relaci terminálu (také připojeném k podu klienta MQTT) se přihlaste k odběru výstupního tématu, abyste viděli převedené hodnoty teploty:

# 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)"'

Zobrazí se data o teplotě převedená z Fahrenheita na stupně Celsia modulem WASM.

{"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}}

Příklad 2: Nasazení komplexního grafu

Tento příklad ukazuje sofistikovaný pracovní postup zpracování dat, který zpracovává více datových typů, včetně teploty, vlhkosti a obrazových dat. Komplexní definice grafu orchestruje několik modulů WASM k provádění pokročilých analýz a rozpoznávání objektů.

Jak to funguje

Složitý graf zpracovává tři datové proudy a kombinuje je do rozšířené analýzy senzorů:

  • Zpracování teploty: Převede Fahrenheita na stupně Celsia, filtruje neplatné čtení a vypočítá statistiky.
  • Zpracování vlhkosti: Shromažďuje měření vlhkosti v časových intervalech.
  • Zpracování obrazu: Provádí detekci objektů na snímcích fotoaparátu a formátuje výsledky.

Podrobné informace o tom, jak funguje komplexní definice grafu, její struktura a tok dat prostřednictvím několika fází zpracování, najdete v příkladu 2: Komplexní definice grafu.

Graf používá specializované moduly z příkladů Rustu.

Konfigurace grafu komplexního toku dat

Tato konfigurace implementuje pracovní postup zpracování více senzorů pomocí artefaktu graph-complex:1.0.0 . Všimněte si, že nasazení grafu toku dat se podobá příkladu 1 – oba používají stejný vzor se třemi uzly (zdrojový, procesor grafu, cíl), i když se logika zpracování liší.

K této podobnosti dochází, protože prostředek grafu toku dat funguje jako hostitelské prostředí, které načte a spouští definice grafu. Skutečná logika zpracování se nachází v artefaktu definice grafu (graph-simple:1.0.0 vs graph-complex:1.0.0. ), který obsahuje specifikaci YAML operací a připojení mezi moduly WASM. Prostředek grafu toku dat poskytuje infrastrukturu modulu runtime pro vyžádání artefaktu, vytvoření instance modulů a směrování dat prostřednictvím definovaného pracovního postupu.

  1. Pokud chcete vytvořit graf toku dat v provozním prostředí, přejděte na kartu Tok dat .

  2. Vyberte rozevírací nabídku vedle + Vytvořit a zvolte Vytvořit graf toku dat.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak vytvořit složitý graf toku dat

  3. Vyberte zástupný název new-data-flow a nastavte vlastnosti toku dat. Zadejte název grafu toku dat a zvolte profil toku dat, který chcete použít.

  4. V diagramu toku dat vyberte Zdroj a nakonfigurujte zdrojový uzel. V části Podrobnosti o zdroji vyberte prostředek nebo koncový bod toku dat.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak vybrat zdroj grafu toku dat

    1. Pokud vyberete Asset, zvolte asset, ze které chcete načíst data, a klikněte na Použít.

    2. Pokud vyberete koncový bod toku dat, zadejte následující podrobnosti a klikněte na Použít.

      Setting Description
      Koncový bod toku dat Vyberte výchozí nastavení pro použití výchozího koncového bodu zprostředkovatele zpráv MQTT.
      Téma Filtr tématu pro přihlášení k odběru příchozích zpráv. Použijte Téma (Témata)>Přidat řádek pro přidání více témat.
      Schéma zpráv Schéma, které se má použít k deserializaci příchozích zpráv.
  5. V diagramu toku dat vyberte Přidat transformaci grafu (volitelné) a přidejte uzel zpracování grafu. V podokně výběru grafu vyberte graf-komplexní:1 a klikněte na Použít.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak vytvořit složitý graf toku dat

    Důležité

    Tento příklad používá graph-complex:1.0.0 artefakt, který jste odeslali do registru kontejneru. Vlastní grafy můžete vytvořit tak, že vytvoříte vlastní moduly WASM a nasdílíte je do registru kontejneru. Grafy, které nasdílíte do registru kontejneru, jsou dostupné v podokně výběru grafu .

  6. Některá nastavení operátorů grafu můžete nakonfigurovat výběrem uzlu grafu v diagramu.

    Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak nakonfigurovat složitý graf toku dat

    Operator Description
    module-snapshot/branch Nakonfiguruje snapshot modul tak, aby prováděl detekci objektů na obrázcích. Konfigurační klíč můžete nastavit snapshot_topic tak, aby se zadalo vstupní téma pro data obrázků.
    modul-teplota/mapa Transformuje hodnoty teploty key2 na jiné měřítko.
  7. Klikněte na Použít pro uložení změn.

  8. V diagramu toku dat vyberte Cíl a nakonfigurujte cílový uzel.

  9. Výběrem možnosti Uložit pod názvem grafu toku dat uložte graf toku dat.

Testování komplexního toku dat

Než uvidíme výstup, musíme získat nastavení zdrojových dat.

Nahrání souborů obrázků RAW do podu mqtt-client

Soubory obrázků jsou určené k tomu, snapshot aby modul detekuje objekty v obrázcích. Nacházejí se ve složce obrázků na GitHubu.

Nejprve naklonujte úložiště, abyste získali přístup k souborům imagí:

git clone https://github.com/Azure-Samples/explore-iot-operations.git
cd explore-iot-operations

Pokud chcete nahrát soubory obrázků RAW ze ./samples/wasm/images složky do podu mqtt-client , můžete použít následující příkaz:

kubectl cp ./samples/wasm/images azure-iot-operations/mqtt-client:/tmp

Zkontrolujte nahrání souborů:

kubectl exec -it mqtt-client -n azure-iot-operations -- ls /tmp/images

Měl by se zobrazit seznam souborů ve /tmp/images složce.

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

Publikování simulovaných dat o teplotě, vlhkosti a odesílání obrázků

Příkazy pro publikování teploty, vlhkosti a odesílání obrázků do jednoho skriptu můžete kombinovat. Použijte následující příkaz:

# 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'

Kontrola výstupu

V novém terminálu se přihlaste k odběru výstupního tématu:

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)"'

Výstup by měl vypadat takto:

{"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"}]}

Výstup zde obsahuje data o teplotě a vlhkosti a také zjištěné objekty na obrázcích.

Vývoj vlastních modulů WASM

Pokud chcete vytvořit vlastní logiku zpracování dat pro grafy toku dat, vyvíjejte moduly WebAssembly v Rustu nebo Pythonu. Vlastní moduly umožňují implementovat specializovanou obchodní logiku, transformace dat a analýzy, které nejsou dostupné v integrovaných operátorech.

Komplexní pokyny pro vývoj, včetně:

  • Nastavení vývojového prostředí
  • Vytváření operátorů v Rustu a Pythonu
  • Principy datového modelu a rozhraní
  • Sestavování a testování modulů

Viz Vývoj modulů WebAssembly pro grafy toku dat.

Podrobné informace o vytváření a konfiguraci definic grafů YAML, které definují pracovní postupy zpracování dat, najdete v tématu Konfigurace definic grafu WebAssembly.

Konfigurace vlastních grafů toku dat

Tato část obsahuje podrobné informace o konfiguraci grafů toku dat pomocí modulů WASM. Zahrnuje všechny možnosti konfigurace, koncové body toku dat a upřesňující nastavení.

Přehled grafu toku dat

Graf toku dat definuje, jak data procházejí moduly WebAssembly ke zpracování. Každý graf se skládá z:

  • Režim, který určuje, jestli je graf povolený nebo zakázaný
  • Odkaz na profil, který odkazuje na profil toku dat definující nastavení škálování a prostředků
  • Trvalost disku, která volitelně umožňuje trvalé úložiště pro stav grafu
  • Uzly, které definují zdrojové, zpracovávané a cílové komponenty
  • Připojení uzlů, která určují toky dat mezi uzly

Konfigurace režimu

Vlastnost režimu určuje, zda graf toku dat aktivně zpracovává data. Režim můžete nastavit na Enabled nebo Disabled (nerozlišující malá a velká písmena). Pokud je tato možnost zakázaná, graf přestane zpracovávat data, ale zachová jeho konfiguraci.

Při vytváření nebo úpravách grafu toku dat můžete v podokně vlastností toku dat zaškrtnout povolit tok dat na Ano pro nastavení režimu na Enabled. Pokud ho necháte nezaškrtnutou, režim je nastavený na Disabled.

Snímek obrazovky s rozhraním provozního prostředí znázorňující, jak povolit nebo zakázat konfiguraci režimu

Referenční informace k profilu

Odkaz na profil propojuje graf toku dat s profilem toku dat, který definuje nastavení škálování, počty instancí a limity prostředků. Pokud nezadáte odkaz na profil, musíte místo toho použít odkaz vlastníka Kubernetes. Většina scénářů používá výchozí profil poskytovaný operacemi Azure IoT.

Při vytváření nebo úpravě grafu toku dat vyberte v podokně vlastností toku dat profil toku dat. Výchozí profil toku dat je ve výchozím nastavení vybraný. Další informace o profilech toku dat najdete v tématu Konfigurace profilu toku dat.

Důležité

Profil toku dat můžete zvolit jenom při vytváření grafu toku dat. Po vytvoření grafu toku dat nemůžete změnit profil toku dat. Pokud chcete změnit profil toku dat existujícího grafu toku dat, odstraňte původní graf toku dat a vytvořte nový s novým profilem toku dat.

Vyžádání trvalosti disku

Důležité

U grafů toku dat je známý problém s trvalostmi disků. Tato funkce v současné době nefunguje podle očekávání. Další informace najdete v tématu Známé problémy.

Trvalost disku požadavku umožňuje grafům toku dat udržovat stav při restartování. Když tuto funkci povolíte, graf může obnovit stav zpracování v případě restartování připojeného zprostředkovatele. Tato funkce je užitečná pro stavové scénáře zpracování, kdy by ztráta průběžných dat byla problematická. Když povolíte trvalost disku požadavku, zprostředkovatel zachová data MQTT, jako jsou zprávy ve frontě odběratele, na disk. Tento přístup zajišťuje, že zdroj dat toku dat nezíská během výpadků napájení nebo restartování zprostředkovatele ztrátu dat. Zprostředkovatel udržuje optimální výkon, protože trvalost je nakonfigurovaná na tok dat, takže tuto funkci používají jenom toky dat, které potřebují trvalost.

Graf toku dat vytváří tento požadavek trvalosti během předplatného pomocí vlastnosti uživatele MQTTv5. Tato funkce funguje jenom v těchto případech:

  • Tok dat používá zprostředkovatele MQTT jako zdroj (zdrojový uzel s koncovým bodem MQTT).
  • Zprostředkovatel MQTT má povolenou trvalost s dynamickým režimem trvalosti nastaveným Enabled na datový typ, jako jsou fronty odběratelů.

Tato konfigurace umožňuje klientům MQTT, jako jsou grafy toku dat, požadovat trvalost disku pro svá předplatná pomocí uživatelských vlastností MQTTv5. Podrobnou konfiguraci trvalosti zprostředkovatele MQTT najdete v tématu Konfigurace trvalosti zprostředkovatele MQTT.

Nastavení přijímá Enabled nebo Disabled, s Disabled jako výchozí.

Při vytváření nebo úpravách grafu toku dat můžete v podokně Vlastností toku dat zaškrtnout trvalost dat požadavku na Ano a tím nastavit trvalost disku požadavku na Enabled. Pokud ho necháte nezaškrtnutou, nastavení je Disabled.

Konfigurace uzlů

Uzly jsou stavební bloky grafu toku dat. Každý uzel má v grafu jedinečný název a provádí konkrétní funkci. Existují tři typy uzlů:

Zdrojové uzly

Zdrojové uzly definují, kde data zadávají graf. Připojí se ke koncovým bodům toku dat, které přijímají data od brokerů MQTT nebo témat z Kafka. Každý zdrojový uzel musí určovat:

  • Odkaz na koncový bod odkazující na nakonfigurovaný koncový bod toku dat
  • Zdroje dat jako seznam témat MQTT nebo témat Kafka pro přihlášení k odběru
  • Referenční informace k prostředkům (volitelné), které odkazují na prostředek služby Azure Device Registry pro odvozování schématu

Pole zdrojů dat umožňuje přihlásit se k odběru více témat beze změny konfigurace koncového bodu. Tato flexibilita umožňuje opakované použití koncových bodů napříč různými toky dat.

Poznámka:

V současné době se jako zdroje dat pro grafy toku dat podporují jenom koncové body MQTT a Kafka. Další informace najdete v tématu Konfigurace koncových bodů toku dat.

V diagramu toku dat vyberte Zdroj a nakonfigurujte zdrojový uzel. V části Podrobnosti o zdroji vyberte koncový bod toku dat a pak pomocí pole Témata určete filtry témat MQTT pro přihlášení k odběru příchozích zpráv. Více témat MQTT můžete přidat tak, že vyberete Přidat řádek a zadáte nové téma.

Uzly zpracování grafů

Uzly zpracování grafu obsahují moduly WebAssembly, které transformují data. Tyto uzly načítají artefakty WASM z registrů kontejnerů a spouštějí je se zadanými parametry konfigurace. Každý uzel grafu vyžaduje:

  • Odkaz na koncový bod registru, který odkazuje na koncový bod registru pro vyžádání artefaktů
  • Specifikace artefaktů, která definuje název modulu a verzi pro vyžádání
  • Parametry konfigurace jako páry klíč-hodnota předané modulu WASM

Konfigurační pole umožňuje přizpůsobit chování modulu bez opětovného sestavení artefaktu WASM. Mezi běžné možnosti konfigurace patří parametry zpracování, prahové hodnoty, nastavení převodu a příznaky funkcí.

V diagramu toku dat vyberte Přidat transformaci grafu (volitelné) a přidejte uzel zpracování grafu. V podokně výběru grafu vyberte požadovaný artefakt grafu, jednoduchý nebo složitý graf a klikněte na Použít. Některá nastavení operátorů grafu můžete nakonfigurovat výběrem uzlu grafu v diagramu.

Páry klíč-hodnota konfigurace se předávají modulu WASM za běhu. Modul má k těmto hodnotám přístup, aby přizpůsobil své chování. Tento přístup umožňuje:

  • Nasazení stejného modulu WASM s různými konfiguracemi
  • Úprava parametrů zpracování bez opětovného sestavení modulů
  • Povolení nebo zakázání funkcí na základě požadavků na nasazení
  • Nastavení hodnot specifických pro prostředí, jako jsou prahové hodnoty nebo koncové body

Cílové uzly

Cílové uzly definují, kde se odesílají zpracovávaná data. Připojí se ke koncovým bodům toku dat, které odesílají data do zprostředkovatelů MQTT, cloudového úložiště nebo jiných systémů. Každý cílový uzel určuje:

  • Odkaz na koncový bod odkazující na nakonfigurovaný koncový bod toku dat
  • Cíl dat jako konkrétní téma, cesta nebo umístění pro výstupní data
  • Nastavení výstupního schématu (volitelné), které definují formát serializace a ověřování schématu

Pro cíle úložiště, jako je Azure Data Lake nebo Fabric OneLake, můžete zadat nastavení výstupního schématu pro řízení způsobu serializace a ověření dat.

Poznámka:

V současné době se jako cíle dat pro grafy toku dat podporují jenom koncové body MQTT, Kafka a OpenTelemetry. Další informace najdete v tématu Konfigurace koncových bodů toku dat.

  1. V diagramu toku dat vyberte cílový uzel.
  2. V rozevíracím seznamu Podrobnosti o koncovém bodu toku dat vyberte požadovaný koncový bod toku dat.
  3. Vyberte Pokračovat a nakonfigurujte cíl.
  4. Zadejte požadovaná nastavení cíle, včetně tématu nebo tabulky pro odeslání dat. Cílové pole dat se automaticky interpretuje na základě typu koncového bodu. Pokud je například koncovým bodem toku dat koncový bod MQTT, zobrazí se na stránce podrobností cíle výzva k zadání tématu.

Připojení uzlů

Připojení uzlů definují cestu toku dat mezi uzly. Každé připojení určuje zdrojový uzel a cílový uzel a vytváří kanál zpracování. Připojení můžou volitelně zahrnovat ověření schématu, aby se zajistila integrita dat mezi fázemi zpracování.

Když zadáte ověřování schématu, systém ověří formát a strukturu dat při toku mezi uzly. Ověřování pomáhá včas zachytit nekonzistence dat a zajišťuje, aby moduly WASM přijímaly data v očekávaném formátu.

Provozní prostředí automaticky vytvoří připojení uzlů při výběru uzlu zpracování grafu. Po vytvoření grafu není možné upravit připojení.

Koncové body toku dat

Grafy toku dat se připojují k externím systémům prostřednictvím koncových bodů toku dat. Typ koncového bodu určuje, jestli se dá použít jako zdroj, cíl nebo obojí:

Koncové body MQTT

Koncové body MQTT můžou sloužit jako zdroje i cíle. Připojují se ke zprostředkovatelů MQTT, mezi které patří:

  • Místní zprostředkovatel MQTT provozu Azure IoT (vyžadovaný v každém toku dat)
  • Azure Event Grid MQTT
  • Vlastní zprostředkovatelé MQTT

Podrobné informace o konfiguraci najdete v tématu Konfigurace koncových bodů toku dat MQTT.

Koncové body Kafka

Koncové body Kafka můžou sloužit jako zdroje i cíle. Připojují se k systémům kompatibilním se systémem Kafka, včetně:

  • Azure Event Hubs (kompatibilní se systémem Kafka)
  • Clustery Apache Kafka
  • Confluent Cloud

Podrobné informace o konfiguraci najdete v tématu Konfigurace koncových bodů toku dat Azure a Kafka.

Koncové body úložiště

Koncové body úložiště můžou sloužit jenom jako cíle. Připojují se k systémům cloudového úložiště pro dlouhodobé uchovávání a analýzu dat:

  • Azure Data Lake Storage
  • Microsoft Fabric OneLake
  • Místní úložiště

Koncové body úložiště obvykle vyžadují nastavení výstupního schématu k definování formátu serializace dat.

Koncové body registru

Koncové body registru poskytují přístup k registrům kontejnerů pro vyžádání modulů WASM a definic grafů. Nepoužívají se přímo v toku dat, ale uzly zpracování grafu na ně odkazují.

Podrobné informace o konfiguraci najdete v tématu Konfigurace koncových bodů registru.