Soluzioni ai problemi comuni per Azure IoT Edge

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato EOL (End of Life, fine del ciclo di vita). Valutare le proprie esigenze e pianificare di conseguenza. Per ulteriori informazioni, consultare la Guida alla fine del ciclo di vita di CentOS.

Si applica a:Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS è di fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

Usare questo articolo per identificare e risolvere i problemi comuni quando si usano soluzioni IoT Edge. Se sono necessarie informazioni su come trovare log ed errori dal dispositivo IoT Edge, vedere Risolvere i problemi del dispositivo IoT Edge.

Provisioning e distribuzione

Il modulo di IoT Edge esegue correttamente la distribuzione e quindi scompare dal dispositivo

Sintomi

Dopo aver impostato i moduli per un dispositivo IoT Edge, i moduli vengono distribuiti correttamente, ma dopo alcuni minuti scompaiono dal dispositivo e dai dettagli del dispositivo nella portale di Azure. Nel dispositivo potrebbero essere visualizzati anche moduli diversi da quelli definiti.

Causa

Se una distribuzione automatica è destinata a un dispositivo, assume la priorità rispetto all'impostazione manuale dei moduli per un singolo dispositivo. La funzionalità Set modules in portale di Azure o Create deployment for single device functionality in Visual Studio Code ha effetto per un momento. Vengono visualizzati i moduli definiti per l'avvio nel dispositivo. La priorità della distribuzione automatica inizia quindi e sovrascrive le proprietà desiderate del dispositivo.

Soluzione

Usare un solo tipo di meccanismo di distribuzione per dispositivo, ovvero una distribuzione automatica o singole distribuzioni di dispositivi. Se sono presenti più distribuzioni automatiche destinate a un dispositivo, è possibile modificare la priorità o le descrizioni di destinazione per assicurarsi che quello corretto si applichi a un determinato dispositivo. È anche possibile aggiornare il dispositivo gemello in modo che non corrisponda più alla descrizione di destinazione della distribuzione automatica.

Per altre informazioni, vedere Informazioni sulle distribuzioni automatiche di IoT Edge per singoli dispositivi o su vasta scala.

Runtime IoT Edge

L'agente IoT Edge si arresta dopo un minuto

Sintomi

Il modulo edgeAgent viene avviato ed eseguito correttamente per circa un minuto, quindi si arresta. I log indicano che l'agente IoT Edge tenta di connettersi a hub IoT tramite AMQP e quindi tenta di connettersi usando AMQP su WebSocket. In caso di errore, l'agente di IoT Edge viene chiuso.

Log edgeAgent di esempio:

2017-11-28 18:46:19 [INF] - Starting module management agent.
2017-11-28 18:46:19 [INF] - Version - 1.0.7516610 (03c94f85d0833a861a43c669842f0817924911d5)
2017-11-28 18:46:19 [INF] - Edge agent attempting to connect to IoT Hub via AMQP...
2017-11-28 18:46:49 [INF] - Edge agent attempting to connect to IoT Hub via AMQP over WebSocket...

Causa

Una configurazione di rete nella rete host impedisce all'agente IoT Edge di raggiungere la rete. L'agente prova prima a connettersi tramite AMQP (porta 5671). Se la connessione non riesce, prova WebSocket (porta 443).

Il runtime di IoT Edge configura una rete per ognuno dei moduli usati per la comunicazione. In Linux questa rete è una rete di bridge. In Windows si usa la rete NAT. Questo problema è più comune nei dispositivi Windows con contenitori Windows che usano la rete NAT.

Soluzione

Assicurarsi che sia presente una route a Internet per gli indirizzi IP assegnati a questa rete bridge/NAT. Talvolta una configurazione VPN nell'host esegue l'override della rete di IoT Edge.

Il modulo dell'agente Edge segnala "file config vuoto" e non vengono avviati moduli nel dispositivo

Sintomi

  • Il dispositivo presenta problemi durante l'avvio dei moduli definiti nella distribuzione. Solo edgeAgent è in esecuzione ma segnala un file di configurazione vuoto...

  • Quando si esegue sudo iotedge check in un dispositivo, segnala che il motore contenitore non è configurato con l'impostazione del server DNS, che può influire sulla connettività a hub IoT. https://aka.ms/iotedge-prod-checklist-dns Vedere per le procedure consigliate.

Causa

  • Per impostazione predefinita, IoT Edge avvia i moduli nella propria rete contenitore isolata. Il dispositivo potrebbe avere problemi con la risoluzione dei nomi DNS all'interno di questa rete privata.
  • Se si usa un'installazione snap di IoT Edge, il file di configurazione Docker è un percorso diverso. Vedere l'opzione 3 della soluzione.

Soluzione

Opzione 1: Impostare il server DNS nelle impostazioni del motore di contenitori

Specificare il server DNS per l'ambiente nelle impostazioni del motore di contenitori, che verranno applicate a tutti i moduli contenitore avviati dal motore. Creare un file denominato daemon.json, quindi specificare il server DNS da usare. Ad esempio:

{
    "dns": ["1.1.1.1"]
}

Questo server DNS è impostato su un servizio DNS accessibile pubblicamente. Tuttavia, alcune reti, ad esempio le reti aziendali, hanno i propri server DNS installati e non consentono l'accesso ai server DNS pubblici. Pertanto, se il dispositivo perimetrale non riesce ad accedere a un server DNS pubblico, sostituirlo con un indirizzo del server DNS accessibile.

Posizionare daemon.json nella directory nel /etc/docker dispositivo.

Se il percorso contiene già un daemon.json file, aggiungere la chiave DNS e salvare il file.

Riavviare il motore del contenitore per rendere effettivi gli aggiornamenti.

sudo systemctl restart docker

Opzione 2: Impostare il server DNS nella distribuzione IoT Edge per modulo

È possibile impostare il server DNS per ogni modulo createOptions nella distribuzione di IoT Edge. Ad esempio:

"createOptions": {
  "HostConfig": {
    "Dns": [
      "x.x.x.x"
    ]
  }
}

Avviso

Se si usa questo metodo e si specifica l'indirizzo DNS errato, edgeAgent perde la connessione con hub IoT e non può ricevere nuove distribuzioni per risolvere il problema. Per risolvere questo problema, è possibile reinstallare il runtime di IoT Edge. Prima di installare una nuova istanza di IoT Edge, assicurarsi di rimuovere tutti i contenitori edgeAgent dall'installazione precedente.

Assicurarsi di impostare questa configurazione anche per i moduli edgeAgent e edgeHub .

Opzione 3: Passare il percorso del file di configurazione docker per controllare il comando

Se IoT Edge è installato come snap, usare il --container-engine-config-file parametro per specificare il percorso del file di configurazione Docker. Ad esempio, se il file di configurazione Docker si trova in /var/snap/docker/current/config/daemon.json, eseguire il comando seguente: iotedge check --container-engine-config-file '/var/snap/docker/current/config/daemon.json'.

Attualmente, il messaggio di avviso continua a essere visualizzato nell'output del controllo iotedge anche dopo aver impostato il percorso del file di configurazione. Controllare segnala l'errore perché lo snap IoT Edge non ha accesso in lettura allo snap Docker. Se si usa il controllo iotedge nel processo di rilascio, è possibile eliminare il messaggio di avviso usando il --ignore container-engine-dns container-engine-logrotate parametro .

Il modulo Agente Edge con connessione LTE segnala "configurazione dell'agente perimetrale vuoto" e genera "errore di rete temporaneo"

Sintomi

Un dispositivo configurato con la connessione LTE presenta problemi di avvio dei moduli definiti nella distribuzione. EdgeAgent non è in grado di connettersi al hub IoT e segnala che si è verificato un errore di rete temporanea e configurazione dell'agente perimetrale vuoto.

Causa

Alcune reti hanno un sovraccarico di pacchetti, che rende la rete Docker predefinita MTU (1500) troppo elevata e causa la frammentazione dei pacchetti che impedisce l'accesso alle risorse esterne.

Soluzione

  1. Controllare l'impostazione MTU per la rete Docker.

    docker network inspect <network name>

  2. Controllare l'impostazione MTU per l'adattatore di rete fisica nel dispositivo.

    ip addr show eth0

Nota

L'MTU per la rete Docker non può essere superiore alla MTU per il dispositivo. Per altre informazioni, contattare l'ISP.

Se viene visualizzata una dimensione MTU diversa per la rete Docker e il dispositivo, provare la soluzione alternativa seguente:

  1. Creare una nuova rete. ad esempio:

    docker network create --opt com.docker.network.driver.mtu=1430 test-mtu

    Nell'esempio l'impostazione MTU per il dispositivo è 1430. Di conseguenza, la MTU per la rete Docker è impostata su 1430.

  2. Arrestare e rimuovere la rete di Azure.

    docker network rm azure-iot-edge

  3. Ricreare la rete di Azure.

    docker network create --opt com.docker.network.driver.mtu=1430 azure-iot-edge

  4. Rimuovere tutti i contenitori e riavviare il servizio aziot-edged .

    sudo iotedge system stop && sudo docker rm -f $(docker ps -aq -f "label=net.azure-devices.edge.owner=Microsoft.Azure.Devices.Edge.Agent") && sudo iotedge config apply

L'agente di IoT Edge non può accedere all'immagine di un modulo (403)

Sintomi

Un contenitore non viene eseguito e i log edgeAgent segnalano un errore 403.

Causa

Il modulo agente IoT Edge non dispone delle autorizzazioni per accedere all'immagine di un modulo.

Soluzione

Assicurarsi che le credenziali del registro contenitori siano corrette nel manifesto della distribuzione del dispositivo.

L'agente IoT Edge effettua chiamate di identità eccessive

Sintomi

L'agente IoT Edge effettua chiamate di identità eccessive a hub IoT di Azure.

Causa

La configurazione errata del manifesto della distribuzione del dispositivo causa una distribuzione non riuscita nel dispositivo. La logica di ripetizione dei tentativi dell'agente IoT Edge continua a ripetere la distribuzione. Ogni tentativo effettua chiamate di identità fino a quando la distribuzione non riesce. Ad esempio, se il manifesto della distribuzione specifica un URI del modulo che non esiste nel registro contenitori o viene digitato in modo non corretto, l'agente IoT Edge ritenta la distribuzione fino a quando il manifesto della distribuzione non viene corretto.

Soluzione

Verificare il manifesto della distribuzione nel portale di Azure. Correggere eventuali errori e ridistribuire il manifesto nel dispositivo.

L'hub di IoT Edge non si avvia

Sintomi

L'avvio del modulo edgeHub non riesce. Nei log potrebbe essere visualizzato un messaggio simile a uno degli errori seguenti:

One or more errors occurred.
(Docker API responded with status code=InternalServerError, response=
{\"message\":\"driver failed programming external connectivity on endpoint edgeHub (6a82e5e994bab5187939049684fb64efe07606d2bb8a4cc5655b2a9bad5f8c80):
Error starting userland proxy: Bind for 0.0.0.0:443 failed: port is already allocated\"}\n)

O

info: edgelet_docker::runtime -- Starting module edgeHub...
warn: edgelet_utils::logging -- Could not start module edgeHub
warn: edgelet_utils::logging --     caused by: failed to create endpoint edgeHub on network nat: hnsCall failed in Win32:
        The process cannot access the file because it is being used by another process. (0x20)

Causa

Un altro processo nel computer host ha associato una porta che il modulo edgeHub sta tentando di associare. L'hub IoT Edge esegue il mapping delle porte 443, 5671 e 8883 per l'uso in scenari di gateway. Il modulo non viene avviato se un altro processo ha già associato una di queste porte.

Soluzione

È possibile risolvere questo problema in due modi:

Se il dispositivo IoT Edge funziona come dispositivo gateway, è necessario trovare e arrestare il processo che usa la porta 443, 5671 o 8883. Un errore per la porta 443 indica in genere che l'altro processo è un server Web.

Se non è necessario usare il dispositivo IoT Edge come gateway, è possibile rimuovere le associazioni di porte dalle opzioni di creazione del modulo edgeHub. È possibile modificare le opzioni di creazione nel portale di Azure o direttamente nel file di deployment.json.

Nel portale di Azure:

  1. Passare all'hub IoT e selezionare Dispositivi nel menu Gestione dei dispositivi .

  2. Selezionare il dispositivo IoT Edge da aggiornare.

  3. Selezionare Set Modules (Configura i moduli).

  4. Selezionare Runtime Impostazioni.

  5. Nelle impostazioni del modulo Hub Edge eliminare tutti gli elementi dalla casella di testo Opzioni di creazione del contenitore.

  6. Selezionare Applica per salvare le modifiche e creare la distribuzione.

Nel file deployment.json:

  1. Aprire il file deployment.json applicato al dispositivo IoT Edge.

  2. Trovare le impostazioni nella sezione edgeAgent desired properties :Find the edgeHub settings in the edgeAgent desired properties section:

      "edgeHub": {
          "restartPolicy": "always",
          "settings": {
             "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
             "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
          },
          "status": "running",
          "type": "docker"
       }
    
  3. Rimuovere la createOptions riga e la virgola finale alla fine della image riga prima di essa:

      "edgeHub": {
          "restartPolicy": "always",
          "settings": {
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
          "status": "running",
          "type": "docker"
    }
    
  4. Selezionare Crea per applicarlo di nuovo al dispositivo IoT Edge.

Il modulo IoT Edge non riesce a inviare un messaggio a edgeHub con errore 404

Sintomi

Un modulo IoT Edge personalizzato non riesce a inviare un messaggio all'hub IoT Edge con un errore 404 Module not found . Il runtime di IoT Edge stampa il messaggio seguente nei log:

Error: Time:Thu Jun  4 19:44:58 2018 File:/usr/sdk/src/c/provisioning_client/adapters/hsm_client_http_edge.c Func:on_edge_hsm_http_recv Line:364 executing HTTP request fails, status=404, response_buffer={"message":"Module not found"}u, 04 )

Causa

Il runtime di IoT Edge applica l'identificazione dei processi per tutti i moduli che si connettono a edgeHub per motivi di sicurezza. Verifica che tutti i messaggi inviati da un modulo provengano dall'ID del processo principale del modulo. Se un messaggio viene inviato da un modulo da un ID processo diverso da quello stabilito inizialmente, rifiuta il messaggio con un messaggio di errore 404.

Soluzione

A partire dalla versione 1.0.7, tutti i processi del modulo sono autorizzati a connettersi. Per altre informazioni, vedere il log delle modifiche della versione 1.0.7.

Se l'aggiornamento alla versione 1.0.7 non è possibile, completare la procedura seguente. Verificare che il modulo IoT Edge personalizzato usi sempre lo stesso ID di processo per inviare messaggi a edgeHub. Ad esempio, assicurarsi ENTRYPOINT di invece di CMD usare il comando nel file Docker. Il CMD comando porta a un ID processo per il modulo e un altro ID processo per il comando bash che esegue il programma principale, ma ENTRYPOINT porta a un singolo ID processo.

Problemi di stabilità su dispositivi di dimensioni inferiori

Sintomi

È possibile che si verifichino problemi di stabilità nei dispositivi vincolati alle risorse, ad esempio Raspberry Pi, soprattutto se usati come gateway. I sintomi includono eccezioni di memoria insufficiente nel modulo dell'hub IoT Edge, i dispositivi downstream che non riescono a connettersi o il dispositivo non riesce a inviare messaggi di telemetria dopo alcune ore.

Causa

L'hub IoT Edge, che fa parte del runtime di IoT Edge, è ottimizzato per le prestazioni per impostazione predefinita e tenta di allocare blocchi di memoria di grandi dimensioni. Questa ottimizzazione non è ideale per i dispositivi perimetrali vincolati e può causare problemi di stabilità.

Soluzione

Per l'hub IoT Edge, impostare una variabile di ambiente OptimizeForPerformance su false. Esistono due modi per impostare le variabili di ambiente:

Nel portale di Azure:

  1. Nella hub IoT selezionare il dispositivo IoT Edge e nella pagina dei dettagli del dispositivo e selezionare Imposta runtime moduli>Impostazioni.

  2. Creare una variabile di ambiente per il modulo hub IoT Edge denominato OptimizeForPerformance con tipo True/False impostato su False.

  3. Selezionare Applica per salvare le modifiche e quindi selezionare Rivedi e crea.

    La variabile di ambiente è ora nella edgeHub proprietà del manifesto della distribuzione:

       "edgeHub": {
          "env": {
                "OptimizeForPerformance": {
                   "value": false
                }
          },
          "restartPolicy": "always",
          "settings": {
                "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
          },
          "status": "running",
          "type": "docker"
       }
    
  4. Selezionare Crea per salvare le modifiche e distribuire il modulo.

Impossibile avviare correttamente il daemon di sicurezza

Sintomi

Il daemon di sicurezza non viene avviato e i contenitori di moduli non vengono creati. I edgeAgentmoduli personalizzati e non edgeHub vengono avviati dal servizio IoT Edge. Nei aziot-edged log viene visualizzato questo errore:

  • Impossibile avviare correttamente il daemon: Non è stato possibile avviare il servizio di gestione
  • causata da: Si è verificato un errore per il percorso /var/run/iotedge/mgmt.sock
  • causata da: Autorizzazione negata (errore del sistema operativo 13)

Causa

Per tutte le distribuzioni Linux ad eccezione di CentOS 7, la configurazione predefinita di IoT Edge consiste nell'usare l'attivazione systemd socket. Si verifica un errore di autorizzazione se si modifica il file di configurazione in modo da non usare l'attivazione socket, ma lasciare gli URL come /var/run/iotedge/*.sock, perché l'utente iotedge non può scrivere in /var/run/iotedge modo che non possa sbloccare e montare i socket stessi.

Soluzione

Non è necessario disabilitare l'attivazione del socket in una distribuzione in cui è supportata l'attivazione del socket. Tuttavia, se si preferisce non usare affatto l'attivazione del socket, inserire i socket in /var/lib/iotedge/.

  1. Eseguire systemctl disable iotedge.socket iotedge.mgmt.socket per disabilitare le unità socket in modo che systemd non li avvii inutilmente
  2. Modificare la configurazione di iotedge da usare /var/lib/iotedge/*.sock in entrambe le connect sezioni e listen
  3. Se si dispone già di moduli, hanno i vecchi /var/run/iotedge/*.sock montaggi, quindi docker rm -f .

Rete

Se il nome host non è valido, l'esecuzione del daemon di sicurezza di IoT Edge ha esito negativo.

Sintomi

Il tentativo di controllare i log di Gestione sicurezza IoT Edge non riesce e visualizza il messaggio seguente:

Error parsing user input data: invalid hostname. Hostname cannot be empty or greater than 64 characters

Causa

Il runtime di IoT Edge può supportare solo nomi host contenenti meno di 64 caratteri. I computer fisici non hanno in genere nomi host lunghi, ma il problema è più comune in una macchina virtuale. I nomi host generati automaticamente per le macchine virtuali Windows ospitate in Azure, in particolare, tendono a essere lunghi.

Soluzione

Quando viene visualizzato questo errore, è possibile risolvere il problema configurando il nome DNS della macchina virtuale e quindi impostando il nome DNS come nome host nel comando di configurazione.

  1. Nel portale di Azure passare alla pagina di panoramica della macchina virtuale.

  2. Aprire il pannello di configurazione selezionando Non configurato (se la macchina virtuale è nuova) in Nome DNS o selezionare il nome DNS esistente. Se la macchina virtuale dispone già di un nome DNS configurato, non è necessario configurarne uno nuovo.

    Screenshot di come aprire il pannello di configurazione del nome DNS.

  3. Specificare un valore per l'etichetta del nome DNS se non ne è già disponibile uno e selezionare Salva.

  4. Copiare il nuovo nome DNS, che deve essere nel formato :
    <DNSnamelabel>.<vmlocation.cloudapp.azure.com>.

  5. Nel dispositivo IoT Edge aprire il file di configurazione.

    sudo nano /etc/aziot/config.toml
    
  6. Sostituire il valore di hostname con il nome DNS.

  7. Salvare e chiudere il file, quindi applicare le modifiche a IoT Edge.

    sudo iotedge config apply
    

Il modulo IoT Edge segnala errori di connettività

Sintomi

I moduli IoT Edge che si connettono direttamente ai servizi cloud, inclusi i moduli di runtime, smettono di funzionare come previsto e restituiscono errori di connessione o di rete.

Causa

I contenitori si basano sull'inoltro di pacchetti IP per connettersi a Internet in modo che possano comunicare con i servizi cloud. L'inoltro di pacchetti IP è abilitato per impostazione predefinita in Docker, ma se viene disabilitato, tutti i moduli che si connettono ai servizi cloud non funzioneranno come previsto. Per altre informazioni, vedere Informazioni sulla comunicazione dei contenitori nella documentazione di Docker.

Soluzione

Usare la procedura seguente per abilitare l'inoltro di pacchetti IP.

  1. Aprire il file sysctl.conf .

    sudo nano /etc/sysctl.conf
    
  2. Aggiungere al file la riga seguente.

    net.ipv4.ip_forward=1
    
  3. Salva e chiudi il file.

  4. Riavviare il servizio di rete e il servizio Docker per applicare le modifiche.

IoT Edge dietro un gateway non può eseguire richieste HTTP e avviare il modulo edgeAgent

Sintomi

Il runtime di IoT Edge è attivo con un file di configurazione valido, ma non può avviare il modulo edgeAgent . Il comando iotedge list restituisce un elenco vuoto. I report Could not perform HTTP request del runtime di IoT Edge nei log.

Causa

I dispositivi IoT Edge dietro un gateway ottengono le immagini del modulo dal dispositivo IoT Edge padre specificato nel parent_hostname campo del file di configurazione. L'errore Could not perform HTTP request indica che il dispositivo downstream non è in grado di raggiungere il dispositivo padre tramite HTTP.

Soluzione

Assicurarsi che il dispositivo IoT Edge padre possa ricevere richieste in ingresso dal dispositivo IoT Edge downstream. Aprire il traffico di rete sulle porte 443 e 6617 per le richieste provenienti dal dispositivo downstream.

IoT Edge dietro un gateway non può eseguire richieste HTTP e avviare il modulo edgeAgent

Sintomi

Il daemon IoT Edge è attivo con un file di configurazione valido, ma non può avviare il modulo edgeAgent. Il comando iotedge list restituisce un elenco vuoto. Il report Could not perform HTTP requestdei log del daemon IoT Edge.

Causa

I dispositivi IoT Edge dietro un gateway ottengono le immagini del modulo dal dispositivo IoT Edge padre specificato nel parent_hostname campo del file di configurazione. L'errore Could not perform HTTP request indica che il dispositivo downstream non è in grado di raggiungere il dispositivo padre tramite HTTP.

Soluzione

Assicurarsi che il dispositivo IoT Edge padre possa ricevere richieste in ingresso dal dispositivo IoT Edge downstream. Aprire il traffico di rete sulle porte 443 e 6617 per le richieste provenienti dal dispositivo downstream.

IoT Edge dietro un gateway non può connettersi durante la migrazione da un hub IoT a un altro

Sintomi

Quando si tenta di eseguire la migrazione di una gerarchia di dispositivi IoT Edge da un hub IoT a un altro, il dispositivo IoT Edge padre di primo livello può connettersi a hub IoT, ma i dispositivi IoT Edge downstream non possono. Report dei log Unable to authenticate client downstream-device/$edgeAgent with module credentials.

Causa

Le credenziali per i dispositivi downstream non sono state aggiornate correttamente quando si è verificata la migrazione al nuovo hub IoT. Per questo motivo, edgeAgent i edgeHub moduli sono stati impostati in modo che abbiano il tipo di autenticazione ( none impostazione predefinita se non impostata in modo esplicito). Durante la connessione, i moduli nei dispositivi downstream usano credenziali precedenti, causando l'esito negativo dell'autenticazione.

Soluzione

Quando si esegue la migrazione al nuovo hub IoT (presupponendo che non usi DPS), seguire questa procedura nell'ordine seguente:

  1. Seguire questa guida per esportare e quindi importare le identità dei dispositivi dall'hub IoT precedente a quella nuova
  2. Riconfigurare tutte le distribuzioni e le configurazioni di IoT Edge nel nuovo hub IoT
  3. Riconfigurare tutte le relazioni tra dispositivi padre-figlio nel nuovo hub IoT
  4. Aggiornare ogni dispositivo in modo che punti al nuovo nome host dell'hub IoT (iothub_hostname in [provisioning] )config.toml
  5. Se si è scelto di escludere le chiavi di autenticazione durante l'esportazione del dispositivo, riconfigurare ogni dispositivo con le nuove chiavi fornite dal nuovo hub IoT (device_id_pk in [provisioning.authentication] )config.toml
  6. Riavviare prima il dispositivo Edge padre di primo livello, assicurarsi che sia operativo
  7. Riavviare ogni dispositivo a livello di gerarchia per livello dall'alto verso il basso

IoT Edge ha una velocità effettiva dei messaggi ridotta quando geograficamente distante da hub IoT

Sintomi

I dispositivi Azure IoT Edge geograficamente distanti da hub IoT di Azure hanno una velocità effettiva dei messaggi inferiore al previsto.

Causa

Una latenza elevata tra il dispositivo e hub IoT può causare una velocità effettiva del messaggio inferiore al previsto. IoT Edge usa una dimensione predefinita del batch di messaggi pari a 10. Questo limita il numero di messaggi inviati in un singolo batch, che aumenta il numero di round trip tra il dispositivo e hub IoT.

Soluzione

Provare ad aumentare la variabile di ambiente MaxUpstreamBatchSize dell'hub IoT Edge. In questo modo è possibile inviare più messaggi in un singolo batch, riducendo così il numero di round trip tra il dispositivo e hub IoT.

Per impostare le variabili di ambiente dell'hub edge di Azure nella portale di Azure:

  1. Passare al hub IoT e selezionare Dispositivi nel menu Gestione dei dispositivi.
  2. Selezionare il dispositivo IoT Edge da aggiornare.
  3. Selezionare Set Modules (Configura i moduli).
  4. Selezionare Runtime Impostazioni.
  5. Nella scheda Impostazioni del modulo Hub Edge aggiungere la variabile di ambiente MaxUpstreamBatchSize come tipo Number con un valore pari a 20.
  6. Selezionare Applica.

Passaggi successivi

Se si ritiene di aver rilevato un bug nella piattaforma di IoT Edge, Inviare un problema in modo da poter migliorare l'esperienza.

In caso di altre domande, creare una Richiesta di supporto per assistenza.