Monitorare, diagnosticare e risolvere i problemi di connettività dei dispositivi hub IoT di Azure

I problemi di connettività per i dispositivi IoT possono essere difficili da risolvere poiché sono presenti diversi possibili punti di errore. La logica dell'applicazione, le reti fisiche, i protocolli, l'hardware, l'hub IoT e altri servizi cloud sono tutti elementi che possono causare problemi. La capacità di rilevare e individuare l'origine di un problema è fondamentale. Tuttavia, una soluzione IoT su larga scala potrebbe avere migliaia di dispositivi, pertanto controllare manualmente ogni singolo dispositivo non sarebbe pratico. hub IoT si integra con due servizi di Azure che consentono di:

  • Monitoraggio di Azure di Monitoraggio di Azure consente di raccogliere, analizzare e agire sui dati di telemetria da hub IoT. Per agevolare l'individuazione, la diagnosi e la risoluzione di questi problemi su larga scala, è possibile usare le funzionalità di monitoraggio offerte dall'hub IoT tramite Monitoraggio di Azure. Ciò include la configurazione degli avvisi per attivare notifiche e azioni in presenza di disconnessioni, oltre alla configurazione dei log che è possibile utilizzare per individuare le condizioni che hanno causato le disconnessioni.

  • Griglia di eventi di Azure Per l'infrastruttura critica e le disconnessioni per dispositivo, usare Griglia di eventi di Azure per sottoscrivere gli eventi di connessione e disconnessione dei dispositivi generati da hub IoT. Griglia di eventi di Azure consente di usare uno dei gestori degli eventi seguenti:

    • Funzioni di Azure
    • App per la logica
    • Azure Automation
    • WebHook
    • Archiviazione code
    • Connessioni ibride
    • Hub eventi

Confronto tra Griglia di eventi e Monitoraggio di Azure

Griglia di eventi offre una soluzione di monitoraggio per dispositivo a bassa latenza, che è possibile utilizzare per tenere traccia delle connessioni dei dispositivi e delle infrastrutture critiche. Monitoraggio di Azure fornisce una metrica denominata Dispositivi connessi, che è possibile utilizzzare per monitorare il numero di dispositivi connessi a hub IoT e attivare un avviso, quando tale numero scende al di sotto di una soglia statica.

Quando si decide se utilizzare Griglia di eventi o Monitoraggio di Azure per uno scenario specifico, tenere presente quanto segue:

  • Latenza dell'avviso: Gli eventi di connessione di hub IoT vengono distribuiti molto più rapidamente tramite Griglia di eventi. In questo modo, Griglia di eventi rappresenta una scelta migliore per gli scenari in cui è consigliabile una notifica rapida.

  • Notifiche per dispositivo: Griglia di eventi consente di tenere traccia delle connessioni e delle disconnessioni per i singoli dispositivi. In questo modo, Griglia di eventi rappresenta una scelta migliore per gli scenari in cui è necessario monitorare le connessioni per i dispositivi critici.

  • Configurazione semplificata: Gli avvisi delle metriche di Monitoraggio di Azure offrono un'esperienza di configurazione semplice che non richiede l'integrazione con altri servizi per il recapito di notifiche tramite posta elettronica, SMS, voce e altre notifiche. Con Griglia di eventi è necessario integrarsi con altri servizi di Azure per il recapito delle notifiche. Entrambi i servizi possono integrarsi con altri per l'attivazione di azioni più complesse.

Griglia di eventi: Monitorare gli eventi di connessione e disconnessione

Per monitorare gli eventi di connessione e disconnessione del dispositivo nell'ambiente di produzione, è consigliabile sottoscrivere gli eventi Device Connessione ed e DeviceDisconnected in Griglia di eventi per attivare gli avvisi e monitorare lo stato di connessione del dispositivo. Griglia di eventi offre una latenza degli eventi inferiore rispetto a Monitoraggio di Azure e consente di monitorare in base ai singoli dispositivi. Questi fattori rendono Griglia di eventi il metodo preferito per il monitoraggio di dispositivi e infrastrutture critici.

Quando si usa Griglia di eventi per monitorare o attivare avvisi sulle disconnessioni dei dispositivi, assicurarsi di compilare in modo da filtrare le disconnessioni periodiche dovute al rinnovo del token di firma di accesso condiviso nei dispositivi che usano gli SDK di Azure IoT. Per altre informazioni, vedere Comportamento di disconnessione dei dispositivi MQTT con Azure IoT SDK.

Per altre informazioni sul monitoraggio degli eventi di connessione dei dispositivi con Griglia di eventi, vedere gli articoli seguenti:

Monitoraggio di Azure: Instradare gli eventi di connessione ai log

Hub IoT genera continuamente i log delle risorse per varie categorie di operazioni. Per raccogliere questi dati di log, tuttavia, è necessario creare un'impostazione di diagnostica per instradarla a una destinazione in cui può essere analizzata o archiviata. Una di queste destinazioni è Log di Monitoraggio di Azure tramite un'area di lavoro Log Analytics (vedere i prezzi), in cui è possibile analizzare i dati usando query Kusto.

La categoria di connessioni dei log delle risorse hub IoT genera operazioni ed errori che hanno a che fare con le connessioni del dispositivo. Lo screenshot seguente mostra un'impostazione di diagnostica per indirizzare questi log a un'area di lavoro Log Analytics:

Impostazione consigliata per inviare i log di connettività all'area di lavoro Log Analytics.

È consigliabile creare un'impostazione di diagnostica il prima possibile dopo aver creato l'hub IoT, perché, anche se hub IoT genera sempre i log delle risorse, non vengono raccolti da Monitoraggio di Azure finché non vengono indirizzati a una destinazione.

Per altre informazioni sul routing dei log a una destinazione, vedere Raccolta e routing. Per istruzioni dettagliate sulla creazione di un'impostazione di diagnostica, vedere l'esercitazione Usare metriche e log.

Monitoraggio di Azure: Configurare gli avvisi delle metriche per le disconnessioni dei dispositivi

È possibile configurare gli avvisi in base alle metriche della piattaforma generate da hub IoT. Con gli avvisi delle metriche, si può notificare agli utenti che si è verificata una condizione di interesse e attivare persino azioni che possono rispondere automaticamente a tale condizione.

La metrica dei dispositivi Connessione (anteprima) indica quanti dispositivi sono connessi al hub IoT. È possibile creare avvisi da attivare se questa metrica scende al di sotto di un valore soglia:

Impostazioni della logica di avviso per la metrica dei dispositivi connessi.

È possibile usare le regole di avviso delle metriche per monitorare le anomalie di disconnessione del dispositivo su larga scala. Ovvero, ciò permette di utilizzare gli avvisi per determinare quando un numero significativo di dispositivi si disconnette in modo imprevisto. Quando tale situazione viene rilevata, è possibile esaminare i log per risolvere il problema. Per monitorare le disconnessioni e le disconnessioni per i dispositivi critici in tempo quasi reale, è tuttavia necessario usare Griglia di eventi.

Per altre informazioni sugli avvisi con hub IoT, vedere Avvisi in Monitoraggio hub IoT. Per una procedura dettagliata sulla creazione di avvisi in hub IoT, vedere l'esercitazione Usare metriche e log. Per una panoramica più dettagliata degli avvisi, vedere Panoramica degli avvisi in Microsoft Azure nella documentazione di Monitoraggio di Azure.

Monitoraggio di Azure: Usare i log per risolvere gli errori di connettività

Quando si rilevano le disconnessioni dei dispositivi usando gli avvisi delle metriche di Monitoraggio di Azure o Griglia di eventi, è possibile utilizzare i log per risolvere il problema. La sezione seguente descrive come individuare i problemi comuni nei log di Monitoraggio di Azure. La procedura seguente presuppone che sia già stata creata un'impostazione di diagnostica per inviare i log hub IoT Connessione ions a un'area di lavoro Log Analytics.

Dopo aver creato un'impostazione di diagnostica per instradare i log delle risorse hub IoT ai log di Monitoraggio di Azure, seguire questa procedura per visualizzare i log nel portale di Azure.

  1. Passare all'hub IoT in portale di Azure.

  2. In Monitoraggio nel riquadro sinistro dell'hub IoT selezionare Log.

  3. Per isolare i log degli errori di connettività per hub IoT, immettere la query seguente nell'editor di query e quindi selezionare Esegui:

    AzureDiagnostics
    | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
    
  4. Se sono presenti risultati, cercare OperationName, ResultType (codice di errore) e ResultDescription (messaggio di errore) per ottenere ulteriori dettagli.

    Esempio di log degli errori

Usare le guide alla risoluzione dei problemi seguenti per informazioni sugli errori più comuni:

Monitoraggio di Azure: Usare i log per monitorare la connettività per un dispositivo specifico

Possono verificarsi situazioni in cui si voglia utilizzare Monitoraggio di Azure per visualizzare gli errori di connettività e le informazioni relative a un dispositivo specifico. Per isolare gli eventi di connettività per un dispositivo, è possibile seguire gli stessi passaggi della sezione precedente, immettendo però la query seguente. Sostituire test-device con il nome del dispositivo.

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "test-device"

La query restituisce sia eventi di errore che informativi per il dispositivo di destinazione. L'output di esempio seguente mostra un evento informativo deviceConnect:

Screenshot del dispositivo Connessione eventi nei log.

Comportamento di disconnessione del dispositivo MQTT con Azure IoT SDK per dispositivi

Azure IoT SDK per dispositivi si disconnette da hub IoT e quindi si riconnette quando rinnova i token di firma di accesso condiviso tramite il protocollo MQTT (e MQTT su WebSockets). Nei log, ciò si manifesta come eventi informativi di disconnessione e connessione del dispositivo, talvolta accompagnati da eventi di errore.

Per impostazione predefinita, la durata del token è di 60 minuti per tutti gli SDK. Tuttavia, in alcuni SDK, la durata può essere modificata dagli sviluppatori. La tabella seguente riepiloga la durata del token, il rinnovo dei token e il comportamento di rinnovo dei token per ognuno degli SDK:

SDK Durata del token Rinnovo del token Comportamento di rinnovo
.NET 60 minuti, configurabile 85% della durata, configurabile L'SDK si disconnette e si riconnette alla durata del token, più un periodo di tolleranza di 10 minuti. Eventi informativi ed errori generati nei log.
Java 60 minuti, configurabile 85% della durata, non configurabile L'SDK si disconnette e si riconnette alla durata del token, più un periodo di tolleranza di 10 minuti. Eventi informativi ed errori generati nei log.
Node.JS 60 minuti, configurabile configurabile L'SDK si disconnette e si riconnette al rinnovo del token. Nei log vengono generati solo gli eventi informativi.
Python 60 minuti, configurabile 120 secondi prima della scadenza L'SDK si disconnette e si riconnette alla durata del token.

Gli screenshot seguenti mostrano il comportamento di rinnovo del token nei log di Monitoraggio di Azure per vari SDK. La durata del token e la soglia di rinnovo sono state modificate rispetto ai valori predefiniti, come indicato.

  • .NET Device SDK con durata del token di 1200 secondi (20 minuti) e rinnovo impostati per il 90% della durata. le disconnessioni si verificano ogni 30 minuti:

    Comportamento di errore per il rinnovo del token tramite MQTT nei log di Monitoraggio di Azure con .NET SDK.

  • Java SDK con una durata di token di 300 secondi (5 minuti) e l'85% predefinito del rinnovo della durata. Le disconnessioni si verificano ogni 15 minuti:

    Comportamento di errore per il rinnovo del token tramite MQTT nei log di Monitoraggio di Azure con Java SDK.

  • Node SDK con durata del token di 300 secondi (5 minuti) e rinnovo del token impostato su 3 minuti. Le disconnessioni si verificano durante il rinnovo del token. Inoltre, non ci sono errori, vengono generati solo eventi di connessione/disconnessione informativi:

    Comportamento di errore per il rinnovo del token tramite MQTT nei log di Monitoraggio di Azure con Node SDK.

La query seguente è stata usata per raccogliere i risultati. La query estrae il nome e la versione dell'SDK dal contenitore delle proprietà. Per altre informazioni, vedere Versione dell'SDK nei log di hub IoT.

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend parsed_json = parse_json(properties_s)
| extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId) , Protocol =  tostring(parsed_json.protocol)
| distinct TimeGenerated, OperationName, Level, ResultType, ResultDescription, DeviceId, Protocol, SDKVersion

Gli sviluppatori o gli operatori di soluzioni IoT devono essere consapevoli di questo comportamento per interpretare gli eventi di connessione/disconnessione e gli errori correlati nei log. Se si vuole modificare la durata del token o il comportamento di rinnovo dei dispositivi, verificare se il dispositivo implementa un'impostazione del dispositivo gemello o un metodo del dispositivo che renda possibile questa operazione.

Se si monitora le connessioni dei dispositivi con Hub eventi, assicurarsi di compilare in modo da filtrare le disconnessioni periodiche, a causa del rinnovo del token di firma di accesso condiviso. Ad esempio, non attivare azioni in base alle disconnessioni, finché l'evento di disconnessione è seguito da un evento di connessione entro un determinato intervallo di tempo.

Nota

L'hub IoT supporta solo una connessione MQTT attiva per ogni dispositivo. Qualsiasi nuova connessione MQTT per conto dello stesso ID di dispositivo causa la perdita della connessione esistente da parte dell'hub IoT.

400027 Connessione ionForcefullyClosedOnNew Connessione ion verrà registrato nei log di hub IoT

L'esecuzione della procedura non ha risolto il problema

Se il problema persiste anche dopo l'esecuzione dei passaggi descritti sopra, provare le soluzioni seguenti:

Passaggi successivi