Omówienie i rozwiązywanie problemów z błędami usługi Azure IoT Hub

W tym artykule opisano przyczyny i rozwiązania typowych kodów błędów, które mogą wystąpić podczas korzystania z usługi IoT Hub.

400027 Połączenie ion wymuszono zamknięty w nowym połączeniu

Może zostać wyświetlony błąd 400027 Połączenie ionForcefullyClosedOnNew Połączenie ion, jeśli urządzenie rozłącza się i zgłasza Communication_Error jako Połączenie ionStatusChangeReason przy użyciu zestawu SDK platformy .NET i typu transportu MQTT. Lub operacja bliźniaczej reprezentacji urządzenia do chmury (na przykład odczyt lub poprawka zgłoszonych właściwości) lub wywołanie metody bezpośredniej kończy się niepowodzeniem z kodem błędu 400027.

Ten błąd występuje, gdy inny klient tworzy nowe połączenie z usługą IoT Hub przy użyciu tej samej tożsamości, więc usługa IoT Hub zamyka poprzednie połączenie. Usługa IoT Hub nie zezwala na nawiązywanie połączenia przy użyciu tej samej tożsamości więcej niż jednemu klientowi.

Aby rozwiązać ten błąd, upewnij się, że każdy klient łączy się z usługą IoT Hub przy użyciu własnej tożsamości.

401003 nieautoryzowanego centrum IoT Hub

W dziennikach może zostać wyświetlony wzorzec rozłączania urządzeń z 401003 IoTHubUnauthorized, a następnie 404104 Device Połączenie ionClosedRemotely, a następnie pomyślnie nawiązać połączenie wkrótce po.

Żądania do usługi IoT Hub kończą się niepowodzeniem z jednym z następujących komunikatów o błędach:

  • Brak nagłówka autoryzacji
  • Usługa IotHub '*' nie zawiera określonego urządzenia '*'
  • Reguła autoryzacji "*" nie zezwala na dostęp dla '*'
  • Uwierzytelnianie nie powiodło się dla tego urządzenia, odnowić token lub certyfikat i ponownie nawiązać połączenie
  • Odcisk palca nie jest zgodny z konfiguracją: Odcisk palca: SHA1Hash=*, SHA2Hash=*; Konfiguracja: PrimaryThumbprint=*, SecondaryThumbprint=*
  • Podmiot zabezpieczeń user@example.com nie jest autoryzowany do pobierania w /exampleOperation z powodu braku przypisanych uprawnień

Ten błąd występuje, ponieważ w przypadku zestawu MQTT niektóre zestawy SDK polegają na usłudze IoT Hub w celu wystawienia rozłączenia, gdy token SAS wygaśnie, aby wiedzieć, kiedy go odświeżyć. Zatem

  1. Token SAS wygasa
  2. Usługa IoT Hub zauważa wygaśnięcie i rozłącza urządzenie z usługą 401003 IoTHubUnauthorized
  3. Urządzenie kończy rozłączanie z urządzeniem 404104 Połączenie ionClosedRemotely
  4. Zestaw SDK IoT generuje nowy token SAS
  5. Urządzenie zostanie pomyślnie ponownie nawiązane z usługą IoT Hub

Lub usługa IoT Hub nie może uwierzytelnić nagłówka, reguły lub klucza uwierzytelniania. Może to być spowodowane dowolnym z powodów wymienionych w objawach.

Aby rozwiązać ten błąd, nie jest wymagana żadna akcja w przypadku używania zestawu SDK IoT na potrzeby połączenia przy użyciu parametry połączenia urządzenia. Zestaw SDK IoT ponownie generuje nowy token, aby ponownie nawiązać połączenie po wygaśnięciu tokenu SAS.

Domyślna żywotność tokenu wynosi 60 minut w zestawach SDK; Jednak w przypadku niektórych zestawów SDK można skonfigurować cykl życia tokenu i próg odnawiania tokenu. Ponadto błędy generowane po rozłączeniu urządzenia i ponownym połączeniu z odnawianiem tokenu różnią się dla każdego zestawu SDK. Aby dowiedzieć się więcej i uzyskać informacje na temat sposobu określania zestawu SDK używanego przez urządzenie w dziennikach, zobacz Zachowanie rozłączania urządzenia MQTT z zestawami SDK usługi Azure IoT.

W przypadku deweloperów urządzeń, jeśli problem dotyczy liczby błędów, przejdź do zestawu SDK języka C, który odnawia token SAS przed wygaśnięciem. W przypadku protokołu AMQP token SAS może być odświeżony bez rozłączenia.

Ogólnie rzecz biorąc, przedstawiony komunikat o błędzie powinien wyjaśnić, jak naprawić błąd. Jeśli z jakiegoś powodu nie masz dostępu do szczegółów komunikatu o błędzie, upewnij się, że:

  • Sygnatura dostępu współdzielonego lub inny używany token zabezpieczający nie wygasła.
  • W przypadku uwierzytelniania certyfikatu X.509 certyfikat urządzenia lub certyfikat urzędu certyfikacji skojarzony z urządzeniem nie wygasł. Aby dowiedzieć się, jak zarejestrować certyfikaty X.509 urzędu certyfikacji w usłudze IoT Hub, zobacz Samouczek: tworzenie i przekazywanie certyfikatów na potrzeby testowania.
  • W przypadku uwierzytelniania odcisku palca certyfikatu X.509 odcisk palca certyfikatu urządzenia jest zarejestrowany w usłudze IoT Hub.
  • Poświadczenia autoryzacji są poprawnie sformułowane dla używanego protokołu. Aby dowiedzieć się więcej, zobacz Kontrola dostępu do usługi IoT Hub.
  • Użyta reguła autoryzacji ma uprawnienie do żądanej operacji.
  • W przypadku ostatnich komunikatów o błędach rozpoczynających się od "principal...", ten błąd można rozwiązać, przypisując użytkownikowi prawidłowy poziom uprawnień RBAC platformy Azure. Na przykład właściciel usługi IoT Hub może przypisać rolę "Właściciel danych usługi IoT Hub", która daje wszystkie uprawnienia. Spróbuj wykonać tę rolę, aby rozwiązać problem z brakiem uprawnień.

Uwaga

Niektóre urządzenia mogą napotkać problem z dryfem czasu, gdy czas urządzenia ma większą niż pięć minut różnicy od serwera. Ten błąd może wystąpić, gdy urządzenie łączy się z centrum IoT Bez problemów przez kilka tygodni, a nawet miesięcy, ale następnie zaczyna stale odmawiać połączenia. Błąd może być również specyficzny dla podzestawu urządzeń połączonych z centrum IoT, ponieważ dryf czasu może wystąpić z różnymi szybkościami w zależności od tego, kiedy urządzenie jest najpierw połączone lub włączone.

Często wykonanie synchronizacji czasu przy użyciu ntP lub ponowne uruchomienie urządzenia (co może automatycznie wykonać synchronizację czasu podczas sekwencji rozruchu) rozwiązuje problem i umożliwia urządzeniu ponowne nawiązanie połączenia. Aby uniknąć tego błędu, skonfiguruj urządzenie do przeprowadzania okresowej synchronizacji czasu przy użyciu protokołu NTP. Synchronizację można zaplanować codziennie, co tydzień lub co miesiąc w zależności od ilości dryfu środowiska urządzenia. Jeśli nie możesz skonfigurować okresowej synchronizacji NTP na urządzeniu, zaplanuj okresowy ponowny rozruch.

403002 przekroczono limit przydziału usługi IoT Hub

Żądania do usługi IoT Hub mogą zakończyć się niepowodzeniem z powodu błędu 403002 IoTHubQuotaExceeded. W witrynie Azure Portal lista urządzeń centrum IoT Hub nie jest ładowana.

Ten błąd zwykle występuje, gdy przekroczono dzienny limit przydziału komunikatów dla centrum IoT. Aby rozwiązać ten błąd:

Ten błąd może być również zwracany przez zadanie importu zbiorczego, gdy liczba urządzeń zarejestrowanych w centrum IoT hub zbliża się lub przekracza limit przydziału dla centrum IoT. Aby dowiedzieć się więcej, zobacz Rozwiązywanie problemów z zadaniami importu.

403004 Przekroczono maksymalną głębokość kolejki urządzenia

Podczas próby wysłania komunikatu z chmury do urządzenia może zostać wyświetlony komunikat informujący, że żądanie kończy się niepowodzeniem z powodu błędu 403004 lub DeviceMaximumQueueDepthExceeded.

Podstawową przyczyną tego błędu jest to, że liczba komunikatów w kolejce dla urządzenia przekracza limit kolejki.

Najbardziej prawdopodobną przyczyną wystąpienia tego limitu jest to, że używasz protokołu HTTPS do odbierania komunikatu, co prowadzi do ciągłego sondowania przy użyciu metody ReceiveAsync, co powoduje ograniczenie żądania przez usługę IoT Hub.

Obsługiwany wzorzec dla komunikatów chmury-urządzenia z protokołem HTTPS jest sporadycznie połączonych urządzeń, które sprawdzają komunikaty rzadko (mniej niż co 25 minut). Aby zmniejszyć prawdopodobieństwo wystąpienia limitu kolejki, przełącz się na protokół AMQP lub MQTT dla komunikatów z chmury do urządzenia.

Alternatywnie zwiększ logikę po stronie urządzenia, aby szybko ukończyć, odrzucić lub porzucić komunikaty w kolejce, skrócić czas wygaśnięcia lub rozważyć wysłanie mniejszej liczby komunikatów. Zobacz Czas wygaśnięcia komunikatu C2D.

Na koniec rozważ użycie interfejsu API przeczyszczania kolejki do okresowego czyszczenia oczekujących komunikatów przed osiągnięciem limitu.

403006 Przekroczono limit maksymalnego aktywnego przekazywania plików urządzenia

Może się okazać, że żądanie przekazania pliku kończy się niepowodzeniem z kodem błędu 403006 DeviceMaximumActiveFileUploadLimitExceeded i komunikat "Liczba aktywnych żądań przekazywania plików nie może przekroczyć 10".

Ten błąd występuje, ponieważ każdy klient urządzenia jest ograniczony do współbieżnych przekazywania plików. Możesz łatwo przekroczyć limit, jeśli urządzenie nie powiadamia usługi IoT Hub o zakończeniu przekazywania plików. Ten problem jest często spowodowany przez zawodną sieć po stronie urządzenia.

Aby rozwiązać ten błąd, upewnij się, że urządzenie może natychmiast powiadomić o zakończeniu przekazywania plików usługi IoT Hub. Następnie spróbuj zmniejszyć czas wygaśnięcia tokenu SYGNATURy dostępu współdzielonego dla konfiguracji przekazywania plików.

nie znaleziono urządzenia 404001

Podczas komunikacji typu chmura-urządzenie (C2D), takiej jak komunikat C2D, aktualizacja bliźniaczej reprezentacji lub metoda bezpośrednia, może się okazać, że operacja kończy się niepowodzeniem z powodu błędu 404001 DeviceNotFound.

Operacja nie powiodła się, ponieważ usługa IoT Hub nie może odnaleźć urządzenia. Urządzenie nie jest zarejestrowane lub jest wyłączone.

Aby rozwiązać ten błąd, zarejestruj użyty identyfikator urządzenia, a następnie spróbuj ponownie.

404103 Urządzenie nie jest w trybie online

Może się okazać, że metoda bezpośrednia urządzenia kończy się niepowodzeniem z powodu błędu 404103 DeviceNotOnline , nawet jeśli urządzenie jest w trybie online.

Jeśli wiesz, że urządzenie jest w trybie online i nadal występuje błąd, prawdopodobnie wystąpił błąd, ponieważ wywołanie zwrotne metody bezpośredniej nie jest zarejestrowane na urządzeniu.

Aby prawidłowo skonfigurować urządzenie pod kątem wywołań zwrotnych metod bezpośrednich, zobacz Obsługa metody bezpośredniej na urządzeniu.

404104 Zdalne zamykanie połączenia urządzenia

Urządzenia mogą być rozłączane w regularnych odstępach czasu (na przykład co 65 minut), a w dziennikach zasobów usługi IoT Hub są widoczne 404104 Device Połączenie ionClosedRemotely. Czasami zobaczysz również 401003 IoTHubUnauthorized i pomyślne zdarzenie połączenia urządzenia mniej niż minutę później.

Możesz też losowo rozłączyć urządzenia i zobaczysz 404104 Device Połączenie ionClosedRemotely w dziennikach zasobów usługi IoT Hub.

Lub wiele urządzeń rozłącza się jednocześnie, zobaczysz spadek w metryce urządzeń Połączenie (connectedDeviceCount) i istnieje więcej 404104 Device Połączenie ionClosedRemotely i 500xxx Wewnętrzne błędy w dziennikach usługi Azure Monitor niż zwykle.

Ten błąd może wystąpić, ponieważ token SAS używany do nawiązywania połączenia z usługą IoT Hub wygasł, co powoduje rozłączenie urządzenia z usługą IoT Hub. Połączenie zostanie nawiązane ponownie po odświeżeniu tokenu przez urządzenie. Na przykład token SAS wygasa co godzinę domyślnie dla zestawu SDK języka C, co może prowadzić do regularnych rozłączeń. Aby dowiedzieć się więcej, zobacz 401003 IoTHubUnauthorized.

Oto kilka innych możliwości:

  • Urządzenie utraciło podstawową łączność sieciową dłużej niż czas bezczynności MQTT, co spowodowało przekroczenie limitu czasu bezczynności zdalnej. Ustawienie utrzymywania aktywności MQTT może być inne dla każdego urządzenia.
  • Urządzenie wysłało resetowanie na poziomie TCP/IP, ale nie wysłało na poziomie MQTT DISCONNECTaplikacji . Zasadniczo urządzenie nagle zamknęło połączenie gniazda bazowego. Czasami ten problem jest spowodowany usterkami w starszych wersjach zestawu Azure IoT SDK.
  • Aplikacja po stronie urządzenia uległa awarii.

Lub usługa IoT Hub może mieć przejściowy problem. Zobacz Wewnętrzny błąd serwera usługi IoT Hub.

Aby rozwiązać ten błąd:

  • Zobacz wskazówki dotyczące błędu 401003 IoTHubUnauthorized.
  • Upewnij się, że urządzenie ma dobrą łączność z usługą IoT Hub, testując połączenie. Jeśli sieć jest zawodna lub sporadycznie, nie zalecamy zwiększenia wartości keep-alive, ponieważ może to spowodować wykrycie (na przykład za pośrednictwem alertów usługi Azure Monitor).
  • Użyj najnowszych wersji zestawów SDK IoT.
  • Zapoznaj się ze wskazówkami dotyczącymi wewnętrznych błędów serwera usługi IoT Hub.

Zalecamy użycie zestawów SDK urządzeń Azure IoT w celu niezawodnego zarządzania połączeniami. Aby dowiedzieć się więcej Zarządzanie łącznością i niezawodna obsługa komunikatów za pomocą zestawów SDK urządzeń usługi Azure IoT Hub

409001 Urządzenie już istnieje

Podczas próby zarejestrowania urządzenia w usłudze IoT Hub może zostać wyświetlone, że żądanie kończy się niepowodzeniem z powodu błędu 409001 DeviceAlreadyExists.

Ten błąd występuje, ponieważ urządzenie ma już ten sam identyfikator urządzenia w centrum IoT.

Aby rozwiązać ten błąd, użyj innego identyfikatora urządzenia i spróbuj ponownie.

Może zostać wyświetlony błąd 409002 LinkCreationConflict w dziennikach wraz z błędem rozłączenia urządzenia lub komunikatu z chmury do urządzenia.

Zazwyczaj ten błąd występuje, gdy usługa IoT Hub wykryje, że klient ma więcej niż jedno połączenie. W rzeczywistości po nadejściu nowego żądania połączenia dla urządzenia z istniejącym połączeniem usługa IoT Hub zamyka istniejące połączenie z tym błędem.

W najczęstszym przypadku osobny problem (taki jak urządzenie 404104 Połączenie ionClosedRemotely) powoduje rozłączenie urządzenia. Urządzenie próbuje natychmiast ponownie opublikować połączenie, ale usługa IoT Hub nadal uważa urządzenie za połączone. Usługa IoT Hub zamyka poprzednie połączenie i rejestruje ten błąd.

Ewentualnie wadliwa logika po stronie urządzenia powoduje nawiązanie połączenia, gdy jest już otwarty.

Aby rozwiązać ten błąd, poszukaj innych błędów w dziennikach, które można rozwiązać, ponieważ ten błąd zwykle występuje jako efekt uboczny innego, przejściowego problemu. W przeciwnym razie pamiętaj, aby wydać nowe żądanie połączenia tylko wtedy, gdy połączenie spadnie.

412002 utracono blokadę komunikatu urządzenia

Podczas próby wysłania komunikatu z chmury do urządzenia może zostać wyświetlony komunikat informujący, że żądanie kończy się niepowodzeniem z powodu błędu 412002 DeviceMessageLockLost.

Ten błąd występuje, ponieważ gdy urządzenie odbiera komunikat z chmury do urządzenia z kolejki (na przykład przy użyciu ReceiveAsync()), komunikat jest blokowany przez usługę IoT Hub przez czas trwania limitu czasu blokady w ciągu jednej minuty. Jeśli urządzenie spróbuje ukończyć komunikat po wygaśnięciu limitu czasu blokady, usługa IoT Hub zgłasza ten wyjątek.

Jeśli usługa IoT Hub nie otrzyma powiadomienia w ciągu jednego minutowego limitu czasu blokady, ustawi komunikat z powrotem na stan w kolejce . Urządzenie może ponownie podjąć próbę odebrania komunikatu. Aby zapobiec wystąpieniu błędu w przyszłości, zaimplementuj logikę po stronie urządzenia, aby ukończyć komunikat w ciągu jednej minuty od odebrania komunikatu. Nie można zmienić limitu czasu jednej minuty.

Wyjątek ograniczania 429001

Może się okazać, że żądania do usługi IoT Hub kończą się niepowodzeniem z powodu błędu 429001 ThrottlingException.

Ten błąd występuje, gdy limity ograniczania przepustowości usługi IoT Hub zostały przekroczone dla żądanej operacji.

Aby rozwiązać ten błąd, sprawdź, czy osiągasz limit ograniczania przepustowości, porównując metrykę prób wysyłania komunikatów telemetrycznych z limitami określonymi powyżej. Możesz również sprawdzić metrykę Liczba błędów ograniczania przepustowości. Aby uzyskać informacje o tych metrykach, zobacz Metryki telemetrii urządzenia. Aby uzyskać informacje o sposobie używania metryk do monitorowania centrum IoT Hub, zobacz Monitorowanie usługi IoT Hub.

Usługa IoT Hub zwraca wyjątek 429 ThrottlingException dopiero po przekroczeniu limitu przez zbyt długi okres. Dzieje się tak, aby komunikaty nie zostały porzucone, jeśli centrum IoT będzie kierować się ruchem z rozerwaniem. W międzyczasie usługa IoT Hub przetwarza komunikaty z ograniczoną przepływnością, co może być powolne, jeśli lista prac zawiera zbyt wiele danych. Aby dowiedzieć się więcej, zobacz Kształtowanie ruchu w usłudze IoT Hub.

Rozważ przeskalowanie w górę usługi IoT Hub, jeśli przekraczasz limit przydziału lub limit ograniczania przepustowości.

500xxx błędy wewnętrzne

Może się okazać, że żądanie do usługi IoT Hub kończy się niepowodzeniem z powodu błędu rozpoczynającego się od 500 i/lub pewnego rodzaju "błędu serwera". Oto kilka możliwości:

  • 500001 ServerError: usługa IoT Hub napotkała problem po stronie serwera.

  • 500008 GenericTimeout: usługa IoT Hub nie mogła ukończyć żądania połączenia przed przekroczeniem limitu czasu.

  • ServiceUnavailable (brak kodu błędu): usługa IoT Hub napotkała błąd wewnętrzny.

  • InternalServerError (brak kodu błędu): usługa IoT Hub napotkała błąd wewnętrzny.

Może istnieć wiele przyczyn odpowiedzi błędu 500xxx. We wszystkich przypadkach problem jest najprawdopodobniej przejściowy. Chociaż zespół usługi IoT Hub ciężko pracuje nad utrzymaniem umowy SLA, małe podzestawy węzłów usługi IoT Hub mogą czasami doświadczać błędów przejściowych. Gdy urządzenie próbuje nawiązać połączenie z węzłem, w którym występują problemy, zostanie wyświetlony ten błąd.

Aby wyeliminować błędy 500xxx, wykonaj ponowną próbę z urządzenia. Aby automatycznie zarządzać ponowną próbą, upewnij się, że używasz najnowszej wersji zestawów SDK usługi Azure IoT. Aby uzyskać najlepsze rozwiązanie dotyczące obsługi błędów przejściowych i ponawiania prób, zobacz Obsługa błędów przejściowych.

Jeśli problem będzie się powtarzać, sprawdź kondycję zasobów i stan platformy Azure, aby sprawdzić, czy usługa IoT Hub ma znany problem. Możesz również użyć funkcji ręcznego trybu failover.

Jeśli nie ma znanych problemów i problem będzie nadal występować, skontaktuj się z pomocą techniczną w celu przeprowadzenia dalszych badań.

Nie można odnaleźć partycji 503003

Może się okazać, że żądania do usługi IoT Hub kończą się niepowodzeniem z powodu błędu 503003 PartitionNotFound.

Ten błąd jest wewnętrzny w usłudze IoT Hub i prawdopodobnie jest przejściowy. Zobacz Wewnętrzne błędy serwera usługi IoT Hub.

Aby rozwiązać ten błąd, zobacz Wewnętrzne błędy serwera usługi IoT Hub.

limit czasu bramy 504101

Podczas próby wywołania metody bezpośredniej z usługi IoT Hub do urządzenia może być widoczne, że żądanie kończy się niepowodzeniem z powodu błędu 504101 GatewayTimeout.

Ten błąd występuje, ponieważ usługa IoT Hub napotkała błąd i nie mogła potwierdzić, czy metoda bezpośrednia została ukończona przed przekroczeniem limitu czasu. Lub w przypadku korzystania ze starszej wersji zestawu AZURE IoT C# SDK (<1.19.0) połączenie AMQP między urządzeniem a usługą IoT Hub można usunąć w trybie dyskretnym z powodu usterki.

Aby rozwiązać ten błąd, spróbuj ponownie lub uaktualnij go do najnowszej wersji zestawu AZURE IOT C# SDK.