Problemen met apparaat verbreken onderzoeken met Behulp van Azure Monitor en Event Grid

Voltooid

Verbinding maken iviteitsproblemen 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 waarmee u het volgende kunt doen:

  • Azure Monitor: Met Azure Monitor kunt u telemetriegegevens verzamelen, analyseren en erop reageren vanuit IoT Hub. Gebruik de bewakingsmogelijkheden van IoT Hub via Azure Monitor om deze problemen op schaal te detecteren, diagnosticeren en oplossen. Dit 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 : gebruik Azure Event Grid om u te abonneren op gebeurtenissen die door IoT Hub worden verzonden voor kritieke infrastructuur en de verbinding per apparaat. 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 Verbinding maken ed-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 het volgende 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 waarin 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 om u te abonneren op de gebeurtenissen Device Verbinding maken ed 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.

Azure Monitor: Verbindingsevenementen routeren naar logboeken

IoT Hub verzendt continu resourcelogboeken voor verschillende categorieën bewerkingen. Als u deze logboekgegevens wilt verzamelen, moet u een diagnostische instelling maken om deze naar een bestemming te routeren waar deze kunnen worden geanalyseerd of gearchiveerd. Een dergelijke bestemming is Azure Monitor-logboeken via een Log Analytics-werkruimte, waar u de gegevens kunt analyseren met behulp van Kusto-query's.

De IoT Hub-resourcelogboeken Verbinding maken ions categorie verzendt bewerkingen en fouten die te maken hebben met apparaatverbindingen.

{
   "records":
   [
        {
            "time": " UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "deviceConnect",
            "category": "Connections",
            "level": "Information",
            "properties": "{\"deviceId\":\"<deviceId>\",\"sdkVersion\":\"<sdkVersion>\",\"protocol\":\"<protocol>\",\"authType\":\"{\\\"scope\\\":\\\"device\\\",\\\"type\\\":\\\"sas\\\",\\\"issuer\\\":\\\"iothub\\\",\\\"acceptingIpFilterRule\\\":null}\",\"maskedIpAddress\":\"<maskedIpAddress>\"}",
            "location": "Resource location"
        }
    ]
}

In de volgende schermopname ziet u een diagnostische instelling om deze logboeken naar een Log Analytics-werkruimte te routeren.

Image showing a Log Analytics diagnostic setting.

We raden u aan om zo vroeg mogelijk een diagnostische instelling te maken nadat u uw IoT-hub hebt gemaakt. Hoewel IoT Hub altijd resourcelogboeken verzendt, worden ze pas door Azure Monitor verzameld als u ze naar een bestemming routegeeft.

Azure Monitor: waarschuwingen voor metrische gegevens instellen voor de verbinding met apparaten

U kunt waarschuwingen instellen op basis van de metrische platformgegevens die door IoT Hub worden verzonden. Met metrische waarschuwingen kunt u personen informeren dat er een interessevoorwaarde is opgetreden en ook acties activeren die automatisch op die voorwaarde kunnen reageren.

De metrische gegevens van Verbinding maken apparaten geven aan hoeveel apparaten zijn verbonden met uw IoT Hub. U kunt waarschuwingen maken om te activeren als deze metrische waarde lager is dan een drempelwaarde.

Image showing how to create an alert to trigger if a metric drops below a threshold value.

U kunt waarschuwingsregels voor metrische gegevens gebruiken om te controleren op afwijkingen van de apparaatkoppeling op schaal. Gebruik waarschuwingen om te bepalen wanneer een aanzienlijk aantal apparaten onverwacht wordt verbroken. Wanneer dit wordt gedetecteerd, kunt u logboeken bekijken om het probleem op te lossen. Als u de verbinding per apparaat wilt bewaken, worden de verbindingen voor kritieke apparaten in bijna realtime verbroken, maar u moet Event Grid gebruiken.

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 om IoT Hub-logboeken Verbinding maken ions te verzenden 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.

  1. Navigeer naar uw IoT-hub in Azure Portal.

  2. Selecteer Logboeken onder Bewaking in het linkerdeelvenster van uw IoT-hub.

  3. 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")
    
  4. Als er resultaten zijn, zoekt OperationNameu naar , ResultType (foutcode) en ResultDescription (foutbericht) voor meer informatie.

Gebruik de probleemoplossingsgids voor hulp bij de volgende meest voorkomende fouten:

  • 400027 ConnectionForcefullyClosedOnNewConnection

  • 404104 DeviceConnectionClosedRemotely

  • 401003 IoTHubUnauthorized

  • 409002 LinkCreationConflict

  • 500001 ServerError

  • 500008 GenericTimeout

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. Als u de volgende query wilt gebruiken, vervangt u 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 informatieapparaat Verbinding maken gebeurtenis:

Image showing output of an informational deviceConnect event.

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; Het kan echter worden gewijzigd door ontwikkelaars in sommige 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

Configureerbare

85% van de levensduur, niet configureerbaar

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 de vervaldatum

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 levensduur van 1200 seconden (20 minuten) en verlenging ingesteld op 90% van de levensduur. wordt elke 30 minuten verbroken: Image shows .NET device SDK with a 1200 second (20 minutes) token lifespan.
  • Java SDK met een levensduur van 300 seconden (5 minuten) en standaard 85% van de levensduur. De verbinding wordt elke 15 minuten verbroken: Image shows Java SDK with a 300 second (5 minutes) token lifespan and default 85% of lifespan renewal.
  • 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, er worden alleen informatieve gebeurtenissen voor verbinding en verbinding verbroken verzonden: Image shows Node SDK with a 300 second (5 minutes) token lifespan and token renewal set to happen at 3 minutes.

De volgende query is gebruikt om de resultaten te verzamelen. De query extraheert de SDK-naam en -versie uit de eigenschappentas.

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 rekening houden met dit gedrag om verbinding te maken met gebeurtenissen en gerelateerde fouten in logboeken om verbinding te maken en los te koppelen. Als u de levensduur of verlenging van het token voor apparaten wilt wijzigen, controleert u of het apparaat een apparaatdubbelinstelling of een apparaatmethode implementeert die dit 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 Verbinding maken ionForcefullyClosedOnNew Verbinding maken ion wordt aangemeld bij IoT Hub-logboeken.

Als de richtlijnen op deze pagina niet helpen, kunt u het volgende proberen:

  • Als u toegang hebt tot de problematische apparaten, fysiek of extern (zoals SSH), volgt u de handleiding voor probleemoplossing aan de apparaatzijde op de volgende eenheidspagina 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 ing to IoT Hub (MQTT) voor meer informatie.

  • Vraagpagina over Microsoft Q&A voor Azure IoT Hub, Stack Overflow of ondersteuning voor Azure.