Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anslutningsproblem för IoT-enheter kan vara svåra att felsöka eftersom det finns många möjliga felpunkter. Programlogik, fysiska nätverk, protokoll, maskinvara, IoT Hub och andra molntjänster kan orsaka problem. Möjligheten att identifiera och hitta källan till ett problem är kritisk. En IoT-lösning i stor skala kan dock ha tusentals enheter, så det är inte praktiskt att kontrollera enskilda enheter manuellt. IoT Hub integreras med två Azure-tjänster som hjälper dig:
Azure Monitor: Azure Monitor gör att du kan samla in, analysera och agera på telemetri från IoT Hub. Om du vill hjälpa dig att identifiera, diagnostisera och felsöka dessa problem i stor skala använder du de övervakningsfunktioner som IoT Hub tillhandahåller via Azure Monitor. Den här metoden omfattar att konfigurera aviseringar för att utlösa meddelanden och åtgärder när frånkopplingar inträffar och konfigurera loggar som du kan använda för att identifiera de villkor som orsakade frånkopplingar.
Azure Event Grid: För kritiska infrastrukturer och frånkopplingar per enhet använder du Azure Event Grid för att prenumerera på enhetsanslutnings- och frånkopplingshändelser som genereras av IoT Hub. Med Azure Event Grid kan du använda någon av följande händelsehanterare:
- Azure Functions
- Logic Apps
- Azure Automation
- WebHooks
- Kölagring
- Hybridanslutningar
- Event Hubs
Protokoll och portar
En enhet kan använda något av följande protokoll för att ansluta till din IoT-hubb. Om den utgående porten blockeras av en brandvägg kan enheten inte ansluta.
| Protokoll | Utgående port |
|---|---|
| MQTT | 8883 |
| MQTT över WebSockets | 443 |
| AMQP | 5671 |
| AMQP över WebSockets | 443 |
| HTTPS | 443 |
Mer information om MQTT-anslutning (Message Queuing Telemetry Transport) finns i Anslut till IoT Hub.
Verifiera enhetens anslutning
Använd Azure CLI- och IoT Hub-portalverktygen för att kontrollera att en enhet kan ansluta och kommunicera med din hubb. Stegen i det här avsnittet hjälper dig att isolera om problemet gäller enhetsautentisering, meddelanden från enhet till moln, meddelanden från moln till enhet eller synkronisering av enhetstvillingar.
Krav för anslutningsverifiering
Azure CLI med tillägget azure-iot installerat:
az extension add --upgrade --name azure-iotEn enhet som är registrerad i din IoT-hubb med en anslutningssträng. Om du vill registrera en testenhet och hämta dess reťazec pripojenia kör du följande kommandon. Ersätt
<your-device-id>med namnet på den nya enheten och ersätt<your-iot-hub-name>med en IoT-hubb som du redan har skapat.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>
Kontrollera enhetsautentisering
En enhet måste autentisera med din hubb innan den kan utbyta data. Så här testar du autentisering:
Använd Azure CLI för att skicka ett testtelemetrimeddelande från enhetsidentiteten. En lyckad sändning bekräftar att enhetsnyckeln är giltig:
az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 1Om autentiseringen misslyckas, kontrollerar du att enhetens anslutningssträng är aktuell. Återställ den primära nyckeln för att generera en ny om det behövs:
az iot hub device-identity update --device-id <your-device-id> --set authentication.symmetricKey.primaryKey="" --hub-name <your-iot-hub-name>Hämta sedan den uppdaterade reťazec pripojenia:
az iot hub device-identity connection-string show --device-id <your-device-id> --hub-name <your-iot-hub-name>
Testa att generera en SAS-token
Om enheten använder SAS-tokenautentisering kan du generera en känd SAS-token för att utesluta problem med din tokengenereringskod:
az iot hub generate-sas-token --device-id <your-device-id> --hub-name <your-iot-hub-name>
En giltig SAS-token ser ut så här: SharedAccessSignature sr=your-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
Kodexempel som visar hur du genererar SAS-token programmatiskt finns i Azure IoT exempel för Node.js i mappen iot-hub/Tutorials/ConnectivityTests.
Kontrollera anslutningen från enhet till moln
Så här kontrollerar du att telemetri som skickas av en enhet når din hubb:
Skicka testtelemetrimeddelanden från enheten:
az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 5Gå till din IoT-hubb i Azure-portalen. Under Övervakning på sidomenyn väljer du Mått.
I listrutan Mått väljer du Telemetrimeddelanden som skickas som mått och anger tidsintervallet i det övre högra hörnet till Senaste timme. Diagrammet visar det sammanlagda antalet meddelanden som skickas av enheten.
Kommentar
Det tar några minuter innan måtten blir tillgängliga när du har skickat meddelandena.
Kontrollera anslutningen från moln till enhet
Om du vill verifiera sökvägen från moln till enhet använder du ett direkt metodanrop. Kör den simulerade enheten i ett terminalfönster och anropa sedan en direktmetod från en annan:
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>
Ett lyckat svar bekräftar att hubben kan nå enheten. Om samtalet överskrider tidsgränsen kontrollerar du att enheten är ansluten och lyssnar efter metodanrop.
Kontrollera synkroniseringen av devicetwin
Så här kontrollerar du att device twin-data synkroniseras mellan enheten och hubben:
Visa den aktuella enhetstvillingen för att kontrollera rapporterade egenskaper:
az iot hub device-twin show --device-id <your-device-id> --hub-name <your-iot-hub-name>Skicka en önskad egenskapsuppdatering och bekräfta att enheten tar emot den:
az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id <your-device-id> --hub-name <your-iot-hub-name>Kör kommandot twin show igen för att bekräfta att enheten har bekräftat den önskade egenskapen i dess rapporterade egenskaper.
Event Grid jämfört med Azure Monitor
Event Grid tillhandahåller en lösning för övervakning per enhet med låg svarstid som du kan använda för att spåra enhetsanslutningar för kritiska enheter och infrastruktur. Azure Monitor tillhandahåller ett mått med namnet Anslutna enheter som du kan använda för att övervaka antalet enheter som är anslutna till din IoT Hub och utlösa en avisering när det antalet sjunker under ett statiskt tröskelvärde.
Tänk på följande när du bestämmer dig för att använda Event Grid eller Azure Monitor för ett visst scenario:
Svarstid för aviseringar: IoT Hub-anslutningshändelser levereras mycket snabbare via Event Grid. Detta gör Event Grid till ett bättre val för scenarier där snabbmeddelanden är önskvärda.
Meddelanden per enhet: Event Grid ger möjlighet att spåra anslutningar och frånkopplingar för enskilda enheter. Detta gör Event Grid till ett bättre val för scenarier där du behöver övervaka anslutningarna för kritiska enheter.
Enkel konfiguration: Azure Monitor-måttaviseringar ger en enkel konfigurationsupplevelse som inte kräver integrering med andra tjänster för att leverera meddelanden via e-post, SMS, röst och andra meddelanden. Med Event Grid måste du integrera med andra Azure-tjänster för att leverera meddelanden. Båda tjänsterna kan integreras med andra tjänster för att utlösa mer komplexa åtgärder.
Event Grid: Övervaka anslutnings- och frånkopplingshändelser
Event Grid ger lägre händelsefördröjning än Azure Monitor och du kan övervaka per enhet. Dessa faktorer gör Event Grid till den bästa metoden för övervakning av kritiska enheter och infrastruktur.
Kommentar
För att övervaka enhetsanslutnings- och frånkopplingshändelser i produktion rekommenderar vi att du prenumererar på händelserna DeviceConnected och DeviceDisconnected i Event Grid för att utlösa aviseringar och övervaka enhetens anslutningstillstånd.
När du använder Event Grid för att övervaka eller utlösa aviseringar på enhetens frånkopplingar ska du skapa ett sätt att filtrera bort de periodiska frånkopplingarna på grund av SAS-tokenförnyelse på enheter som använder Azure IoT SDK:er. Mer information finns i MQTT-enhetens frånkopplingsbeteende med Azure IoT SDK:er.
Utforska följande artiklar för att lära dig mer om övervakning av enhetsanslutningshändelser med Event Grid:
En översikt över hur du använder Event Grid med IoT Hub finns i React to IoT Hub events with Event Grid (Reagera på IoT Hub-händelser med Event Grid). Var särskilt uppmärksam på avsnittet Begränsningar för enhetsanslutningstillståndshändelser .
En självstudiekurs om hur du beställer enhetsanslutningshändelser finns i Beställa enhetsanslutningshändelser från Azure IoT Hub med Azure Cosmos DB.
En självstudiekurs om hur du skickar e-postmeddelanden finns i Skicka e-postmeddelanden om Azure IoT Hub-händelser med Event Grid och Logic Apps i Event Grid-dokumentationen.
Azure Monitor: Använd loggar för att lösa anslutningsfel
När du upptäcker att enheten kopplas från med hjälp av Azure Monitor-måttaviseringar eller Event Grid kan du använda loggar för att felsöka orsaken. I det här avsnittet beskrivs hur du söker efter vanliga problem i Azure Monitor-loggar. Stegen här förutsätter att du redan har skapat en diagnostikinställning för att skicka IoT Hub-anslutningsloggar till en Log Analytics-arbetsyta.
När du har skapat en diagnostikinställning för att dirigera IoT Hub-resursloggar till Azure Monitor-loggar följer du de här stegen för att visa loggarna i Azure Portal.
Gå till din IoT-hubb i Azure Portal.
Under Övervakning på sidomenyn i din IoT-hubb väljer du Loggar.
Växla från enkelt läge till KQL-läge. Om du vill isolera anslutningsfelloggar för IoT Hub anger du följande fråga i frågeredigeraren och väljer sedan Kör:
AzureDiagnostics | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")Om det finns resultat letar du efter
OperationName,ResultType(felkod) ochResultDescription(felmeddelande) för mer detaljer.
Använd följande problemlösningsguider för att få hjälp med de vanligaste felen:
Azure Monitor: Använda loggar för att övervaka anslutningen för en specifik enhet
Det kan finnas situationer när du vill använda Azure Monitor för att se anslutningsfel och information för en specifik enhet. Om du vill isolera anslutningshändelser för en enhet kan du följa samma steg som i föregående avsnitt, men ange följande fråga. Ersätt <your-device-id> med namnet på enheten.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "<your-device-id>"
Frågan returnerar både fel- och informationshändelser för målenheten. Följande exempelutdata visar en informativ deviceConnect-händelse:
MQTT-enhetens frånkopplingsbeteende med Azure IoT SDK:er
Azure IoT-enhets-SDK:er kopplar från IoT Hub och återansluter sedan när de förnyar SAS-token via MQTT-protokoll (och MQTT över WebSockets). I loggar visas detta som informativa händelser för frånkoppling och anslutning av enheter, som ibland åtföljs av felhändelser.
Som standard är tokens livslängd 60 minuter för alla SDK:er. Utvecklare kan dock ändra det i vissa SDK:er. I följande tabell sammanfattas tokenlivslängd, förnyelse av token och förnyelsebeteendet för var och en av SDK:erna.
| SDK | Livslängd för token | Tokenförnyelse | Förnyelsebeteende |
|---|---|---|---|
| .NET | 60 minuter, kan konfigureras | 85 % av livslängden, konfigurerbar | SDK kopplar från och återansluter vid tokens livslängd plus en respitperiod på 10 minuter. Informationshändelser och fel som genereras i loggar. |
| Java | 60 minuter, kan konfigureras | 85 % av livslängden, inte konfigurerbar | SDK kopplar från och återansluter vid tokens livslängd plus en respitperiod på 10 minuter. Informationshändelser och fel som genereras i loggar. |
| Node.js | 60 minuter, kan konfigureras | Konfigurerbara | SDK kopplar från och återansluter vid tokenförnyelse. Endast informationshändelser genereras i loggar. |
| Python | 60 minuter, kan konfigureras | 120 sekunder före förfallodatum | SDK kopplar från och återansluter vid utgången av tokens livslängd. |
Följande skärmbilder visar beteendet för tokenförnyelse i Azure Monitor-loggar för olika SDK:er. Tokenlivslängd och förnyelsetröskel har ändrats från sina standardvärden enligt angivelsen.
.NET enhets-SDK med en tokenlivslängd på 1 200 sekunder (20 minuter) och förnyelse inställd på 90% livslängd. Frånkopplingar sker var 30:e minut:
Java SDK med en tokenlivslängd på 300 sekunder (5 minuter) och standardvärdet är 85 % av livslängdsförnyelsen. Frånkopplingar sker var 15:e minut:
Node SDK med en tokenlivslängd på 300 sekunder (5 minuter) och tokenförnyelse inställd på 3 minuter. Frånkopplingar sker vid tokenförnyelse. Det finns heller inga fel. Endast informationsbaserade anslutnings-/frånkopplingshändelser genereras:
Följande fråga användes för att samla in resultaten. Frågan extraherar SDK-namnet och versionen från egenskapsväskan. Mer information finns i SDK-versionen i IoT Hub-loggar.
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
Som utvecklare eller operatör för IoT-lösningar måste du vara medveten om det här beteendet för att tolka anslutnings-/frånkopplingshändelser och relaterade fel i loggar. Om du vill ändra tokens livslängd eller förnyelsebeteende för enheter kontrollerar du om enheten implementerar en enhetstvillinginställning eller en enhetsmetod som gör den här ändringen möjlig.
Om du övervakar enhetsanslutningar med Event Hubs ser du till att du skapar ett sätt att filtrera bort de periodiska frånkopplingarna på grund av förnyelse av SAS-token. Du kan till exempel inte utlösa åtgärder baserat på frånkopplingar så länge frånkopplingshändelsen följs av en anslutningshändelse inom ett visst tidsintervall.
Kommentar
IoT Hub stöder endast en aktiv MQTT-anslutning per enhet. Alla nya MQTT-anslutningar för samma enhets-ID gör att IoT Hub släpper den befintliga anslutningen.
400027 ConnectionForcefullyClosedOnNewConnection är inloggad i IoT Hub loggar
Jag försökte stegen, men de fungerade inte
Om föregående steg inte hjälpte kan du prova:
Om du har åtkomst till problematiska enheter, antingen fysiskt eller via fjärranslutning (till exempel SSH), följer du felsökningsguiden på enhetssidan för att fortsätta felsökningen.
Kontrollera att enheterna är aktiverade. Gå till din IoT Hub i Azure-portalen och välj sedan Enheter under Enhetshantering.
Om enheten använder MQTT-protokollet kontrollerar du att port 8883 är öppen. Mer information finns i Protocols och portar tidigare i den här artikeln och Anslutning till IoT Hub (MQTT).
Få hjälp från microsofts Q&A-frågesida för Azure IoT Hub, Stack Overflow eller Azure Support.