Azure IoT Hub-apparaatconnectiviteit bewaken, diagnosticeren en oplossen
Connectiviteitsproblemen voor IoT-apparaten kunnen lastig zijn om op te lossen, omdat er veel mogelijke storingspunten zijn. Toepassingslogica, fysieke netwerken, protocollen, hardware, IoT Hub en andere cloudservices kunnen allemaal problemen veroorzaken. De mogelijkheid om de bron van een probleem te detecteren en aan te geven, is essentieel. Een IoT-oplossing op schaal kan echter duizenden apparaten hebben, dus het is niet praktisch om afzonderlijke apparaten handmatig te controleren. IoT Hub kan worden geïntegreerd met twee Azure-services om u te helpen:
Met Azure Monitor azure Monitor kunt u telemetriegegevens van IoT Hub verzamelen, analyseren en er actie op ondernemen. Gebruik de bewakingsmogelijkheden van IoT Hub via Azure Monitor om deze problemen op schaal te detecteren, diagnosticeren en oplossen. Deze aanpak omvat het instellen van waarschuwingen voor het activeren van meldingen en acties wanneer de verbinding wordt verbroken en het configureren van logboeken die u kunt gebruiken om de voorwaarden te detecteren die de verbinding verbreken.
Azure Event Grid Voor kritieke infrastructuur en de verbinding per apparaat wordt verbroken, gebruikt u Azure Event Grid om u te abonneren op apparaatverbindingsgebeurtenissen en gebeurtenissen die door IoT Hub worden verzonden, te verbreken. Met Azure Event Grid kunt u een van de volgende gebeurtenis-handlers gebruiken:
- Azure Functions
- Logic Apps
- Azure Automation
- WebHooks
- Queue Storage
- Hybride verbindingen
- Event Hubs
Event Grid versus Azure Monitor
Event Grid biedt een oplossing voor bewaking per apparaat met lage latentie die u kunt gebruiken om apparaatverbindingen voor kritieke apparaten en infrastructuur bij te houden. Azure Monitor biedt een metrische waarde met de naam Verbonden apparaten die u kunt gebruiken om het aantal apparaten te bewaken dat is verbonden met uw IoT Hub en een waarschuwing te activeren wanneer dat aantal onder een statische drempelwaarde daalt.
Houd rekening met de volgende problemen bij het bepalen of u Event Grid of Azure Monitor wilt gebruiken voor een bepaald scenario:
Latentie van waarschuwingen: IoT Hub-verbindingsevenementen worden veel sneller geleverd via Event Grid. Dit maakt Event Grid een betere keuze voor scenario's waarbij snelle meldingen wenselijk zijn.
Meldingen per apparaat: Event Grid biedt de mogelijkheid om verbindingen en verbindingen voor afzonderlijke apparaten bij te houden. Dit maakt Event Grid een betere keuze voor scenario's waarbij u de verbindingen voor kritieke apparaten moet bewaken.
Lichtgewicht installatie: metrische waarschuwingen van Azure Monitor bieden een lichtgewicht installatie-ervaring waarvoor geen integratie met andere services nodig is om meldingen te verzenden via e-mail, sms, spraak en andere meldingen. Met Event Grid moet u integreren met andere Azure-services om meldingen te leveren. Beide services kunnen worden geïntegreerd met andere services om complexere acties te activeren.
Event Grid: Gebeurtenissen voor verbinding en verbinding verbreken bewaken
Als u gebeurtenissen voor apparaatverbinding in productie wilt bewaken en de verbinding wilt verbreken, raden we u aan zich te abonneren op de gebeurtenissen DeviceConnected en DeviceDisconnected in Event Grid om waarschuwingen te activeren en de status van de apparaatverbinding te bewaken. Event Grid biedt een lagere gebeurtenislatentie dan Azure Monitor en u kunt per apparaat bewaken. Deze factoren maken Event Grid de voorkeursmethode voor het bewaken van kritieke apparaten en infrastructuur.
Wanneer u Event Grid gebruikt om waarschuwingen op apparaten te bewaken of activeren, moet u ervoor zorgen dat u de periodieke verbroken verbindingen filtert vanwege het vernieuwen van SAS-tokens op apparaten die gebruikmaken van de Azure IoT SDK's. Zie het gedrag van de verbinding met MQTT-apparaten met Azure IoT SDK's voor meer informatie.
Bekijk de volgende artikelen voor meer informatie over het bewaken van apparaatverbindingsevenementen met Event Grid:
Zie React to IoT Hub-gebeurtenissen met Event Grid voor een overzicht van het gebruik van Event Grid met IoT Hub. Let vooral op de sectie Beperkingen voor apparaatverbindingsstatussen .
Zie Apparaatverbindingsevenementen bestellen vanuit Azure IoT Hub met behulp van Azure Cosmos DB voor een zelfstudie over het bestellen van apparaatverbindingsevenementen.
Zie E-mailmeldingen verzenden over Azure IoT Hub-gebeurtenissen met behulp van Event Grid en Logic Apps in de Event Grid-documentatie voor een zelfstudie over het verzenden van e-mailmeldingen.
Azure Monitor: Logboeken gebruiken om connectiviteitsfouten op te lossen
Wanneer u detecteert dat het apparaat wordt verbroken met behulp van metrische waarschuwingen van Azure Monitor of Event Grid, kunt u logboeken gebruiken om de reden op te lossen. In deze sectie wordt beschreven hoe u kunt zoeken naar veelvoorkomende problemen in Azure Monitor-logboeken. In de volgende stappen wordt ervan uitgegaan dat u al een diagnostische instelling hebt gemaakt voor het verzenden van IoT Hub-verbindingslogboeken naar een Log Analytics-werkruimte.
Nadat u een diagnostische instelling hebt gemaakt om IoT Hub-resourcelogboeken naar Azure Monitor-logboeken te routeren, volgt u deze stappen om de logboeken in Azure Portal weer te geven.
Navigeer naar uw IoT-hub in Azure Portal.
Selecteer logboeken onder Bewaking in het linkerdeelvenster van uw IoT-hub.
Als u connectiviteitsfoutlogboeken voor IoT Hub wilt isoleren, voert u de volgende query in de query-editor in en selecteert u Vervolgens Uitvoeren:
AzureDiagnostics | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
Als er resultaten zijn, zoekt
OperationName
u naar ,ResultType
(foutcode) enResultDescription
(foutbericht) voor meer informatie.
Gebruik de volgende handleidingen voor probleemoplossing voor hulp bij de meest voorkomende fouten:
Azure Monitor: logboeken gebruiken om de connectiviteit voor een specifiek apparaat te bewaken
Er kunnen situaties zijn waarin u Azure Monitor wilt gebruiken om connectiviteitsfouten en informatie voor een specifiek apparaat te zien. Als u connectiviteitsevenementen voor een apparaat wilt isoleren, kunt u dezelfde stappen volgen als in de vorige sectie, maar voert u de volgende query in. Vervang het testapparaat door de naam van uw apparaat.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "test-device"
De query retourneert zowel fout- als informatieve gebeurtenissen voor uw doelapparaat. In de volgende voorbeelduitvoer ziet u een informatieve deviceConnect-gebeurtenis :
Gedrag van de verbinding met MQTT-apparaten met Azure IoT SDK's
Azure IoT-apparaat-SDK's verbreken de verbinding met IoT Hub en maken vervolgens opnieuw verbinding wanneer ze SAS-tokens vernieuwen via het MQTT-protocol (en MQTT via WebSockets). In logboeken wordt dit weergegeven als de verbinding met een informatief apparaat en het verbinden van gebeurtenissen soms vergezeld van fout gebeurtenissen.
De levensduur van het token is standaard 60 minuten voor alle SDK's; Ontwikkelaars kunnen dit echter wijzigen in een aantal SDK's. De volgende tabel bevat een overzicht van de levensduur van het token, het vernieuwen van tokens en het vernieuwingsgedrag van tokens voor elk van de SDK's:
SDK | Levensduur van token | Token vernieuwen | Verlengingsgedrag |
---|---|---|---|
.NET | 60 minuten, configureerbaar | 85% van de levensduur, configureerbaar | SDK verbreekt en maakt opnieuw verbinding tijdens de levensduur van tokens plus een respijtperiode van 10 minuten. Informatieve gebeurtenissen en fouten die zijn gegenereerd in logboeken. |
Java | 60 minuten, configureerbaar | 85% van de levensduur, niet configureerbaar | SDK verbreekt en maakt opnieuw verbinding tijdens de levensduur van tokens plus een respijtperiode van 10 minuten. Informatieve gebeurtenissen en fouten die zijn gegenereerd in logboeken. |
Node.js | 60 minuten, configureerbaar | Configureerbare | DE SDK verbreekt en maakt opnieuw verbinding bij het vernieuwen van tokens. Alleen informatieve gebeurtenissen worden gegenereerd in logboeken. |
Python | 60 minuten, configureerbaar | 120 seconden vóór verloop | DE SDK verbreekt de verbinding en maakt opnieuw verbinding tijdens de levensduur van het token. |
In de volgende schermopnamen ziet u het gedrag voor het vernieuwen van tokens in Azure Monitor-logboeken voor verschillende SDK's. De levensduur van het token en de drempelwaarde voor verlenging zijn gewijzigd van de standaardwaarden zoals vermeld.
.NET Device SDK met een tokenduur van 1200 seconden (20 minuten) en verlenging ingesteld op 90% van de levensduur. wordt elke 30 minuten verbroken:
Java SDK met een levensduur van 300 seconden (5 minuten) en standaard 85% van de levensduur. De verbinding wordt elke 15 minuten verbroken:
Node SDK met een levensduur van 300 seconden (5 minuten) en vernieuwing van tokens ingesteld op 3 minuten. De verbinding wordt verbroken bij het vernieuwen van tokens. Er zijn ook geen fouten. Alleen informatieve gebeurtenissen voor verbinding/verbinding verbreken worden verzonden:
De volgende query is gebruikt om de resultaten te verzamelen. De query extraheert de SDK-naam en -versie uit de eigenschappentas. Zie de SDK-versie in IoT Hub-logboeken voor meer informatie.
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
Als ontwikkelaar of operator van IoT-oplossingen moet u op de hoogte zijn van dit gedrag om gebeurtenissen voor verbinding maken/verbreken en gerelateerde fouten in logboeken te interpreteren. Als u de levensduur van het token of vernieuwingsgedrag voor apparaten wilt wijzigen, controleert u of het apparaat een apparaatdubbelinstelling of een apparaatmethode implementeert die deze wijziging mogelijk maakt.
Als u apparaatverbindingen met Event Hubs bewaakt, moet u ervoor zorgen dat u de periodieke verbroken verbindingen filtert vanwege het vernieuwen van het SAS-token. Activeer bijvoorbeeld geen acties op basis van verbroken verbindingen zolang de verbinding wordt gevolgd door een verbindingsevenement binnen een bepaalde periode.
Notitie
IoT Hub ondersteunt slechts één actieve MQTT-verbinding per apparaat. Elke nieuwe MQTT-verbinding namens dezelfde apparaat-id zorgt ervoor dat IoT Hub de bestaande verbinding neer zet.
400027 ConnectionForcefullyClosedOnNewConnection wordt aangemeld bij IoT Hub-logboeken
Ik heb de stappen geprobeerd, maar ze werkten niet
Als de vorige stappen niet hebben geholpen, probeert u het volgende:
Als u toegang hebt tot de problematische apparaten, fysiek of extern (zoals SSH), volgt u de handleiding voor probleemoplossing aan de apparaatzijde om door te gaan met het oplossen van problemen.
Controleer of uw apparaten zijn ingeschakeld in Azure Portal > uw IoT Hub > IoT-apparaten.
Als uw apparaat gebruikmaakt van het MQTT-protocol, controleert u of poort 8883 is geopend. Zie Verbinding maken met IoT Hub (MQTT) voor meer informatie.
Vraagpagina over Microsoft Q&A voor Azure IoT Hub, Stack Overflow of ondersteuning voor Azure.
Volgende stappen
Zie Tijdelijke foutafhandeling voor meer informatie over het oplossen van tijdelijke problemen.
Zie Patronen voor opnieuw proberen voor meer informatie over de SDK's voor Azure IoT-apparaten en het beheren van nieuwe pogingen.