Rozwiązywanie problemów z urządzeniem usługi IoT Edge

Dotyczy:IoT Edge 1.4 checkmark IoT Edge 1.4

Ważne

Azure IoT Edge1.4 jest obsługiwaną wersją. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Jeśli wystąpią problemy z uruchamianiem usługi Azure IoT Edge w danym środowisku, skorzystaj z tego artykułu jako przewodnika po rozwiązywaniu problemów i diagnostyki.

Uruchom polecenie "check"

Pierwszym krokiem podczas rozwiązywania problemów z usługą IoT Edge powinno być użycie check polecenia , które uruchamia kolekcję testów konfiguracji i łączności w przypadku typowych problemów. Polecenie check jest dostępne w wersji 1.0.7 lub nowszej.

Uwaga

Narzędzie do rozwiązywania problemów nie może uruchomić funkcji łączności sprawdza, czy urządzenie usługi IoT Edge znajduje się za serwerem proxy.

Możesz uruchomić polecenie check w następujący sposób lub dołączyć flagę --help , aby wyświetlić pełną listę opcji:

sudo iotedge check

Narzędzie do rozwiązywania problemów uruchamia wiele testów posortowanych w następujących trzech kategoriach:

  • Testy konfiguracji sprawdzają szczegóły, które mogą uniemożliwić urządzeniom usługi IoT Edge nawiązywanie połączenia z chmurą, w tym problemy z plikiem konfiguracji i aparatem kontenera.
  • Połączenie ion sprawdza, czy środowisko uruchomieniowe usługi IoT Edge może uzyskiwać dostęp do portów na urządzeniu hosta i czy wszystkie składniki usługi IoT Edge mogą łączyć się z usługą IoT Hub. Ten zestaw testów zwraca błędy, jeśli urządzenie usługi IoT Edge znajduje się za serwerem proxy.
  • Testy gotowości produkcyjnej szukają zalecanych najlepszych rozwiązań produkcyjnych, takich jak stan certyfikatów urzędu certyfikacji urządzenia i konfiguracja pliku dziennika modułu.

Narzędzie do sprawdzania usługi IoT Edge używa kontenera do uruchamiania jego diagnostyki. Obraz kontenera, mcr.microsoft.com/azureiotedge-diagnostics:latest, jest dostępny za pośrednictwem usługi Microsoft Container Registry. Jeśli musisz uruchomić kontrolę na urządzeniu bez bezpośredniego dostępu do Internetu, urządzenia będą potrzebować dostępu do obrazu kontenera.

W scenariuszu korzystającym z zagnieżdżonych urządzeń usługi IoT Edge można uzyskać dostęp do obrazu diagnostycznego na urządzeniach podrzędnych, rozsyłając obraz ściągnięty przez urządzenia nadrzędne.

sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:<port_for_api_proxy_module>/azureiotedge-diagnostics:1.2

Aby uzyskać informacje na temat każdego z testów diagnostycznych uruchamianych przez to narzędzie, w tym czynności, które należy wykonać w przypadku wystąpienia błędu lub ostrzeżenia, zobacz Testy rozwiązywania problemów z usługą IoT Edge.

Zbieranie informacji o debugowaniu za pomocą polecenia "support-bundle"

Gdy musisz zebrać dzienniki z urządzenia usługi IoT Edge, najwygodniejszym sposobem jest użycie support-bundle polecenia . Domyślnie to polecenie zbiera moduł, menedżera zabezpieczeń usługi IoT Edge i dzienniki aparatu kontenera, iotedge check dane wyjściowe JSON i inne przydatne informacje debugowania. Kompresuje je do pojedynczego pliku w celu łatwego udostępniania. Polecenie support-bundle jest dostępne w wersji 1.0.9 lub nowszej.

support-bundle Uruchom polecenie z flagą , --since aby określić, jak długo od przeszłości chcesz pobrać dzienniki. Na przykład 6h dzienniki będą uzyskiwane od ostatnich sześciu godzin, 6d od ostatnich sześciu dni, 6m od ostatnich sześciu minut itd. Dołącz flagę, --help aby wyświetlić pełną listę opcji.

sudo iotedge support-bundle --since 6h

Domyślnie polecenie support-bundle tworzy plik zip o nazwie support_bundle.zip w katalogu, w którym jest wywoływane polecenie. Użyj flagi --output , aby określić inną ścieżkę lub nazwę pliku dla danych wyjściowych.

Aby uzyskać więcej informacji na temat polecenia, wyświetl jego informacje pomocy.

iotedge support-bundle --help

Możesz również użyć wbudowanej metody bezpośredniej wywołania UploadSupportBundle , aby przekazać dane wyjściowe polecenia support-bundle do usługi Azure Blob Storage.

Ostrzeżenie

Dane wyjściowe polecenia support-bundle mogą zawierać nazwy hostów, urządzeń i modułów, informacje rejestrowane przez moduły itp. Pamiętaj o tym, jeśli udostępniasz dane wyjściowe na forum publicznym.

Przeglądanie metryk zebranych ze środowiska uruchomieniowego

Moduły środowiska uruchomieniowego usługi IoT Edge generują metryki ułatwiające monitorowanie i zrozumienie kondycji urządzeń usługi IoT Edge. Dodaj moduł moduł zbierający metryki do wdrożeń, aby obsługiwać zbieranie tych metryk i wysyłanie ich do chmury w celu łatwiejszego monitorowania.

Aby uzyskać więcej informacji, zobacz Zbieranie i transport metryk.

Sprawdzanie wersji usługi IoT Edge

Jeśli używasz starszej wersji usługi IoT Edge, uaktualnienie może rozwiązać problem. Narzędzie iotedge check sprawdza, czy demon zabezpieczeń usługi IoT Edge jest najnowszą wersją, ale nie sprawdza wersji modułów centrum i agenta usługi IoT Edge. Aby sprawdzić wersję modułów środowiska uruchomieniowego na urządzeniu, użyj poleceń iotedge logs edgeAgent i iotedge logs edgeHub. Numer wersji jest deklarowany w dziennikach podczas uruchamiania modułu.

Aby uzyskać instrukcje dotyczące sposobu aktualizowania urządzenia, zobacz Aktualizowanie demona zabezpieczeń i środowiska uruchomieniowego usługi IoT Edge.

Weryfikowanie instalacji usługi IoT Edge na urządzeniach

Możesz zweryfikować instalację usługi IoT Edge na urządzeniach, monitorując bliźniaczą reprezentację modułu edgeAgent.

Aby uzyskać najnowszą reprezentację modułu edgeAgent, uruchom następujące polecenie w usłudze Azure Cloud Shell:

az iot hub module-twin show --device-id <edge_device_id> --module-id '$edgeAgent' --hub-name <iot_hub_name>

To polecenie wyświetli wszystkie zgłoszone właściwości edgeAgent. Oto kilka przydatnych monitorów stanu urządzenia:

  • stan środowiska uruchomieniowego
  • czas rozpoczęcia środowiska uruchomieniowego
  • czas ostatniego zakończenia środowiska uruchomieniowego
  • liczba ponownych uruchomień środowiska uruchomieniowego

Sprawdzanie stanu menedżera zabezpieczeń usługi IoT Edge i jego dzienników

Menedżer zabezpieczeń usługi IoT Edge jest odpowiedzialny za operacje, takie jak inicjowanie systemu usługi IoT Edge podczas uruchamiania i aprowizowania urządzeń. Jeśli usługa IoT Edge nie uruchamia się, dzienniki menedżera zabezpieczeń mogą dostarczyć przydatnych informacji.

  • Wyświetl stan usług systemowych usługi IoT Edge:

    sudo iotedge system status
    
  • Wyświetl dzienniki usług systemowych usługi IoT Edge:

    sudo iotedge system logs -- -f
    
  • Włącz dzienniki na poziomie debugowania, aby wyświetlić bardziej szczegółowe dzienniki usług systemowych usługi IoT Edge:

    1. Włącz dzienniki na poziomie debugowania.

      sudo iotedge system set-log-level debug
      sudo iotedge system restart
      
    2. Przejdź z powrotem do domyślnych dzienników na poziomie informacji po debugowaniu.

      sudo iotedge system set-log-level info
      sudo iotedge system restart
      

Sprawdzanie dzienników kontenera pod kątem problemów

Po uruchomieniu demona zabezpieczeń usługi IoT Edge przyjrzyj się dziennikom kontenerów, aby wykryć problemy. Zacznij od wdrożonych kontenerów, a następnie przyjrzyj się kontenerom tworzącym środowisko uruchomieniowe usługi IoT Edge: edgeAgent i edgeHub. Dzienniki agenta usługi IoT Edge zwykle zawierają informacje na temat cyklu życia każdego kontenera. Dzienniki centrum usługi IoT Edge zawierają informacje dotyczące obsługi komunikatów i routingu.

Dzienniki kontenera można pobrać z kilku miejsc:

Czyszczenie dzienników kontenerów

Domyślnie aparat kontenera Moby nie ustawia limitów rozmiaru dziennika kontenera. W czasie obszerne dzienniki mogą prowadzić do wypełnienia urządzenia dziennikami i wyczerpania miejsca na dysku. Jeśli duże dzienniki kontenerów wpływają na wydajność urządzenia usługi IoT Edge, użyj następującego polecenia, aby wymusić usunięcie kontenera wraz z powiązanymi dziennikami.

Jeśli nadal rozwiązujesz problemy, zaczekaj na sprawdzenie dzienników kontenerów, aby wykonać ten krok.

Ostrzeżenie

Jeśli wymusisz usunięcie kontenera edgeHub, gdy ma on nieuprawnione listy prac komunikatów i nie skonfigurowano magazynu hostów, niezaliczone komunikaty zostaną utracone.

docker rm --force <container name>

W przypadku bieżących scenariuszy konserwacji i produkcji dzienników skonfiguruj domyślny sterownik rejestrowania.

Wyświetlanie komunikatów przechodzących przez centrum usługi IoT Edge

Komunikaty przechodzące przez centrum usługi IoT Edge można wyświetlać i zbierać szczegółowe informacje z pełnych dzienników z kontenerów środowiska uruchomieniowego. Aby włączyć pełne dzienniki dla tych kontenerów, ustaw zmienną RuntimeLogLevel środowiskową w manifeście wdrożenia.

Aby wyświetlić komunikaty przechodzące przez centrum usługi IoT Edge, ustaw zmienną RuntimeLogLevel środowiskową na debug wartość dla modułu edgeHub.

Zarówno moduły edgeHub, jak i edgeAgent mają tę zmienną środowiskową dziennika środowiska uruchomieniowego z wartością domyślną ustawioną na info. Ta zmienna środowiskowa może przyjmować następujące wartości:

  • Śmiertelne
  • error
  • ostrzeżenie
  • informacje o
  • debug
  • tryb pełny

Możesz również sprawdzić komunikaty wysyłane między usługą IoT Hub i urządzeniami IoT. Wyświetl te komunikaty przy użyciu rozszerzenia usługi Azure IoT Hub dla programu Visual Studio Code. Aby uzyskać więcej informacji, zobacz Handy tool when you develop with Azure IoT (Przydatne narzędzie podczas opracowywania za pomocą usługi Azure IoT).

Ponowne uruchamianie kontenerów

Po zbadaniu dzienników i komunikatów w celu uzyskania informacji możesz spróbować ponownie uruchomić kontenery.

Na urządzeniu usługi IoT Edge użyj następujących poleceń, aby ponownie uruchomić moduły:

iotedge restart <container name>

Uruchom ponownie kontenery środowiska uruchomieniowego usługi IoT Edge:

iotedge restart edgeAgent && iotedge restart edgeHub

Moduły można również ponownie uruchomić zdalnie w witrynie Azure Portal. Aby uzyskać więcej informacji, zobacz Monitorowanie i rozwiązywanie problemów z urządzeniami usługi IoT Edge w witrynie Azure Portal.

Sprawdzanie reguł konfiguracji zapory i portów

Usługa Azure IoT Edge umożliwia komunikację z serwera lokalnego do chmury platformy Azure przy użyciu obsługiwanych protokołów usługi IoT Hub. Zobacz wybieranie protokołu komunikacyjnego. W przypadku zwiększonych zabezpieczeń kanały komunikacyjne między usługą Azure IoT Edge i usługą Azure IoT Hub są zawsze skonfigurowane jako wychodzące. Ta konfiguracja jest oparta na wzorcu komunikacji asystowanej usług, który minimalizuje obszar ataków dla złośliwej jednostki do zbadania. Komunikacja przychodząca jest wymagana tylko w określonych scenariuszach , w których usługa Azure IoT Hub musi wypychać komunikaty do urządzenia usługi Azure IoT Edge. Komunikaty chmura-urządzenie są chronione przy użyciu bezpiecznych kanałów TLS i można je dodatkowo zabezpieczyć przy użyciu certyfikatów X.509 i modułów urządzeń TPM. Menedżer zabezpieczeń usługi Azure IoT Edge określa, w jaki sposób można ustanowić tę komunikację, zobacz Menedżer zabezpieczeń usługi IoT Edge.

Chociaż usługa IoT Edge zapewnia rozszerzoną konfigurację zabezpieczania środowiska uruchomieniowego usługi Azure IoT Edge i wdrożonych modułów, nadal zależy od podstawowej konfiguracji maszyny i sieci. W związku z tym konieczne jest upewnienie się, że skonfigurowano odpowiednie reguły sieci i zapory na potrzeby bezpiecznej komunikacji brzegowej z chmurą. Poniższa tabela może służyć jako wskazówka podczas konfigurowania reguł zapory dla serwerów bazowych, na których jest hostowane środowisko uruchomieniowe usługi Azure IoT Edge:

Protokół Port Przychodzące Wychodzące Wskazówki
MQTT 8883 ZABLOKOWANE (ustawienie domyślne) ZABLOKOWANE (ustawienie domyślne)
  • Skonfiguruj wychodzące (wychodzące) jako otwarte podczas korzystania z protokołu MQTT jako protokołu komunikacyjnego.
  • 1883 dla MQTT nie jest obsługiwany przez usługę IoT Edge.
  • Połączenia przychodzące (przychodzące) powinny być blokowane.
AMQP 5671 ZABLOKOWANE (ustawienie domyślne) OPEN (ustawienie domyślne)
  • Domyślny protokół komunikacyjny dla usługi IoT Edge.
  • Należy skonfigurować jako Open, jeśli usługa Azure IoT Edge nie jest skonfigurowana dla innych obsługiwanych protokołów lub protokół AMQP jest wymaganym protokołem komunikacyjnym.
  • 5672 dla protokołu AMQP nie jest obsługiwane przez usługę IoT Edge.
  • Blokuj ten port, gdy usługa Azure IoT Edge używa innego obsługiwanego protokołu usługi IoT Hub.
  • Połączenia przychodzące (przychodzące) powinny być blokowane.
HTTPS 443 ZABLOKOWANE (ustawienie domyślne) OPEN (ustawienie domyślne)
  • Skonfiguruj wychodzące (wychodzące) jako Otwarte w wersji 443 na potrzeby aprowizacji usługi IoT Edge. Ta konfiguracja jest wymagana w przypadku używania skryptów ręcznych lub usługi Azure IoT Device Provisioning Service (DPS).
  • Połączenie przychodzące (przychodzące) powinno być otwarte tylko w przypadku określonych scenariuszy:
    • Jeśli masz przezroczystą bramę z urządzeniami podrzędnymi, które mogą wysyłać żądania metod. W takim przypadku port 443 nie musi być otwarty dla sieci zewnętrznych, aby nawiązać połączenie z usługą IoTHub lub zapewnić usługi IoTHub za pośrednictwem usługi Azure IoT Edge. W związku z tym reguła przychodząca może być ograniczona tylko do otwierania ruchu przychodzącego (przychodzącego) z sieci wewnętrznej.
    • W przypadku scenariuszy klient-urządzenie (C2D).
  • 80 dla protokołu HTTP nie jest obsługiwane przez usługę IoT Edge.
  • Jeśli protokoły inne niż HTTP (na przykład AMQP lub MQTT) nie mogą być skonfigurowane w przedsiębiorstwie; wiadomości można wysyłać za pośrednictwem obiektów WebSocket. Port 443 będzie używany do komunikacji protokołu WebSocket w tym przypadku.

Ostateczność: zatrzymywanie i ponowne tworzenie wszystkich kontenerów

Czasami system może wymagać znacznej specjalnej modyfikacji w celu pracy z istniejącymi ograniczeniami sieci lub systemu operacyjnego. Na przykład system może wymagać innej instalacji dysku danych i ustawień serwera proxy. Jeśli próbowano wykonać wszystkie poprzednie kroki i nadal występują błędy kontenera, pamięć podręczna systemu platformy Docker lub utrwalone ustawienia sieciowe mogą nie być aktualne z najnowszą ponowną konfiguracją. W takim przypadku opcja ostateczności polega na korzystaniu z docker prune opcji uzyskania czystego początku od podstaw.

Następujące polecenie zatrzymuje system usługi IoT Edge (a tym samym wszystkie kontenery), używa opcji "all" i "volume" w docker prune celu usunięcia wszystkich kontenerów i woluminów. Przejrzyj ostrzeżenie, że polecenie powoduje problemy i potwierdź y je, gdy wszystko będzie gotowe.

sudo iotedge system stop
docker system prune --all --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

Uruchom ponownie system. Aby zapewnić bezpieczeństwo, zastosuj dowolną potencjalnie pozostałą konfigurację i uruchom system za pomocą jednego polecenia.

sudo iotedge config apply

Poczekaj kilka minut i sprawdź ponownie.

sudo iotedge list

Następne kroki

Uważasz, że znaleziono usterkę platformy IoT Edge? Prześlij problem , abyśmy mogli kontynuować ulepszanie.

Jeśli masz więcej pytań, utwórz wniosek o pomoc techniczną, aby uzyskać pomoc.