Monitorare, diagnosticare e risolvere i problemi di connettività dei dispositivi dell'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. L'hub IoT si integra con due servizi di Azure che consentono di:
Monitoraggio di Azure: Monitoraggio di Azure consente di raccogliere, analizzare e agire sui dati di telemetria dall'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. Questo approccio include la configurazione degli avvisi per attivare notifiche e azioni quando si verificano le disconnessioni e la configurazione dei log che è possibile usare per individuare le condizioni che hanno causato la disconnessione.
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 dall'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 usare Griglia di eventi o Monitoraggio di Azure per uno scenario specifico, prendere in considerazione lo scenario seguente:
Latenza dell'avviso: Gli eventi di connessione di hub IoT vengono distribuiti molto più rapidamente tramite Griglia di eventi. Questo rende Griglia di eventi 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. Questo rende Griglia di eventi 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 DeviceConnected e DeviceDisconnected in Griglia di eventi per attivare 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 l’SDK Azure IoT.
Per altre informazioni sul monitoraggio degli eventi di connessione dei dispositivi con Griglia di eventi, vedere gli articoli seguenti:
Per una panoramica dell'uso di Griglia di eventi con l'hub IoT, vedere Reagire agli eventi dell'hub IoT con Griglia di eventi. Prestare particolare attenzione alla sezione Limitazioni per gli eventi dello stato della connessione del dispositivo.
Per un'esercitazione sull'ordinamento degli eventi di connessione del dispositivo, vedere Ordinare gli eventi di connessione del dispositivo dall'hub IoT di Azure con Azure Cosmos DB.
Per un'esercitazione sull'invio di notifiche tramite posta elettronica, vedere Inviare notifiche tramite posta elettronica sugli eventi dell'hub IoT di Azure usando Griglia di eventi e App per la logica nella documentazione di Griglia di eventi.
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 delle connessioni dell'hub IoT a un'area di lavoro Log Analytics.
Dopo aver creato un'impostazione di diagnostica per instradare i log delle risorse dell'hub IoT ai log di Monitoraggio di Azure, seguire questa procedura per visualizzare i log nel portale di Azure.
Nel portale di Azure passare all'hub IoT.
Selezionare Log in Monitoraggio nel riquadro sinistro dell'hub IoT.
Per isolare i log degli errori di connettività per l'hub IoT, immettere la query seguente nell’editor di query e selezionare Esegui:
AzureDiagnostics | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
Se sono presenti risultati, cercare
OperationName
,ResultType
(codice di errore) eResultDescription
(messaggio di errore) per ottenere ulteriori dettagli.
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
Potrebbero verificarsi situazioni in cui si vuole usare Monitoraggio di Azure per visualizzare gli errori di connettività e le informazioni per 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:
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, gli sviluppatori possono modificarlo in alcuni SDK. 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.
SDK per dispositivo .NET con durata del token di 1200 secondi (20 minuti) e rinnovo impostato per il 90% della durata. le disconnessioni si verificano ogni 30 minuti:
SDK Java con una durata di 300 secondi (5 minuti) e rinnovo del token con impostazione predefinita all'85% della durata. Le disconnessioni si verificano ogni 15 minuti:
SDK del nodo con durata di 300 secondi (5 minuti) e rinnovo del token impostato per verificarsi dopo 3 minuti. Le disconnessioni si verificano durante il rinnovo del token. Inoltre, non ci sono errori. Vengono generati solo eventi di connessione/disconnessione informativi:
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 dell'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 il comportamento di durata del token o rinnovo per i dispositivi, verificare se il dispositivo implementa un'impostazione dispositivo gemello o un metodo del dispositivo che rende possibile questa modifica.
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 ConnectionForcefullyClosedOnNewConnection verrà registrato nei log dell'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:
Se si ha accesso ai dispositivi che presentano problemi, fisicamente o in modalità remota (ad esempio, tramite SSH), seguire la guida alla risoluzione dei problemi sul lato del dispositivo per continuare la risoluzione dei problemi.
Verificare che i dispositivi siano abilitati nel portale di Azure > per i dispositivi IoT di hub IoT >.
Se il dispositivo usa il protocollo MQTT, verificare che la porta 8883 sia aperta. Per altre informazioni, vedere Connettersi all'hub IoT (MQTT).
È possibile ottenere assistenza nella pagina delle domande di Domande e risposte Microsoft relativa a hub IoT, in Stack Overflow o nella pagina Supporto tecnico di Azure.
Passaggi successivi
Per informazioni sulla risoluzione dei problemi temporanei, vedere Gestione degli errori temporanei.
Per altre informazioni su Azure IoT SDK per dispositivi e sulla gestione dei nuovi tentativi, vedere Modelli di ripetizione dei tentativi.