Monitorowanie, diagnozowanie i rozwiązywanie problemów z łącznością urządzeń usługi Azure IoT Hub

Problemy z łącznością dla urządzeń IoT mogą być trudne do rozwiązania, ponieważ istnieje wiele możliwych punktów awarii. Logika aplikacji, sieci fizyczne, protokoły, sprzęt, usługa IoT Hub i inne usługi w chmurze mogą powodować problemy. Możliwość wykrywania i ustalania źródła problemu jest krytyczna. Jednak rozwiązanie IoT na dużą skalę może mieć tysiące urządzeń, więc nie jest praktyczne ręczne sprawdzanie poszczególnych urządzeń. Usługa IoT Hub integruje się z dwiema usługami platformy Azure, które ułatwiają:

  • Usługa Azure Monitor w usłudze Azure Monitor umożliwia zbieranie, analizowanie i wykonywanie działań telemetrycznych z usługi IoT Hub. Aby ułatwić wykrywanie, diagnozowanie i rozwiązywanie tych problemów na dużą skalę, skorzystaj z możliwości monitorowania, które zapewnia usługa IoT Hub za pośrednictwem usługi Azure Monitor. Takie podejście obejmuje konfigurowanie alertów w celu wyzwalania powiadomień i akcji w przypadku wystąpienia rozłączeń oraz konfigurowania dzienników, których można użyć do odnajdywania warunków, które spowodowały rozłączenie.

  • Usługa Azure Event Grid — w przypadku infrastruktury krytycznej i rozłączania poszczególnych urządzeń użyj usługi Azure Event Grid , aby zasubskrybować zdarzenia połączenia urządzenia i rozłączenia emitowane przez usługę IoT Hub. Usługa Azure Event Grid umożliwia korzystanie z dowolnego z następujących programów obsługi zdarzeń:

    • Azure Functions
    • Logic Apps
    • Azure Automation
    • Elementy WebHook
    • Queue Storage
    • Połączenia hybrydowe
    • Event Hubs

Event Grid a Azure Monitor

Usługa Event Grid udostępnia rozwiązanie do monitorowania urządzeń o małym opóźnieniu, które umożliwia śledzenie połączeń urządzeń pod kątem krytycznych urządzeń i infrastruktury. Usługa Azure Monitor udostępnia metrykę o nazwie Połączone urządzenia , których można użyć do monitorowania liczby urządzeń połączonych z usługą IoT Hub i wyzwalania alertu, gdy ta liczba spadnie poniżej progu statycznego.

Podczas podejmowania decyzji, czy używać usługi Event Grid, czy usługi Azure Monitor w konkretnym scenariuszu, należy wziąć pod uwagę następujące problemy:

  • Opóźnienie alertu: zdarzenia połączenia usługi IoT Hub są dostarczane znacznie szybciej za pośrednictwem usługi Event Grid. Dzięki temu usługa Event Grid jest lepszym wyborem w scenariuszach, w których szybkie powiadomienie jest pożądane.

  • Powiadomienia dla poszczególnych urządzeń: usługa Event Grid umożliwia śledzenie połączeń i rozłączeń dla poszczególnych urządzeń. Dzięki temu usługa Event Grid jest lepszym wyborem w scenariuszach, w których należy monitorować połączenia dla urządzeń o krytycznym znaczeniu.

  • Uproszczona konfiguracja: alerty metryk usługi Azure Monitor zapewniają uproszczone środowisko konfiguracji, które nie wymaga integracji z innymi usługami w celu dostarczania powiadomień za pośrednictwem poczty e-mail, wiadomości SMS, głosu i innych powiadomień. Usługa Event Grid wymaga integracji z innymi usługami platformy Azure w celu dostarczania powiadomień. Obie usługi mogą integrować się z innymi usługami, aby wyzwalać bardziej złożone akcje.

Event Grid: monitorowanie zdarzeń łączenia i rozłączania

Aby monitorować zdarzenia łączenia i rozłączania urządzeń w środowisku produkcyjnym, zalecamy subskrybowanie zdarzeń DeviceConnected i DeviceDisconnected w usłudze Event Grid w celu wyzwalania alertów i monitorowania stanu połączenia urządzenia. Usługa Event Grid zapewnia mniejsze opóźnienie zdarzeń niż usługa Azure Monitor i można je monitorować na poszczególnych urządzeniach. Te czynniki sprawiają, że usługa Event Grid jest preferowaną metodą monitorowania krytycznych urządzeń i infrastruktury.

Jeśli używasz usługi Event Grid do monitorowania lub wyzwalania alertów dotyczących rozłączania urządzenia, upewnij się, że tworzysz sposób filtrowania okresowych rozłączeń z powodu odnawiania tokenu SAS na urządzeniach korzystających z zestawów SDK usługi Azure IoT. Aby dowiedzieć się więcej, zobacz Zachowanie rozłączania urządzenia MQTT z zestawami SDK usługi Azure IoT.

Zapoznaj się z następującymi artykułami, aby dowiedzieć się więcej na temat monitorowania zdarzeń połączenia urządzenia za pomocą usługi Event Grid:

Azure Monitor: rozwiązywanie problemów z łącznością przy użyciu dzienników

Po wykryciu rozłączenia urządzenia przy użyciu alertów metryk usługi Azure Monitor lub usługi Event Grid możesz użyć dzienników, aby ułatwić rozwiązywanie problemów z przyczyną. W tej sekcji opisano sposób wyszukiwania typowych problemów w dziennikach usługi Azure Monitor. W poniższych krokach przyjęto założenie, że utworzono już ustawienie diagnostyczne służące do wysyłania dzienników połączeń usługi IoT Hub do obszaru roboczego usługi Log Analytics.

Po utworzeniu ustawienia diagnostycznego w celu kierowania dzienników zasobów usługi IoT Hub do dzienników usługi Azure Monitor wykonaj następujące kroki, aby wyświetlić dzienniki w witrynie Azure Portal.

  1. Przejdź do centrum IoT Hub w witrynie Azure Portal.

  2. W obszarze Monitorowanie w okienku po lewej stronie centrum IoT Wybierz pozycję Dzienniki.

  3. Aby odizolować dzienniki błędów łączności dla usługi IoT Hub, wprowadź następujące zapytanie w edytorze zapytań, a następnie wybierz pozycję Uruchom:

    AzureDiagnostics
    | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
    
  4. Jeśli istnieją wyniki, wyszukaj OperationNameciąg , ResultType (kod błędu) i ResultDescription (komunikat o błędzie), aby uzyskać więcej szczegółów.

    Przykład dziennika błędów

Skorzystaj z następujących przewodników rozwiązywania problemów, aby uzyskać pomoc dotyczącą najczęstszych błędów:

Azure Monitor: monitorowanie łączności dla określonego urządzenia przy użyciu dzienników

Mogą wystąpić sytuacje, w których chcesz użyć usługi Azure Monitor, aby wyświetlić błędy łączności i informacje dotyczące określonego urządzenia. Aby odizolować zdarzenia łączności dla urządzenia, możesz wykonać te same kroki co w poprzedniej sekcji, ale wprowadź następujące zapytanie. Zastąp element test-device nazwą urządzenia.

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "test-device"

Zapytanie zwraca zarówno zdarzenia o błędzie, jak i zdarzenia informacyjne dla urządzenia docelowego. W poniższych przykładowych danych wyjściowych przedstawiono zdarzenie deviceConnect informacyjne:

Zrzut ekranu przedstawiający zdarzenie deviceConnect w dziennikach.

Zachowanie rozłączania urządzenia MQTT z zestawami SDK usługi Azure IoT

Zestawy SDK urządzeń usługi Azure IoT rozłączają się z usługą IoT Hub, a następnie ponownie nawiążą połączenie po odnowieniu tokenów SAS za pośrednictwem protokołu MQTT (i MQTT za pośrednictwem protokołu WebSockets). W dziennikach jest to wyświetlane jako informacyjne rozłączanie urządzenia i nawiązywanie połączenia zdarzeń czasami towarzyszy zdarzeń błędów.

Domyślnie cykl życia tokenu wynosi 60 minut dla wszystkich zestawów SDK; jednak deweloperzy mogą go zmienić w niektórych zestawach SDK. W poniższej tabeli podsumowano cykl życia tokenu, odnawianie tokenu i zachowanie odnawiania tokenu dla każdego zestawu SDK:

SDK Cykl życia tokenu Odnawianie tokenu Zachowanie odnawiania
.NET 60 minut, konfigurowalne 85% cyklu życia, konfigurowalne Zestaw SDK rozłącza się i ponownie łączy w okresie cyklu życia tokenu oraz 10-minutowym okresie prolongaty. Zdarzenia informacyjne i błędy wygenerowane w dziennikach.
Java 60 minut, konfigurowalne 85% cyklu życia, których nie można skonfigurować Zestaw SDK rozłącza się i ponownie łączy w okresie cyklu życia tokenu oraz 10-minutowym okresie prolongaty. Zdarzenia informacyjne i błędy wygenerowane w dziennikach.
Node.js 60 minut, konfigurowalne Konfigurowalne Zestaw SDK rozłącza się i ponownie nawiązuje połączenie podczas odnawiania tokenu. Tylko zdarzenia informacyjne są generowane w dziennikach.
Python 60 minut, konfigurowalne 120 sekund przed wygaśnięciem Zestaw SDK rozłącza się i ponownie nawiązuje połączenie przy cyklu życia tokenu.

Na poniższych zrzutach ekranu przedstawiono zachowanie odnawiania tokenu w dziennikach usługi Azure Monitor dla różnych zestawów SDK. Próg cyklu życia i odnawiania tokenu został zmieniony z wartości domyślnych, jak wspomniano.

  • Zestaw SDK urządzenia platformy .NET z 1200 sekundami (20 minut) cykl życia tokenu i odnawianie ustawione na 90% cyklu życia. rozłączenia są wykonywane co 30 minut:

    Zachowanie błędu podczas odnawiania tokenu za pośrednictwem protokołu MQTT w dziennikach usługi Azure Monitor przy użyciu zestawu .NET SDK.

  • Zestaw Java SDK z 300 sekundami (5 minut) cyklem życia tokenu i domyślnym 85% odnawianiem cyklu życia. Rozłączenia są wykonywane co 15 minut:

    Zachowanie błędu podczas odnawiania tokenu za pośrednictwem protokołu MQTT w dziennikach usługi Azure Monitor przy użyciu zestawu JAVA SDK.

  • Zestaw Node SDK z 300 sekundami (5 minut) cyklem życia tokenu i odnawianiem tokenu ustawionym na 3 minuty. Rozłączenia występują podczas odnawiania tokenu. Ponadto nie ma żadnych błędów. Emitowane są tylko zdarzenia połączenia informacyjnego/rozłączania:

    Zachowanie błędu podczas odnawiania tokenu za pośrednictwem protokołu MQTT w dziennikach usługi Azure Monitor przy użyciu zestawu Node SDK.

Następujące zapytanie zostało użyte do zebrania wyników. Zapytanie wyodrębnia nazwę i wersję zestawu SDK z torby właściwości. Aby dowiedzieć się więcej, zobacz Wersja zestawu SDK w dziennikach usługi IoT Hub.

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

Jako deweloper lub operator rozwiązań IoT należy pamiętać o tym zachowaniu, aby interpretować zdarzenia łączenia/rozłączania i powiązanych błędów w dziennikach. Jeśli chcesz zmienić zachowanie cyklu życia lub odnawiania tokenu dla urządzeń, sprawdź, czy urządzenie implementuje ustawienie bliźniaczej reprezentacji urządzenia, czy metodę urządzenia, która umożliwia tę zmianę.

Jeśli monitorujesz połączenia urządzeń z usługą Event Hubs, upewnij się, że tworzysz sposób filtrowania okresowych rozłączeń z powodu odnowienia tokenu SAS. Na przykład nie wyzwalaj akcji na podstawie rozłączeń, o ile zdarzenie rozłączenia następuje po zdarzeniu połączenia w określonym przedziale czasu.

Uwaga

Usługa IoT Hub obsługuje tylko jedno aktywne połączenie MQTT na urządzenie. Każde nowe połączenie MQTT w imieniu tego samego identyfikatora urządzenia powoduje, że usługa IoT Hub porzuci istniejące połączenie.

400027 ConnectionForcefullyClosedOnNewConnection zostanie zalogowany do dzienników usługi IoT Hub

Próbowałem kroków, ale nie działały

Jeśli poprzednie kroki nie pomogły, spróbuj wykonać następujące czynności:

Następne kroki

  • Aby dowiedzieć się więcej na temat rozwiązywania przejściowych problemów, zobacz Obsługa błędów przejściowych.

  • Aby dowiedzieć się więcej na temat zestawów SDK urządzeń Azure IoT i zarządzania ponownymi próbami, zobacz Wzorce ponawiania prób.