Überwachen, Diagnostizieren und Behandeln von Problemen bei der Gerätekonnektivität mit Azure IoT Hub
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: Azure Monitor ermöglicht es Ihnen, Telemetriedaten aus IoT Hub zu erfassen, zu analysieren und entsprechend zu handeln. Nutzen Sie als Hilfe beim Erkennen, Diagnostizieren und Beheben dieser Probleme im großen Stil die Überwachungsfunktionen, die IoT Hub über Azure Monitor bereitstellt. Dieser 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 Bei einer kritischen Infrastruktur und Verbindungstrennungen pro Gerät verwenden Sie Azure Event Grid zum Abonnieren der von IoT Hub ausgegebenen Ereignisse der Geräteverbindung und -trennung. Mit Azure Event Grid können Sie jeden der folgenden Ereignishandler verwenden:
- Azure-Funktionen
- Logic Apps
- Azure Automation
- WebHooks
- Queue Storage
- Hybridverbindungen
- Event Hubs
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. Aufgrund dieser Tatsache ist Event Grid eine bessere Wahl für Szenarien, in denen eine schnelle Benachrichtigung wünschenswert ist.
Benachrichtigungen pro Gerät: Event Grid bietet die Möglichkeit zum Nachverfolgen von Verbindungsherstellungen und Verbindungstrennungen bei einzelnen Geräten. Aufgrund dieser Tatsache ist Event Grid eine bessere 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
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. 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.
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 hier 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 diese Schritte aus, um die Protokolle im Azure-Portal anzuzeigen.
Navigieren Sie im Azure-Portal zu Ihrem IoT-Hub.
Wählen Sie im linken Bereich Ihres IoT-Hubs unter Überwachung die Option Protokolle aus.
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 denen 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 test-device durch den 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 == "test-device"
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.
Die Tokenlebensdauer bei allen SDKs beträgt standardmäßig 60 Minuten; in einigen der SDKs kann sie jedoch von Fachkräften in der Entwicklung geändert werden. 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.
Beim .NET-Geräte-SDK mit einer Tokenlebensdauer und Tokenverlängerung von 1200 Sekunden (20 Minuten) wurde dies auf 90 % der Lebensdauer festgelegt. 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 gibt es keine Fehler. 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.
Überprüfen Sie im Azure-Portal > Ihr IoT-Hub > „IoT-Geräte“, ob Ihre Geräte aktiviert sind.
Wenn Ihr Gerät das MQTT-Protokoll verwendet, vergewissern Sie sich, dass Port 8883 geöffnet ist. Weitere Informationen finden Sie unter Herstellen einer Verbindung 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.
Nächste Schritte
Weitere Informationen zum Beheben von vorübergehenden Problemen finden Sie unter Behandlung vorübergehender Fehler.
Weitere Informationen zu den Azure IoT-Geräte-SDKs und zum Verwalten von Wiederholungsversuchen finden Sie unter Wiederholungsmuster.