Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verbindungsprobleme bei IoT-Geräten können schwierig zu behandeln sein, weil es viele mögliche Fehlerquellen gibt. Anwendungslogik, physische Netzwerke, Protokolle, Hardware, IoT Hub und andere Clouddienste können Probleme verursachen. Die Möglichkeit zum Erkennen und Ermitteln der Ursache eines Problems ist wichtig. Weil aber bei einer IoT-Lösung im großen Stil Tausende von Geräten betroffen sein könnten, ist es nicht praktikabel, einzelne Geräte manuell zu überprüfen. IoT Hub wird in zwei Azure-Dienste integriert, um Sie bei Folgendem zu unterstützen:
Azure Monitor: mit Azure Monitor können Sie Telemetriedaten aus IoT Hub sammeln, analysieren und darauf reagieren. Nutzen Sie als Hilfe beim Erkennen, Diagnostizieren und Beheben dieser Probleme im großen Stil die Überwachungsfunktionen, die IoT Hub über Azure Monitor bereitstellt. Dies Ansatz umfasst das Einrichten von Warnungen zum Auslösen von Benachrichtigungen und Aktionen, wenn Geräteverbindungen getrennt werden, sowie das Konfigurieren von Protokollen, mit denen Sie die Bedingungen ermitteln können, die zu solchen Trennungen geführt haben.
Azure Event Grid: Verwenden Sie Azure Event Grid für kritische Infrastruktur und gerätespezifische Verbindungen, um von IoT Hub ausgegebene Geräteverbindungs- und Trennungsereignisse zu abonnieren. Mit Azure Event Grid können Sie jeden der folgenden Ereignishandler verwenden:
- Azure Functions
- Logic Apps
- Azure Automation
- WebHooks
- Queue Storage
- Hybridverbindungen
- Event Hubs
Protokolle und Ports
Ein Gerät kann jedes der folgenden Protokolle verwenden, um eine Verbindung mit Ihrem IoT-Hub herzustellen. Wenn der ausgehende Port durch eine Firewall blockiert wird, kann das Gerät keine Verbindung herstellen.
| Protokoll | Ausgehender Port |
|---|---|
| MQTT | 8883 |
| MQTT über WebSockets | 443 |
| AMQP | 5671 |
| AMQP über WebSockets | 443 |
| HTTPS | 443 |
Weitere Informationen zur MqTT-Konnektivität (Message Queuing Telemetry Transport) finden Sie unter Verbinden mit IoT Hub.
Überprüfen der Gerätekonnektivität
Verwenden Sie die Azure CLI- und IoT Hub Portaltools, um zu überprüfen, ob ein Gerät eine Verbindung mit Ihrem Hub herstellen und kommunizieren kann. Mit den Schritten in diesem Abschnitt können Sie isolieren, ob das Problem bei der Geräteauthentifizierung, bei Geräte-zu-Cloud-Messaging, bei Cloud-zu-Gerät-Messaging oder bei der Twin-Synchronisierung des Geräts besteht.
Voraussetzungen für die Konnektivitätsüberprüfung
Die Azure CLI mit der installierten Erweiterung azure-iot:
az extension add --upgrade --name azure-iotEin Gerät, das in Ihrem IoT-Hub mit einem Verbindungszeichenfolge registriert ist. Führen Sie die folgenden Befehle aus, um ein Testgerät zu registrieren und dessen Verbindungszeichenfolge abzurufen. Ersetzen Sie
<your-device-id>durch den Namen Ihres neuen Geräts und<your-iot-hub-name>durch einen IoT-Hub, den Sie bereits erstellt haben.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>
Überprüfen der Geräteauthentifizierung
Ein Gerät muss sich bei Ihrem Hub authentifizieren, bevor es Daten austauschen kann. So testen Sie die Authentifizierung:
Verwenden Sie die Azure CLI, um eine Test-Telemetrienachricht aus der Geräteidentität zu senden. Eine erfolgreiche Übermittlung bestätigt, dass der Geräteschlüssel gültig ist:
az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 1Wenn die Authentifizierung fehlschlägt, überprüfen Sie, ob die Verbindungszeichenfolge des Geräts aktuell ist. Setzen Sie den Primärschlüssel zurück, um bei Bedarf einen neuen zu generieren:
az iot hub device-identity update --device-id <your-device-id> --set authentication.symmetricKey.primaryKey="" --hub-name <your-iot-hub-name>Rufen Sie dann die aktualisierte Verbindungszeichenfolge ab:
az iot hub device-identity connection-string show --device-id <your-device-id> --hub-name <your-iot-hub-name>
Generieren eines SAS-Testtokens
Wenn Ihr Gerät die SAS-Tokenauthentifizierung verwendet, können Sie ein bekanntes SAS-Token generieren, um Probleme mit Ihrem Tokengenerierungscode auszuschließen:
az iot hub generate-sas-token --device-id <your-device-id> --hub-name <your-iot-hub-name>
Ein gültiges SAS-Token sieht wie folgt aus: SharedAccessSignature sr=your-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
Codebeispiele zum programmgesteuerten Generieren von SAS-Token finden Sie in den Beispielen Azure IoT für Node.js im Ordner iot-hub/Tutorials/ConnectivityTests.
Überprüfen der Gerät-zu-Cloud-Konnektivität
So überprüfen Sie, ob die von einem Gerät gesendete Telemetrie Ihren Hub erreicht:
Senden von Test-Telemetriemeldungen vom Gerät:
az iot device simulate --device-id <your-device-id> --hub-name <your-iot-hub-name> --msg-count 5Navigieren Sie im Azure-Portal zu Ihrem IoT-Hub. Wählen Sie unter "Überwachung " im Randleistenmenü "Metriken" aus.
Wählen Sie im Dropdownmenü "Metrik" Telemetriemeldungen aus, die als Metrik gesendet wurden, und legen Sie den Zeitraum in der oberen rechten Ecke auf "Letzte Stunde" fest. Das Diagramm zeigt die Aggregatanzahl der vom Gerät gesendeten Nachrichten.
Hinweis
Es dauert ein paar Minuten, bis die Metriken verfügbar sind, nachdem Sie die Nachrichten gesendet haben.
Überprüfen der Cloud-zu-Gerät-Konnektivität
Verwenden Sie einen direkten Methodenaufruf, um den Cloud-zu-Gerät-Pfad zu überprüfen. Führen Sie das simulierte Gerät in einem Terminalfenster aus, und rufen Sie dann eine direkte Methode aus einem anderen auf:
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>
Eine erfolgreiche Antwort bestätigt, dass der Hub das Gerät erreichen kann. Wenn eine Zeitüberschreitung für den Aufruf eintritt, prüfen Sie, ob das Gerät angeschlossen ist, und ob es für Methodenaufrufe bereit ist.
Überprüfen der Synchronisierung von Gerätezwillingen
So prüfen Sie, ob die Geräte-Zwillingsdaten zwischen dem Gerät und dem Hub synchronisiert werden:
Zeigen Sie den aktuellen Gerätezwilling an, um die gemeldeten Eigenschaften zu prüfen:
az iot hub device-twin show --device-id <your-device-id> --hub-name <your-iot-hub-name>Senden Sie eine gewünschte Eigenschaftsaktualisierung, und bestätigen Sie, dass das Gerät es empfängt:
az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id <your-device-id> --hub-name <your-iot-hub-name>Führen Sie den Befehl „Twin Show“ erneut aus, um sich zu vergewissern, dass das Gerät die gewünschte Eigenschaft in seinen gemeldeten Eigenschaften bestätigt hat.
Event Grid im Vergleich zu Azure Monitor
Event Grid bietet eine Überwachungslösung mit geringer Wartezeit pro Gerät, die Sie zum Nachverfolgen von Geräteverbindungen bei kritischen Geräten und einer kritischen Infrastruktur verwenden können. Azure Monitor bietet eine Metrik mit dem Namen Verbundene Geräte, mit deren Hilfe Sie die Anzahl der mit Ihrem IoT-Hub verbundenen Geräte überwachen und eine Warnung auslösen können, wenn diese Anzahl einen statischen Schwellenwert unterschreitet.
Berücksichtigen Sie folgende Probleme bei Ihrer Entscheidung, ob Sie für ein bestimmtes Szenario Event Grid oder Azure Monitor verwenden möchten:
Warnungswartezeit: IoT Hub-Verbindungsereignisse werden durch Event Grid wesentlich schneller übermittelt. Diese Tatsache macht Event Grid zur besseren Wahl für Szenarien, in denen eine schnelle Benachrichtigung erwünscht ist.
Benachrichtigungen pro Gerät: Event Grid bietet die Möglichkeit zum Nachverfolgen von Verbindungsherstellungen und Verbindungstrennungen bei einzelnen Geräten. Diese Tatsache macht Event Grid zu einer besseren Wahl für Szenarien, in denen Sie die Verbindungen bei kritischen Geräten überwachen müssen.
Einfaches Setup: Azure Monitor-Metrikwarnungen ermöglichen ein einfaches Setup, bei dem keine Integration in andere Dienste erforderlich ist, um Benachrichtigungen über E-Mail, SMS, Voicemail und andere Benachrichtigungen zu übermitteln. Event Grid müssen Sie in andere Azure-Dienste integrieren, um Benachrichtigungen zu übermitteln. Beide Dienste können in andere Dienste integriert werden, um komplexere Aktionen auszulösen.
Event Grid: Überwachen von Ereignissen der Herstellung und Trennung von Verbindungen
Event Grid bietet eine geringere Ereignislatenz als Azure Monitor und ermöglicht die Überwachung auf Gerätebasis. Durch diese Faktoren wird Event Grid zur bevorzugten Methode für die Überwachung kritischer Geräte und einer kritischen Infrastruktur.
Hinweis
Zur Überwachung von Ereignissen der Herstellung und Trennung von Geräteverbindungen in der Produktion empfiehlt es sich, die Ereignisse DeviceConnected und DeviceDisconnected in Event Grid zu abonnieren, um Warnungen auszulösen und den Geräteverbindungsstatus zu überwachen.
Wenn Sie Warnungen zur Trennung von Geräteverbindungen mithilfe von Event Grid überwachen oder auslösen, müssen Sie die regelmäßigen Trennungen aufgrund von SAS-Tokenverlängerung auf Geräten herausfiltern, die die Azure IoT-SDKs verwenden. Weitere Informationen finden Sie unter MQTT device disconnect behavior with Azure IoT SDKs (Verbindungstrennungsverhalten von MQTT-Geräten bei Azure IoT-SDKs).
Weitere Informationen zum Überwachen von Geräteverbindungsereignissen mit Event Grid finden Sie in den folgenden Artikeln:
Eine Übersicht über die Verwendung von Event Grid bei IoT Hub finden Sie unter Reagieren auf IoT Hub-Ereignisse mit Event Grid. Beachten Sie insbesondere den Abschnitt Beschränkungen bei den Ereignissen „Gerät verbunden“.
Ein Tutorial zum Sortieren von Geräteverbindungsereignissen finden Sie unter Sortieren von Geräteverbindungsereignissen von Azure IoT Hub mithilfe von Azure Cosmos DB.
Ein Tutorial zum Senden von E-Mail-Benachrichtigungen finden Sie in der Event Grid-Dokumentation unter Senden von E-Mail-Benachrichtigungen zu Azure IoT Hub-Ereignissen mit Event Grid und Logic Apps.
Azure Monitor: Verwenden von Protokollen zum Beheben von Verbindungsfehlern
Wenn Sie über Azure Monitor-Metrikwarnungen oder Event Grid Trennungen von Geräteverbindungen erkennen, können Sie die Ursache anhand von Protokollen beheben. In diesem Abschnitt wird beschrieben, wie Sie in Azure Monitor-Protokollen nach häufigen Problemen suchen. In den Schritten wird davon ausgegangen, dass Sie bereits eine Diagnoseeinstellung erstellt haben, um IoT Hub-Verbindungsprotokolle an einen Log Analytics Arbeitsbereich zu senden.
Nachdem Sie eine Diagnoseeinstellung zum Weiterleiten von IoT Hub-Ressourcenprotokollen an Azure Monitor-Protokolle erstellt haben, führen Sie die folgenden Schritte aus, um die Protokolle im Azure-Portal anzuzeigen.
Navigieren Sie im Azure-Portal zu Ihrem IoT-Hub.
Wählen Sie unter "Überwachung " im Randleistenmenü Ihres IoT-Hubs "Protokolle" aus.
Wechseln Sie vom einfachen Modus zum KQL-Modus. Zum Isolieren von Verbindungsfehlerprotokollen für IoT Hub geben Sie im Abfrage-Editor die folgende Abfrage ein, und wählen Sie Ausführen aus:
AzureDiagnostics | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")Wenn Ergebnisse vorhanden sind, suchen Sie nach
OperationName,ResultType(Fehlercode) undResultDescription(Fehlermeldung), um weitere Details anzuzeigen.
Die folgenden Leitfäden für die Problemlösung bieten Hilfestellung für die häufigsten Fehler:
Azure Monitor: Verwenden von Protokollen zum Überwachen der Konnektivität für ein bestimmtes Gerät
Es kann Situationen geben, in der Sie Azure Monitor verwenden sollten, um Konnektivitätsfehler und Informationen für ein bestimmtes Gerät anzuzeigen. Um Konnektivitätsereignisse für ein Gerät zu isolieren, können Sie die gleichen Schritte wie im vorherigen Abschnitt ausführen, aber die folgende Abfrage eingeben. Ersetzen Sie <your-device-id> mit dem Namen Ihres Geräts.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "<your-device-id>"
Die Abfrage gibt sowohl Fehler- als auch Informationsereignisse für Ihr Zielgerät zurück. Die folgende Beispielausgabe zeigt ein informationales deviceConnect-Ereignis:
Verbindungstrennungsverhalten von MQTT-Geräten bei Azure IoT-SDKs
Azure IoT-Geräte-SDKs trennen die Verbindung mit IoT Hub und stellen eine Verbindung erneut her, wenn sie SAS-Token über das MQTT-Protokoll (und MQTT über WebSockets) verlängern. In Protokollen wird dies als Informationsereignisse der Trennung und Herstellung von Geräteverbindungen angezeigt, die manchmal von Fehlerereignissen begleitet werden.
Standardmäßig beträgt die Token-Lebensdauer für alle SDKs 60 Minuten; Entwickler können dies jedoch in einigen SDKs ändern. In der folgenden Tabelle werden die Tokenlebensdauer, die Tokenverlängerung und das Tokenverlängerungsverhalten für die einzelnen SDKs zusammengefasst:
| SDK | Tokenlebensdauer | Tokenverlängerung | Verlängerungsverhalten |
|---|---|---|---|
| .NET | 60 Minuten, konfigurierbar | 85 % der Lebensdauer, konfigurierbar | Das SDK trennt die Verbindung und stellt sie während der Tokenlebensdauer, zuzüglich einer Karenzzeit von 10 Minuten, wieder her. Informationsereignisse und Fehler, die in Protokollen generiert werden. |
| Java | 60 Minuten, konfigurierbar | 85 % der Lebensdauer, nicht konfigurierbar | Das SDK trennt die Verbindung und stellt sie während der Tokenlebensdauer, zuzüglich einer Karenzzeit von 10 Minuten, wieder her. Informationsereignisse und Fehler, die in Protokollen generiert werden. |
| Node.js | 60 Minuten, konfigurierbar | konfigurierbar | Das SDK trennt die Verbindung und stellt sie bei Erneuerung des Tokens wieder her. In Protokollen werden nur Informationsereignisse generiert. |
| Python | 60 Minuten, konfigurierbar | 120 Sekunden vor Ablauf | Das SDK trennt die Verbindung und stellt sie während der Tokenlebensdauer wieder her. |
Die folgenden Screenshots zeigen das Tokenverlängerungsverhalten in Azure Monitor-Protokollen für verschiedene SDKs. Wie oben erwähnt wurden die Tokenlebensdauer und der Verlängerungsschwellenwert gegenüber ihren Standardeinstellungen geändert.
.NET Geräte-SDK mit einer Tokenlebensdauer von 1.200 Sekunden (20 Minuten) und einer Verlängerung, die auf 90% der Lebensdauer festgelegt ist. Die Verbindung wird alle 30 Minuten getrennt:
Java-SDK mit einer Tokenlebensdauer von 300 Sekunden (5 Minuten) und einem Standardwert für die Verlängerung von 85 % der Lebensdauer. Die Verbindung wird alle 15 Minuten getrennt:
Node SDK mit einer Tokenlebensdauer von 300 Sekunden (5 Minuten) und die Tokenverlängerung erfolgt alle 3 Minuten. Die Verbindungstrennung erfolgt bei der Tokenverlängerung. Außerdem liegen keine Fehler vor. Es werden nur Informationen zu Verbindungs-/Trennungsereignissen ausgegeben:
Mit der folgenden Abfrage wurden die Ergebnisse erfasst. Die Abfrage extrahiert den Namen und die Version des SDKs aus dem Eigenschaftenbehälter. Weitere Informationen finden Sie unter SDK-Version in IoT Hub-Protokollen.
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 Entwickler von IoT-Lösungen oder Operator müssen Sie dieses Verhalten beachten, um Ereignisse von Verbindungsherstellung/Verbindungstrennung und zugehörige Fehler in Protokollen zu interpretieren. Wenn Sie die Tokenlebensdauer oder das Verlängerungsverhalten für Geräte ändern möchten, überprüfen Sie, ob das Gerät eine Gerätezwillingseinstellung oder eine Gerätemethode implementiert, die diese Änderung ermöglicht.
Wenn Sie Geräteverbindungen mit Event Hubs überwachen, stellen Sie sicher, dass Sie eine Möglichkeit einbauen, die regelmäßigen Trennungen aufgrund einer Erneuerung des SAS-Tokens herauszufiltern. Lösen Sie beispielsweise keine Aktionen basierend auf Trennungen aus, sofern dem Trennungsereignis innerhalb eines bestimmten Zeitraums ein Verbindungsereignis folgt.
Hinweis
IoT Hub unterstützt nur eine aktive MQTT-Verbindung pro Gerät. Jede neue MQTT-Verbindung für die gleiche Geräte-ID bewirkt, dass IoT Hub die vorhandene Verbindung löscht.
400027 ConnectionForcefullyClosedOnNewConnection wird in IoT Hub-Protokollen protokolliert
Ich habe die Schritte ausprobiert, aber sie funktionieren nicht.
Wenn das Problem mit den vorstehenden Schritten nicht behoben werden konnte, versuchen Sie Folgendes:
Wenn Sie Zugriff auf die problematischen Geräte haben, entweder physisch oder remote (wie SSH), folgen Sie der Anleitung zur geräteseitigen Problembehandlung, um die Fehlerbehebung fortzusetzen.
Vergewissern Sie sich, dass Ihre Geräte aktiviert sind. Navigieren Sie im Azure Portal zu Ihrem IoT Hub, und wählen Sie dann Devices unter Device management aus.
Wenn Ihr Gerät das MQTT-Protokoll verwendet, vergewissern Sie sich, dass Port 8883 geöffnet ist. Weitere Informationen finden Sie unter Protocols und Ports weiter oben in diesem Artikel und Verbinden mit IoT Hub (MQTT).
Hilfe können Sie über die Frageseite von Microsoft Q&A (Fragen und Antworten) zu Azure IoT Hub, Stack Overflow oder Azure-Support erhalten.