Share via


Risolvere i problemi del dispositivo IoT Edge

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.

Se si verificano problemi durante l'esecuzione di Azure IoT Edge nell'ambiente in uso, usare questo articolo come guida per la risoluzione dei problemi e la diagnostica.

Eseguire il comando 'check'

Il primo passaggio per la risoluzione dei problemi di IoT Edge consiste nell'usare il check comando , che esegue una raccolta di test di configurazione e connettività per problemi comuni. Il check comando è disponibile nella versione 1.0.7 e successive.

Nota

Lo strumento di risoluzione dei problemi non può eseguire controlli di connettività se il dispositivo IoT Edge si trova dietro un server proxy.

È possibile eseguire il check comando come indicato di seguito o includere il --help flag per visualizzare un elenco completo di opzioni:

sudo iotedge check

Lo strumento di risoluzione dei problemi esegue molti controlli ordinati in queste tre categorie:

  • I controlli di configurazione esaminano i dettagli che potrebbero impedire ai dispositivi IoT Edge di connettersi al cloud, inclusi i problemi relativi al file di configurazione e al motore del contenitore.
  • Connessione verifica che il runtime di IoT Edge possa accedere alle porte nel dispositivo host e che tutti i componenti di IoT Edge possano connettersi al hub IoT. Questo set di controlli restituisce errori se il dispositivo IoT Edge si trova dietro un proxy.
  • I controlli di conformità della produzione cercano le procedure consigliate per la produzione, ad esempio lo stato dei certificati dell'autorità di certificazione (CA) del dispositivo e la configurazione del file di log del modulo.

Lo strumento di controllo di IoT Edge usa un contenitore per eseguire la diagnostica. L'immagine del contenitore, mcr.microsoft.com/azureiotedge-diagnostics:latest, è disponibile tramite registro Contenitori Microsoft. Se è necessario eseguire un controllo su un dispositivo senza accesso diretto a Internet, i dispositivi dovranno accedere all'immagine del contenitore.

In uno scenario che usa dispositivi IoT Edge annidati, è possibile accedere all'immagine di diagnostica nei dispositivi downstream eseguendo il pull dell'immagine nei dispositivi padre.

sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:<port_for_api_proxy_module>/azureiotedge-diagnostics:1.2

Per informazioni su ognuno dei controlli di diagnostica eseguiti da questo strumento, incluse le operazioni da eseguire se viene visualizzato un errore o un avviso, vedere Controlli di risoluzione dei problemi di IoT Edge.

Raccogliere informazioni di debug con il comando "support-bundle"

Quando è necessario raccogliere i log da un dispositivo IoT Edge, il modo più pratico consiste nell'usare il support-bundle comando . Per impostazione predefinita, questo comando raccoglie il modulo, lo strumento di gestione della sicurezza di IoT Edge e i log del motore di contenitori, l'output iotedge check JSON e altre informazioni di debug utili. Li comprime in un singolo file per semplificare la condivisione. Il support-bundle comando è disponibile nella versione 1.0.9 e successive.

Eseguire il support-bundle comando con il --since flag per specificare per quanto tempo dal passato si vogliono ottenere i log. Ad esempio 6h , si otterranno i log dalle ultime sei ore, 6d dagli ultimi sei giorni, 6m dagli ultimi sei minuti e così via. Includere il --help flag per visualizzare un elenco completo di opzioni.

sudo iotedge support-bundle --since 6h

Per impostazione predefinita, il support-bundle comando crea un file ZIP denominato support_bundle.zip nella directory in cui viene chiamato il comando. Usare il flag --output per specificare un percorso o un nome di file diverso per l'output.

Per altre informazioni sul comando, visualizzarne le informazioni della Guida.

iotedge support-bundle --help

È anche possibile usare il metodo diretto predefinito UploadSupportBundle per caricare l'output del comando support-bundle in Archiviazione BLOB di Azure.

Avviso

L'output del support-bundle comando può contenere nomi host, dispositivi e moduli, informazioni registrate dai moduli e così via. Tenere presente questo problema se si condivide l'output in un forum pubblico.

Esaminare le metriche raccolte dal runtime

I moduli di runtime di IoT Edge producono metriche che consentono di monitorare e comprendere l'integrità dei dispositivi IoT Edge. Aggiungere il modulo metrics-collector alle distribuzioni per gestire la raccolta di queste metriche e l'invio al cloud per semplificare il monitoraggio.

Per altre informazioni, vedere Raccogliere e trasportare le metriche.

Controllare la versione di IoT Edge

Se si sta eseguendo una versione precedente di IoT Edge, l'aggiornamento può risolvere il problema. Lo iotedge check strumento verifica che il daemon di sicurezza di IoT Edge sia la versione più recente, ma non controlla le versioni dei moduli dell'hub di IoT Edge e dell'agente. Per controllare la versione dei moduli di runtime nel dispositivo, usare i iotedge logs edgeAgent comandi e iotedge logs edgeHub. Il numero di versione è dichiarato nei log all'avvio del modulo.

Per istruzioni su come aggiornare il dispositivo, vedere Aggiornare il daemon di sicurezza e il runtime di IoT Edge.

Verificare l'installazione di IoT Edge nei dispositivi

È possibile verificare l'installazione di IoT Edge nei dispositivi monitorando il modulo gemello edgeAgent.

Per ottenere il modulo gemello edgeAgent più recente, eseguire il comando seguente da Azure Cloud Shell:

az iot hub module-twin show --device-id <edge_device_id> --module-id '$edgeAgent' --hub-name <iot_hub_name>

Questo comando restituirà tutte le proprietà segnalate di edgeAgent. Ecco alcuni utili che monitorano lo stato del dispositivo:

  • stato di runtime
  • ora di inizio del runtime
  • Ora dell'ultima uscita del runtime
  • numero di riavvii di runtime

Controllare lo stato del gestore della sicurezza di IoT Edge e dei relativi log

Il responsabile della sicurezza di IoT Edge è responsabile di operazioni come l'inizializzazione del sistema IoT Edge all'avvio e al provisioning dei dispositivi. Se IoT Edge non viene avviato, i log di Gestione sicurezza possono fornire informazioni utili.

  • Visualizzare lo stato dei servizi di sistema IoT Edge:

    sudo iotedge system status
    
  • Visualizzare i log dei servizi di sistema IoT Edge:

    sudo iotedge system logs -- -f
    
  • Abilitare i log a livello di debug per visualizzare log più dettagliati dei servizi di sistema IoT Edge:

    1. Abilitare i log a livello di debug.

      sudo iotedge system set-log-level debug
      sudo iotedge system restart
      
    2. Tornare ai log predefiniti a livello di informazioni dopo il debug.

      sudo iotedge system set-log-level info
      sudo iotedge system restart
      

Controllare i log dei contenitori per eventuali problemi

Quando il daemon di sicurezza di IoT Edge è in esecuzione, esaminare i log dei contenitori per rilevare i problemi. Iniziare con i contenitori distribuiti, quindi esaminare i contenitori che costituiscono il runtime di IoT Edge: edgeAgent e edgeHub. I log dell'agente IoT Edge in genere forniscono informazioni sul ciclo di vita di ogni contenitore. I log dell'hub IoT Edge forniscono informazioni sulla messaggistica e sul routing.

È possibile recuperare i log dei contenitori da diverse posizioni:

Pulire i log dei contenitori

Per impostazione predefinita, il motore del contenitore Moby non imposta i limiti delle dimensioni del log dei contenitori. Nel corso del tempo, i log estesi possono causare il riempimento del dispositivo con i log e l'esaurimento dello spazio su disco. Se i log dei contenitori di grandi dimensioni influiscono sulle prestazioni del dispositivo IoT Edge, usare il comando seguente per forzare la rimozione del contenitore insieme ai log correlati.

Se si sta ancora eseguendo la risoluzione dei problemi, attendere fino a quando non sono stati esaminati i log del contenitore per eseguire questo passaggio.

Avviso

Se si forza la rimozione del contenitore edgeHub mentre è presente un backlog dei messaggi non recapitati e nessuna risorsa di archiviazione host configurata, i messaggi non recapitati andranno persi.

docker rm --force <container name>

Per gli scenari di manutenzione e produzione dei log in corso, configurare il driver di registrazione predefinito.

Visualizzare i messaggi che passano attraverso l'hub IoT Edge

È possibile visualizzare i messaggi che passano attraverso l'hub IoT Edge e raccogliere informazioni dettagliate dai log dettagliati dai contenitori di runtime. Per attivare i log dettagliati in questi contenitori, impostare la RuntimeLogLevel variabile di ambiente nel manifesto della distribuzione.

Per visualizzare i messaggi che passano attraverso l'hub IoT Edge, impostare la RuntimeLogLevel variabile di ambiente su debug per il modulo edgeHub.

Entrambi i moduli edgeHub e edgeAgent hanno questa variabile di ambiente del log di runtime, con il valore predefinito impostato su info. Questa variabile di ambiente può accettare i valori seguenti:

  • fatal
  • Errore
  • warning
  • info
  • debug
  • verbose

È anche possibile controllare i messaggi inviati tra i dispositivi hub IoT e IoT. Visualizzare questi messaggi usando l'estensione hub IoT di Azure per Visual Studio Code. Per altre informazioni, vedere Handy tool when you develop with Azure IoT (Strumento utile quando si sviluppa con Azure IoT).

Riavviare i contenitori

Dopo aver esaminato i log e i messaggi per informazioni, è possibile provare a riavviare i contenitori.

Nel dispositivo IoT Edge usare i comandi seguenti per riavviare i moduli:

iotedge restart <container name>

Riavviare i contenitori di runtime di IoT Edge:

iotedge restart edgeAgent && iotedge restart edgeHub

È anche possibile riavviare i moduli in modalità remota dal portale di Azure. Per altre informazioni, vedere Monitorare e risolvere i problemi dei dispositivi IoT Edge dal portale di Azure.

Controllare le regole di configurazione del firewall e della porta

Azure IoT Edge consente la comunicazione da un server locale al cloud di Azure usando protocolli di hub IoT supportati, vedere Scelta di un protocollo di comunicazione. Per una maggiore sicurezza, i canali di comunicazione tra Azure IoT Edge e hub IoT di Azure sono sempre configurati per essere in uscita. Questa configurazione si basa sul modello di comunicazione assistita dei servizi, che consente di ridurre la superficie di attacco esplorabile da un'entità dannosa. La comunicazione in ingresso è necessaria solo per scenari specifici in cui hub IoT di Azure deve eseguire il push dei messaggi nel dispositivo Azure IoT Edge. I messaggi da cloud a dispositivo sono protetti tramite canali sicuri TLS e possono essere protetti ulteriormente tramite certificati X.509 e moduli di dispositivo TPM. Il gestore sicurezza di Azure IoT Edge stabilisce come attivare la comunicazione, vedere Gestore sicurezza di Azure IoT Edge.

Anche se IoT Edge offre una configurazione avanzata per la protezione del runtime di Azure IoT Edge e dei moduli distribuiti, dipende comunque dalla configurazione di rete e del computer sottostante. Di conseguenza, è fondamentale assicurarsi che siano configurate regole di rete e firewall appropriate per la comunicazione tra dispositivi perimetrali sicuri e cloud. La tabella seguente può essere usata come linea guida quando le regole del firewall di configurazione per i server sottostanti in cui è ospitato il runtime di Azure IoT Edge:

Protocollo Port In ingresso In uscita Indicazioni
MQTT 8883 BLOCCATO (impostazione predefinita) BLOCCATO (impostazione predefinita)
  • Configurare i dati in uscita in modo che siano Aperti quando si usa MQTT come protocollo di comunicazione.
  • 1883 per MQTT non è supportato da IoT Edge.
  • Le connessioni in ingresso devono essere bloccate.
AMQP 5671 BLOCCATO (impostazione predefinita) APERTO (impostazione predefinita)
  • Protocollo di comunicazione predefinito per IoT Edge.
  • Deve essere configurato per essere Aperto se Azure IoT Edge non è configurato per altri protocolli supportati o AMQP è il protocollo di comunicazione desiderato.
  • 5672 per AMQP non è supportato da IoT Edge.
  • Bloccare questa porta quando Azure IoT Edge usa un protocollo supportato dall'hub IoT diverso.
  • Le connessioni in ingresso devono essere bloccate.
HTTPS 443 BLOCCATO (impostazione predefinita) APERTO (impostazione predefinita)
  • Configurare le connessioni in uscita come Aperto sulla porta 443 per il provisioning di IoT Edge. Questa configurazione è necessaria quando si usano script manuali o il servizio Device Provisioning di Azure IoT.
  • La connessione in ingresso (in ingresso) deve essere Aperta solo per scenari specifici:
    • Se si dispone di un gateway trasparente con dispositivi downstream che possono inviare richieste di metodo. In questo caso, la porta 443 non deve essere aperta alle reti esterne per connettersi a IoTHub o fornire servizi IoTHub tramite Azure IoT Edge. Pertanto, la regola in ingresso potrebbe essere limitata all'apertura solo in ingresso dalla rete interna.
    • Per scenari da client a dispositivo (C2D).
  • 80 per HTTP non è supportato da IoT Edge.
  • Se i protocolli non HTTP (ad esempio, AMQP o MQTT) non possono essere configurati nell'organizzazione; i messaggi possono essere inviati tramite WebSocket. In questo caso, la porta 443 verrà usata per la comunicazione WebSocket.

Ultima risorsa: arrestare e ricreare tutti i contenitori

In alcuni casi, un sistema potrebbe richiedere modifiche speciali significative per funzionare con vincoli di rete o del sistema operativo esistenti. Ad esempio, un sistema potrebbe richiedere un montaggio del disco dati e impostazioni proxy diverse. Se si sono provato tutti i passaggi precedenti e si verificano ancora errori del contenitore, le cache di sistema Docker o le impostazioni di rete persistenti potrebbero non essere aggiornate con la riconfigurazione più recente. In questo caso, l'ultima opzione di risorsa consiste nell'usare docker prune un inizio pulito da zero.

Il comando seguente arresta il sistema IoT Edge (e quindi tutti i contenitori), usa l'opzione "all" e "volume" per docker prune rimuovere tutti i contenitori e i volumi. Esaminare l'avviso che il comando emette e conferma con y quando è pronto.

sudo iotedge system stop
docker system prune --all --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

Avviare di nuovo il sistema. Per essere sicuri, applicare qualsiasi configurazione potenzialmente rimanente e avviare il sistema con un solo comando.

sudo iotedge config apply

Attendere alcuni minuti e riprovare.

sudo iotedge list

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.