Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les problèmes de connectivité des appareils IoT sont parfois difficiles à résoudre, car il existe de nombreux points de défaillance possibles. La logique d’application, les réseaux physiques, les protocoles, le matériel, IoT Hub et d'autres services cloud sont tous susceptibles d’occasionner des problèmes. La possibilité de détecter et d’identifier la source d’un problème est essentielle. Cela étant, une solution IoT à grande échelle peut impliquer des milliers d’appareils et il n'est pas pratique de vérifier chaque appareil individuellement. IoT Hub intègre deux services Azure pour vous aider à :
Azure Monitor : Azure Monitor vous permet de collecter, d’analyser et d’agir sur les données de télémétrie à partir de IoT Hub. Pour vous aider à détecter, diagnostiquer et résoudre ces problèmes à grande échelle, utilisez les fonctionnalités de supervision offertes par IoT Hub via Azure Monitor. Cette approche comprend la configuration des alertes pour déclencher des notifications et des actions lorsque des déconnexions se produisent, et la configuration des journaux que vous pouvez utiliser pour découvrir les conditions qui ont provoqué ces déconnexions.
Azure Event Grid : pour les déconnexions d’infrastructure critique et par appareil, utilisez Azure Event Grid pour vous abonner aux événements de connexion et de déconnexion des appareils émis par IoT Hub. Azure Event Grid vous permet d’utiliser l’un des gestionnaires d’événements suivants :
- Azure Functions
- Logic Apps
- Azure Automation
- WebHooks
- Stockage File d’attente
- les connexions hybrides
- Event Hubs
Protocoles et ports
Un appareil peut utiliser l’un des protocoles suivants pour se connecter à votre hub IoT. Si le port sortant est bloqué par un pare-feu, l’appareil ne peut pas se connecter.
| Protocol | Port sortant |
|---|---|
| MQTT | 8883 |
| MQTT sur WebSockets | 443 |
| AMQP | 5671 |
| AMQP sur WebSockets | 443 |
| HTTPS | 443 |
Pour plus d’informations sur la connectivité MQTT (Message Queuing Telemetry Transport), consultez Connect to IoT Hub.
Vérifier la connectivité des appareils
Utilisez les outils Azure CLI et IoT Hub portail pour vérifier qu’un appareil peut se connecter et communiquer avec votre hub. Les étapes décrites dans cette section vous permettent d’isoler si le problème concerne l’authentification des appareils, la messagerie appareil-à-cloud, la messagerie cloud à appareil ou la synchronisation des jumeaux d’appareil.
Conditions préalables à la vérification de la connectivité
Azure CLI avec l’extension azure-iot installée :
az extension add --upgrade --name azure-iotUn appareil enregistré dans votre hub IoT avec une chaîne de connexion. Pour inscrire un appareil de test et récupérer son chaîne de connexion, exécutez les commandes suivantes. Remplacez
<your-device-id>par le nom de votre nouvel appareil et remplacez<your-iot-hub-name>par un hub IoT que vous avez déjà créé.az iot hub device-identity create --device-id <your-device-id> --hub-name <your-iot-hub-name> az iot hub device-identity connection-string show --device-id <your-device-id> --hub-name <your-iot-hub-name>
Vérifier l’authentification des appareils
Un appareil doit s’authentifier auprès de votre hub pour pouvoir échanger des données. Pour tester l’authentification :
Utilisez le Azure CLI pour envoyer un message de télémétrie de test à partir de l’identité de l’appareil. Un envoi réussi confirme que la clé d’appareil est valide :
az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 1Si l’authentification échoue, vérifiez que la chaîne de connexion de l’appareil est à jour. Réinitialisez la clé primaire pour en générer une nouvelle si nécessaire :
az iot hub device-identity update --device-id <your-device-id> --set authentication.symmetricKey.primaryKey="" --hub-name <your-iot-hub-name>Récupérez ensuite la chaîne de connexion mise à jour :
az iot hub device-identity connection-string show --device-id <your-device-id> --hub-name <your-iot-hub-name>
Générer un jeton SAP de test
Si votre appareil utilise l’authentification par jeton SAS, vous pouvez générer un jeton SAP connu pour exclure les problèmes liés à votre code de génération de jeton :
az iot hub generate-sas-token --device-id <your-device-id> --hub-name <your-iot-hub-name>
Un jeton SAP valide ressemble à ceci : SharedAccessSignature sr=your-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
Pour obtenir des exemples de code montrant comment générer des jetons SAP par programmation, consultez les exemples Azure IoT pour Node.js dans le dossier iot-hub/Tutorials/ConnectivityTests.
Vérifier la connectivité appareil-à-cloud
Pour vérifier que les données de télémétrie envoyées par un appareil atteignent votre hub :
Envoyez des messages de télémétrie de test à partir de l’appareil :
az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 5Accédez à votre IoT Hub dans le portail Azure. Sous Surveillance dans le menu de la barre latérale, sélectionnez Métriques.
Dans la liste déroulante Métriques , sélectionnez Les messages de télémétrie envoyés en tant que métrique et définissez l’intervalle de temps dans le coin supérieur droit sur Dernière heure. Le graphique affiche le nombre agrégé de messages envoyés par l’appareil.
Remarque
La disponibilité des métriques prend quelques minutes après l’envoi des messages.
Vérifiez la connectivité cloud-à-appareil
Pour vérifier le chemin cloud-vers-appareil, utilisez un appel direct de méthode. Exécutez l’appareil simulé dans une fenêtre de terminal, puis appelez une méthode directe à partir d’une autre :
az iot hub invoke-device-method --device-id <your-device-id> --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name <your-iot-hub-name>
Une réponse réussie confirme que le hub peut atteindre l’appareil. Si l’appel expire, vérifiez que l’appareil est connecté et écoute les appels de méthode.
Vérifier la synchronisation du Device Twin
Pour vérifier que les données de jumeau numérique de l’appareil se synchronisent entre l’appareil et le hub :
Affichez le jumeau d’appareil actuel pour vérifier les propriétés signalées :
az iot hub device-twin show --device-id <your-device-id> --hub-name <your-iot-hub-name>Envoyez une mise à jour de propriété souhaitée et confirmez que l’appareil le reçoit :
az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id <your-device-id> --hub-name <your-iot-hub-name>Réexécutez la commande show du jumeau pour confirmer que l’appareil a reconnu la propriété souhaitée dans ses propriétés signalées.
Event Grid ou Azure Monitor
Azure Event Grid offre une solution de supervision par appareil à faible latence qui vous permet de suivre les connexions pour les appareils critiques et l’infrastructure. Azure Monitor propose une métrique appelée Appareils connectés, que vous pouvez utiliser pour superviser le nombre d’appareils connectés à votre instance IoT Hub et déclencher une alerte dès que ce nombre descend en dessous d’un seuil statique.
Tenez compte des erreurs suivantes lorsque vous décidez d’utiliser Event Grid ou Azure Monitor pour un scénario particulier :
Latence de l'alerte : les événements de connexion IoT Hub sont remis plus rapidement via Event Grid. Event Grid constitue donc un meilleur choix pour les scénarios où une notification rapide est préférable.
Notifications par appareil : Event Grid offre la possibilité de suivre les connexions et les déconnexions pour des appareils individuels. Event Grid constitue donc un meilleur choix pour les scénarios où vous devez surveiller les connexions d’appareils critiques.
Installation simplifiée : Les alertes de métrique Azure Monitor fournissent une expérience d’installation simplifiée qui ne nécessite pas d’intégration avec d’autres services pour envoyer des notifications par courrier électronique, SMS, voix et autres notifications. Avec Event Grid, vous devez intégrer d’autres services Azure pour remettre des notifications. Ces deux services peuvent s’intégrer à d’autres services pour déclencher des actions plus complexes.
Event Grid : analyser des événements de connexion et de déconnexion
Event Grid offre une latence moindre que celle d’Azure Monitor. Vous pouvez l’analyser sur une base par appareil. Ces aspects font d’Event Grid la méthode recommandée pour la supervision des appareils critiques et de l’infrastructure.
Remarque
Pour surveiller les événements de connexion et de déconnexion des appareils dans les environnements de production, nous vous recommandons de vous abonner aux événements DeviceConnected et DeviceDisconnected sur Event Grid pour déclencher des alertes et suivre l’état de connexion de l’appareil.
Lorsque vous utilisez Event Grid pour surveiller ou déclencher des alertes en cas de déconnexion d’un appareil, veillez à créer une méthode de filtrage des déconnexions périodiques dues à un renouvellement de jeton SAS sur les appareils qui utilisent les kits de développement logiciel (SDK) Azure IoT. Pour plus d’informations, consultez Comportement de déconnexion d’appareil MQTT avec les kits de développement logiciel (SDK) Azure IoT.
Explorez les articles suivants pour en savoir plus sur la surveillance des événements de connexion des appareils avec Event Grid :
Pour obtenir une vue d’ensemble de l’utilisation d’Event Grid avec IoT Hub, consultez Réagir aux événements IoT Hub avec Event Grid. Prêtez une attention particulière à la section Limitations pour les événements de connexion d’appareils.
Pour consulter un tutoriel sur la commande des événements de connexion d’appareils, consultez Commander des événements de connexion d’appareils depuis Azure IoT Hub à l’aide d’Azure Cosmos DB.
Pour consulter un tutoriel sur l’envoi de notifications par e-mail, consultez Envoyer des notifications par e-mail concernant des événements Azure IoT Hub à l’aide d’Event Grid et de Logic Apps dans la documentation Event Grid.
Azure Monitor : utiliser les journaux pour résoudre les erreurs de connectivité
Lorsque vous détectez des déconnexions d’appareils, que ce soit avec des alertes de métrique Azure Monitor ou Event Grid, vous pouvez utiliser les journaux pour résoudre le problème. Cette section décrit comment examiner les problèmes courants dans Azure Monitor Logs. Les étapes ci-dessous supposent que vous avez déjà créé un paramétrage de diagnostic afin d’envoyer les journaux de connexions d’IoT Hub vers un espace de travail Log Analytics.
Après avoir créé un paramétrage de diagnostic pour acheminer les journaux de ressources IoT Hub vers Azure Monitor Logs, suivez ces étapes pour afficher les journaux dans le portail Azure.
Accédez à IoT hub dans le portail Azure.
Sous Surveillance dans le menu de la barre latérale de votre hub IoT, sélectionnez Journaux.
Passez du mode simple au mode KQL. Pour isoler les journaux d’activité d’erreurs de connectivité pour IoT Hub, entrez la requête suivante dans l’éditeur de requête, puis sélectionnez Exécuter :
AzureDiagnostics | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")Si des résultats s’affichent, recherchez les éléments
OperationName,ResultType(code d’erreur) etResultDescription(message d’erreur) pour obtenir plus de détails.
Suivez les guides de résolution des problèmes ci-dessous pour les erreurs les plus courantes :
Azure Monitor : utiliser les journaux pour surveiller la connectivité d’un appareil spécifique
Il peut être utile d’utiliser Azure Monitor pour consulter les erreurs de connectivité et les informations associées à un appareil spécifique. Pour isoler les événements de connectivité d’un appareil, vous pouvez suivre les mêmes étapes que dans la section précédente, mais en entrant la requête suivante. Remplacez <your-device-id> par le nom de votre appareil.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "<your-device-id>"
La requête retourne les événements d’erreur et d’information pour votre appareil cible. L’exemple de sortie suivant montre un événement deviceConnect d’information :
Comportement de déconnexion d’appareil MQTT avec les kits de développement logiciel (SDK) Azure IoT
Les kits de développement logiciel (SDK) d’appareil Azure IoT se déconnectent d’IoT Hub puis se reconnectent lorsqu’ils renouvellent les jetons SAS via le protocole MQTT (et MQTT via WebSockets). Dans les journaux, ces informations s’affichent comme des événements de déconnexion et de connexion, parfois accompagnés d’événements d’erreur.
Par défaut, la durée de vie des jetons est de 60 minutes pour tous les SDK. Toutefois, les développeurs peuvent la modifier dans certains SDK. Le tableau suivant résume la durée de vie des jetons, le renouvellement des jetons et le comportement du renouvellement des jetons pour chacun des kits de développement logiciel (SDK) :
| Kit SDK | Durée de vie des jetons | Renouvellement des jetons | Comportement du renouvellement |
|---|---|---|---|
| .NET | 60 minutes, paramétrable | 85 % de la durée de vie, configurable | Le kit de développement logiciel (SDK) se déconnecte et se reconnecte dès la fin de vie du jeton plus une période de grâce de 10 minutes. Événements d’information et erreurs générés dans les journaux. |
| Java | 60 minutes, paramétrable | 85 % de la durée de vie, non configurable | Le kit de développement logiciel (SDK) se déconnecte et se reconnecte dès la fin de vie du jeton plus une période de grâce de 10 minutes. Événements d’information et erreurs générés dans les journaux. |
| Node.js | 60 minutes, paramétrable | configurable | Le kit de développement logiciel (SDK) se déconnecte et se reconnecte lors du renouvellement du jeton. Seuls les événements d’information sont générés dans les journaux. |
| Python | 60 minutes, paramétrable | 120 secondes avant expiration. | Le kit de développement logiciel (SDK) se déconnecte et se reconnecte pendant la durée de vie des jetons. |
Les captures d’écran suivantes montrent le comportement de renouvellement des jetons dans les journaux Azure Monitor pour différents kits de développement logiciel (SDK). La durée de vie et le seuil de renouvellement des jetons ont été modifiés par rapport à leurs valeurs par défaut, comme indiqué.
.NET SDK pour les dispositifs avec une durée de vie de jeton de 1 200 secondes (20 minutes) et un renouvellement prévu à 90 % de la durée de vie. Les déconnexions se produisent toutes les 30 minutes :
SDK Java avec une durée de vie de jeton de 300 secondes (5 minutes) et un renouvellement par défaut à 85 % de la durée de vie. Les déconnexions se produisent toutes les 15 minutes :
SDK Node avec une durée de vie de jeton de 300 secondes (5 minutes) et un renouvellement du jeton déclenché après 3 minutes. Les déconnexions se produisent lors du renouvellement du jeton. Dans ce cas, aucune erreur n’est générée. Seuls des événements informatifs de connexion et de déconnexion sont émis.
La requête suivante a été utilisée pour collecter les résultats. La requête extrait le nom et la version du kit de développement logiciel (SDK) du conteneur de propriétés. Pour en savoir plus, consultez Version du kit de développement logiciel dans les journaux IoT Hub.
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
En tant que développeur ou opérateur de solutions IoT, vous devez être conscient de ce comportement afin d’interpréter les événements de connexion/déconnexion et les erreurs associées consignées dans les journaux. Si vous souhaitez modifier la durée de vie du jeton ou le comportement de renouvellement pour les appareils, vérifiez si l’appareil implémente un paramètre de jumeau d’appareil ou une méthode d’appareil permettant ce changement.
Si vous analysez des connexions d’appareils d’analyse avec Event Hubs, assurez-vous de générer de façon à filtrer les déconnexions périodiques dues au renouvellement des jetons SAS. Par exemple, n’activez pas d’actions basées sur des déconnexions tant que l’événement de déconnexion est suivi d’un événement de reconnexion dans un intervalle de temps donné.
Remarque
IoT Hub ne prend en charge qu’une seule connexion MQTT active par appareil. Toute nouvelle connexion MQTT au nom du même ID d’appareil entraîne l’interruption de la connexion existante par IoT Hub.
400027 ConnectionForcefullyClosedOnNewConnection est enregistré dans les journaux IoT Hub.
J’ai suivi les différentes étapes, mais cela n'a pas fonctionné.
Si les étapes ci-dessus n’ont pas permis de résoudre le problème, essayez ce qui suit :
Si vous avez accès aux appareils problématiques, que ce soit physiquement ou à distance (comme SSH), consultez le guide de résolution des problèmes côté appareil pour poursuivre le dépannage.
Vérifiez que vos appareils sont activés. Accédez à votre IoT Hub dans le portail Azure, puis sélectionnez Devices sous Device management.
Si votre appareil utilise le protocole MQTT, vérifiez que le port 8883 est ouvert. Pour plus d’informations, consultez Protocoles et ports plus haut dans cet article et Connexion à IoT Hub (MQTT).
Obtenez de l’aide dans la page de questions Microsoft Q&A pour Azure IoT Hub, dans Stack Overflow ou dans Support Azure.