Udostępnij za pośrednictwem


Rozwiązania typowych problemów związanych z usługą Azure IoT Edge

Dotyczy ikony:yes IoT Edge 1.1

Ważne

IoT Edge 1.1 data zakończenia wsparcia wynosiła 13 grudnia 2022 r. Zapoznaj się z cyklem życia produktów firmy Microsoft, aby uzyskać informacje na temat sposobu obsługi tego produktu lub interfejsu API albo tej usługi lub technologii. Aby uzyskać więcej informacji na temat aktualizowania do najnowszej wersji IoT Edge, zobacz Update IoT Edge.

Skorzystaj z tego artykułu, aby zidentyfikować i rozwiązać typowe problemy podczas korzystania z rozwiązań IoT Edge. Jeśli potrzebujesz informacji na temat znajdowania dzienników i błędów z urządzenia IoT Edge, zobacz Rozwiązywanie problemów z urządzeniem IoT Edge.

Aprowizowanie i wdrażanie

Moduł usługi IoT Edge jest pomyślnie wdrażany, a następnie znika z urządzenia

Objawy

Po ustawieniu modułów dla urządzenia IoT Edge moduły zostaną pomyślnie wdrożone, ale po kilku minutach znikną z urządzenia i ze szczegółów urządzenia w Azure Portal. Inne moduły niż zdefiniowane mogą być również wyświetlane na urządzeniu.

Przyczyna

Jeśli wdrożenie automatyczne jest przeznaczone dla urządzenia, ma priorytet nad ręcznym ustawianiem modułów dla jednego urządzenia. Funkcja Ustawianie modułów w Azure Portal lub Tworzenie wdrożenia dla funkcji pojedynczego urządzenia w Visual Studio Code zostanie wdrożona na chwilę. Zobaczysz moduły zdefiniowane podczas uruchamiania na urządzeniu. Następnie priorytet wdrożenia automatycznego rozpoczyna się i zastępuje żądane właściwości urządzenia.

Rozwiązanie

Używaj tylko jednego typu mechanizmu wdrażania na urządzenie— wdrożenia automatycznego lub poszczególnych wdrożeń urządzeń. Jeśli masz wiele wdrożeń automatycznych przeznaczonych dla urządzenia, możesz zmienić priorytet lub opisy docelowe, aby upewnić się, że poprawne dotyczy danego urządzenia. Możesz również zaktualizować bliźniaczą reprezentację urządzenia, aby nie odpowiadać opisowi docelowego wdrożenia automatycznego.

Aby uzyskać więcej informacji, zobacz Omówienie IoT Edge automatycznych wdrożeń dla pojedynczych urządzeń lub na dużą skalę.

Nie można pobrać dzienników środowiska uruchomieniowego IoT Edge w systemie Windows

Objawy

Podczas korzystania z systemu Get-WinEvent Windows otrzymujesz wyjątek EventLogException.

Przyczyna

Get-WinEvent Polecenie programu PowerShell opiera się na wpisie rejestru, który ma być obecny w celu znalezienia dzienników według określonego ProviderNameelementu .

Rozwiązanie

Ustaw wpis rejestru dla demona IoT Edge. Utwórz plik iotedge.reg z następującą zawartością i zaimportuj go do rejestru systemu Windows, klikając go dwukrotnie lub używając reg import iotedge.reg polecenia:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\iotedged]
"CustomSource"=dword:00000001
"EventMessageFile"="C:\\ProgramData\\iotedge\\iotedged.exe"
"TypesSupported"=dword:00000007

Błąd klienta usługi DPS

Objawy

IoT Edge nie można uruchomić komunikatu o błędziefailed to provision with IoT Hub, and no valid device backup was found dps client error.

Przyczyna

Rejestracja grupowa służy do aprowizowania urządzenia IoT Edge do IoT Hub. Urządzenie IoT Edge jest przenoszone do innego centrum. Rejestracja jest usuwana w usłudze DPS. Nowa rejestracja jest tworzona w usłudze DPS dla nowego centrum. Urządzenie nie jest ponownie aprowizacji.

Rozwiązanie

  1. Sprawdź, czy poświadczenia usługi DPS są poprawne.
  2. Zastosuj konfigurację przy użyciu polecenia sudo iotedge apply config.
  3. Jeśli urządzenie nie zostało ponownie aprowizacji, uruchom ponownie urządzenie przy użyciu polecenia sudo iotedge system restart.
  4. Jeśli urządzenie nie zostało ponownie aprowizacji, wymuś ponowne aprowizowanie przy użyciu polecenia sudo iotedge system reprovision.

Aby automatycznie ponownie aprowizacji, ustaw dynamic_reprovisioning: true wartość w pliku konfiguracji urządzenia. Ustawienie tej flagi na wartość true decyduje się na funkcję dynamicznego ponownego aprowizacji. IoT Edge wykrywa sytuacje, w których urządzenie zostało ponownie aprowizowane w chmurze, monitorując własne połączenie IoT Hub pod kątem niektórych błędów. IoT Edge reaguje, zamykając wszystkie moduły usługi Edge i samą siebie. Przy następnym uruchomieniu demona spróbuje ponownie aprowizować to urządzenie za pomocą platformy Azure, aby otrzymać nowe informacje o aprowizacji IoT Hub.

W przypadku korzystania z aprowizacji zewnętrznej demon powiadomi również zewnętrzny punkt końcowy aprowizacji o zdarzeniu ponownego aprowizacji przed zamknięciem. Aby uzyskać więcej informacji, zobacz pojęcia dotyczące ponownego aprowizacji urządzeń IoT Hub.

Środowisko uruchomieniowe usługi IoT Edge

agent IoT Edge zatrzymuje się po minucie

Objawy

Moduł edgeAgent uruchamia się i działa pomyślnie przez około minutę, a następnie zatrzymuje się. Dzienniki wskazują, że agent IoT Edge próbuje nawiązać połączenie z IoT Hub za pośrednictwem protokołu AMQP, a następnie próbuje nawiązać połączenie przy użyciu protokołu AMQP za pośrednictwem protokołu WebSocket. W przypadku awarii agent IoT Edge kończy działanie.

Przykładowe dzienniki edgeAgent:

2017-11-28 18:46:19 [INF] - Starting module management agent.
2017-11-28 18:46:19 [INF] - Version - 1.0.7516610 (03c94f85d0833a861a43c669842f0817924911d5)
2017-11-28 18:46:19 [INF] - Edge agent attempting to connect to IoT Hub via AMQP...
2017-11-28 18:46:49 [INF] - Edge agent attempting to connect to IoT Hub via AMQP over WebSocket...

Przyczyna

Konfiguracja sieci w sieci hosta uniemożliwia agentowi IoT Edge dotarcie do sieci. Agent najpierw próbuje nawiązać połączenie za pośrednictwem protokołu AMQP (port 5671). Jeśli połączenie zakończy się niepowodzeniem, spróbuje uruchomić zestawy WebSockets (port 443).

Środowisko uruchomieniowe usługi IoT Edge konfiguruje sieć dla każdego z modułów na potrzeby komunikacji. W systemie Linux ta sieć jest siecią mostka. W systemie Windows jest używany translator adresów sieciowych. Ten problem występuje częściej na urządzeniach z systemem Windows używających kontenerów systemu Windows korzystających z sieci NAT.

Rozwiązanie

Upewnij się, że istnieje trasa do Internetu dla adresów IP przypisanych do tej sieci mostka/translatora adresów sieciowych. Czasem konfiguracja sieci VPN na hoście przesłania sieć usługi IoT Edge.

Moduł agenta usługi Edge zgłasza błąd „empty config file”, a moduły nie są uruchamiane na urządzeniu

Objawy

Urządzenie ma problemy z uruchamianiem modułów zdefiniowanych we wdrożeniu. Tylko edgeAgent jest uruchomiony, ale stale raportuje "pusty plik konfiguracji...".

Przyczyna

Domyślnie IoT Edge uruchamia moduły we własnej izolowanej sieci kontenerów. Urządzenie może mieć problemy z rozpoznawaniem nazw DNS w tej sieci prywatnej.

Rozwiązanie

Opcja 1. Ustawianie serwera DNS w ustawieniach aparatu kontenera

Określ serwer DNS dla środowiska w ustawieniach aparatu kontenera, który będzie stosowany do wszystkich modułów kontenerów uruchomionych przez aparat. Utwórz plik o nazwie daemon.json, a następnie określ serwer DNS do użycia. Przykład:

{
    "dns": ["1.1.1.1"]
}

Ten serwer DNS jest ustawiony na publicznie dostępną usługę DNS. Jednak niektóre sieci, takie jak sieci firmowe, mają zainstalowane własne serwery DNS i nie zezwalają na dostęp do publicznych serwerów DNS. W związku z tym, jeśli urządzenie brzegowe nie może uzyskać dostępu do publicznego serwera DNS, zastąp go dostępnym adresem serwera DNS.

Umieść daemon.json w odpowiedniej lokalizacji dla swojej platformy:

Platforma Lokalizacja
Linux /etc/docker
Host systemu Windows z kontenerami systemu Windows C:\ProgramData\iotedge-moby\config

Jeśli lokalizacja zawiera daemon.json już plik, dodaj do niego klucz DNS i zapisz plik.

Uruchom ponownie aparat kontenera, aby aktualizacje zaczęły obowiązywać.

Platforma Polecenie
Linux sudo systemctl restart docker
Windows (Administracja PowerShell) Restart-Service iotedge-moby -Force

Opcja 2. Ustawianie serwera DNS we wdrożeniu IoT Edge na moduł

Serwer DNS dla każdego modułu createOptions można ustawić we wdrożeniu IoT Edge. Przykład:

"createOptions": {
  "HostConfig": {
    "Dns": [
      "x.x.x.x"
    ]
  }
}

Ostrzeżenie

Jeśli używasz tej metody i określisz nieprawidłowy adres DNS, edgeAgent traci połączenie z IoT Hub i nie może odbierać nowych wdrożeń w celu rozwiązania problemu. Aby rozwiązać ten problem, możesz ponownie zainstalować środowisko uruchomieniowe IoT Edge. Przed zainstalowaniem nowego wystąpienia IoT Edge należy usunąć wszystkie kontenery edgeAgent z poprzedniej instalacji.

Należy również ustawić tę konfigurację dla modułów edgeAgent i edgeHub .

Agent usługi IoT Edge nie ma dostępu do obrazu modułu (błąd 403)

Objawy

Nie można uruchomić kontenera, a dzienniki edgeAgent zgłaszają błąd 403.

Przyczyna

Moduł agenta IoT Edge nie ma uprawnień dostępu do obrazu modułu.

Rozwiązanie

Upewnij się, że poświadczenia rejestru kontenerów są poprawne manifest wdrożenia urządzenia.

Nie można uruchomić centrum usługi Edge

Objawy

Nie można uruchomić modułu edgeHub. W dziennikach może zostać wyświetlony komunikat podobny do jednego z następujących błędów:

One or more errors occurred.
(Docker API responded with status code=InternalServerError, response=
{\"message\":\"driver failed programming external connectivity on endpoint edgeHub (6a82e5e994bab5187939049684fb64efe07606d2bb8a4cc5655b2a9bad5f8c80):
Error starting userland proxy: Bind for 0.0.0.0:443 failed: port is already allocated\"}\n)

Lub

info: edgelet_docker::runtime -- Starting module edgeHub...
warn: edgelet_utils::logging -- Could not start module edgeHub
warn: edgelet_utils::logging --     caused by: failed to create endpoint edgeHub on network nat: hnsCall failed in Win32:  
        The process cannot access the file because it is being used by another process. (0x20)

Przyczyna

Inny proces na maszynie hosta powiązał port, który moduł edgeHub próbuje powiązać. Koncentrator IoT Edge mapuje porty 443, 5671 i 8883 do użycia w scenariuszach bramy. Nie można uruchomić modułu, jeśli inny proces jest już powiązany z jednym z tych portów.

Rozwiązanie

Ten problem można rozwiązać na dwa sposoby:

Jeśli urządzenie IoT Edge działa jako urządzenie bramy, musisz znaleźć i zatrzymać proces korzystający z portu 443, 5671 lub 8883. Błąd portu 443 zwykle oznacza, że drugi proces jest serwerem sieci Web.

Jeśli nie musisz używać urządzenia IoT Edge jako bramy, możesz usunąć powiązania portów z opcji tworzenia modułu edgeHub. Opcje tworzenia można zmienić w Azure Portal lub bezpośrednio w pliku deployment.json.

W witrynie Azure Portal:

  1. Przejdź do centrum IoT i wybierz pozycję Urządzenia w menu Zarządzanie urządzeniami .

  2. Wybierz urządzenie IoT Edge, które chcesz zaktualizować.

  3. Wybierz pozycję Ustaw moduły.

  4. Wybierz pozycję Ustawienia środowiska uruchomieniowego.

  5. W ustawieniach modułu Edge Hub usuń wszystko z pola tekstowego Tworzenie opcji .

  6. Zapisz zmiany i utwórz wdrożenie.

W pliku deployment.json:

  1. Otwórz plik deployment.json zastosowany do urządzenia IoT Edge.

  2. edgeHub Znajdź ustawienia w sekcji właściwości żądanej usługi edgeAgent:

    "edgeHub": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
            "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  3. createOptions Usuń wiersz i przecinek końcowy na końcu image wiersza przed nim:

    "edgeHub": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  4. Zapisz plik i ponownie zastosuj go do urządzenia IoT Edge.

Moduł IoT Edge nie może wysłać komunikatu do modułu edgeHub z powodu błędu 404

Objawy

Niestandardowy moduł IoT Edge nie może wysłać komunikatu do centrum IoT Edge z błędem 404Module not found. Środowisko uruchomieniowe IoT Edge wyświetla następujący komunikat w dziennikach:

Error: Time:Thu Jun  4 19:44:58 2018 File:/usr/sdk/src/c/provisioning_client/adapters/hsm_client_http_edge.c Func:on_edge_hsm_http_recv Line:364 executing HTTP request fails, status=404, response_buffer={"message":"Module not found"}u, 04 )

Przyczyna

Środowisko uruchomieniowe IoT Edge wymusza identyfikację procesu dla wszystkich modułów łączących się z usługą edgeHub ze względów bezpieczeństwa. Sprawdza, czy wszystkie komunikaty wysyłane przez moduł pochodzą z głównego identyfikatora procesu modułu. Jeśli komunikat jest wysyłany przez moduł z innego identyfikatora procesu niż początkowo ustalony, zostanie odrzucony komunikat z komunikatem o błędzie 404.

Rozwiązanie

Od wersji 1.0.7 wszystkie procesy modułu są autoryzowane do nawiązywania połączenia. Aby uzyskać więcej informacji, zobacz dziennik zmian wersji 1.0.7.

Jeśli uaktualnienie do wersji 1.0.7 nie jest możliwe, wykonaj następujące kroki. Upewnij się, że ten sam identyfikator procesu jest zawsze używany przez niestandardowy moduł IoT Edge do wysyłania komunikatów do usługi edgeHub. Na przykład pamiętaj, aby ENTRYPOINT zamiast polecenia w pliku platformy CMD Docker. Polecenie CMD prowadzi do jednego identyfikatora procesu dla modułu i innego identyfikatora procesu dla polecenia powłoki bash z uruchomionym głównym programem, ale ENTRYPOINT prowadzi do pojedynczego identyfikatora procesu.

Problemy ze stabilnością na mniejszych urządzeniach

Objawy

Problemy ze stabilnością mogą wystąpić na urządzeniach z ograniczonymi zasobami, takich jak Urządzenie Raspberry Pi, szczególnie w przypadku użycia jako bramy. Objawy obejmują wyjątki braku pamięci w module IoT Edge Hub, urządzenia podrzędne nie mogą nawiązać połączenia lub urządzenie nie wysyła komunikatów telemetrycznych po kilku godzinach.

Przyczyna

Koncentrator IoT Edge, który jest częścią środowiska uruchomieniowego IoT Edge, jest domyślnie zoptymalizowany pod kątem wydajności i próbuje przydzielić duże fragmenty pamięci. Ta optymalizacja nie jest idealna dla ograniczonych urządzeń brzegowych i może powodować problemy ze stabilnością.

Rozwiązanie

W przypadku centrum IoT Edge ustaw zmienną środowiskową OptimizeForPerformance na wartość false. Istnieją dwa sposoby ustawiania zmiennych środowiskowych:

W witrynie Azure Portal:

W IoT Hub wybierz urządzenie IoT Edge i na stronie szczegółów urządzenia, a następnie wybierz pozycję Ustawustawienia środowiska uruchomieniowegomodułów>. Utwórz zmienną środowiskową dla modułu centrum IoT Edge o nazwie OptimizeForPerformance ustawioną na wartość false.

OptimizeForPerformance ustawiono wartość false

W manifeście wdrożenia:

"edgeHub": {
  "type": "docker",
  "settings": {
    "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
    "createOptions": <snipped>
  },
  "env": {
    "OptimizeForPerformance": {
      "value": "false"
    }
  },

Demon zabezpieczeń nie mógł pomyślnie uruchomić

Objawy

Demon zabezpieczeń nie uruchamia się, a kontenery modułów nie są tworzone. edgeHub Moduły edgeAgentniestandardowe i inne nie są uruchamiane przez usługę IoT Edge. W aziot-edged dziennikach zostanie wyświetlony następujący błąd:

  • Demon nie może pomyślnie uruchomić: nie można uruchomić usługi zarządzania
  • przyczyna: wystąpił błąd ścieżki /var/run/iotedge/mgmt.sock
  • spowodowane przez: Odmowa uprawnień (błąd systemu operacyjnego 13)

Przyczyna

W przypadku wszystkich dystrybucji systemu Linux z wyjątkiem CentOS 7 domyślna konfiguracja IoT Edge polega na użyciu systemd aktywacji gniazda. Błąd uprawnień występuje, jeśli zmienisz plik konfiguracji, aby nie używać aktywacji gniazda, ale pozostaw adresy URL jako /var/run/iotedge/*.sock, ponieważ iotedge użytkownik nie może zapisać /var/run/iotedge , co oznacza, że nie może odblokować i zainstalować gniazd.

Rozwiązanie

Nie trzeba wyłączać aktywacji gniazd w dystrybucji, w której jest obsługiwana aktywacja gniazda. Jeśli jednak w ogóle nie chcesz używać aktywacji gniazd, umieść gniazda w /var/lib/iotedge/pliku .

  1. Uruchom polecenie systemctl disable iotedge.socket iotedge.mgmt.socket , aby wyłączyć jednostki gniazda, aby systemd nie uruchamiał ich niepotrzebnie
  2. Zmień konfigurację iotedge do użycia /var/lib/iotedge/*.sock w obu connect sekcjach i listen
  3. Jeśli masz już moduły, mają stare /var/run/iotedge/*.sock zamontowania, więc docker rm -f je.

Nie można uruchomić modułu z powodu niezgodności systemu operacyjnego

Objaw

Nie można uruchomić modułu edgeHub w IoT Edge wersji 1.1.

Przyczyna

Moduł systemu Windows używa wersji systemu Windows niezgodnej z wersją systemu Windows na hoście. IoT Edge kompilacja systemu Windows w wersji 1809 17763 jest wymagana jako warstwa podstawowa obrazu modułu, ale jest używana inna wersja.

Rozwiązanie

Sprawdź wersję różnych systemów operacyjnych Windows w temacie Rozwiązywanie problemów z niezgodnością obrazu hosta i kontenera. Jeśli systemy operacyjne są różne, zaktualizuj je do IoT Edge windows w wersji 1809 kompilacji 17763 i ponownie skompiluj obraz platformy Docker używany dla tego modułu.

Sieć

Działanie demona zabezpieczeń usługi IoT Edge kończy się niepowodzeniem z powodu nieprawidłowej nazwy hosta

Objawy

Próba sprawdzenia, czy dzienniki menedżera zabezpieczeń IoT Edge kończą się niepowodzeniem i wyświetla następujący komunikat:

Error parsing user input data: invalid hostname. Hostname cannot be empty or greater than 64 characters

Przyczyna

Środowisko uruchomieniowe IoT Edge może obsługiwać tylko nazwy hostów krótsze niż 64 znaki. Maszyny fizyczne zwykle nie mają długich nazw hostów, ale problem jest bardziej powszechny na maszynie wirtualnej. Automatycznie generowane nazwy hostów dla maszyn wirtualnych z systemem Windows hostowanych na platformie Azure, w szczególności, są długie.

Rozwiązanie

Po wyświetleniu tego błędu można go rozpoznać, konfigurując nazwę DNS maszyny wirtualnej, a następnie ustawiając nazwę DNS jako nazwę hosta w poleceniu instalacji.

  1. W Azure Portal przejdź do strony przeglądu maszyny wirtualnej.

  2. Wybierz pozycję Konfiguruj w obszarze Nazwa DNS. Jeśli maszyna wirtualna ma już skonfigurowaną nazwę DNS, nie musisz konfigurować nowej.

    Konfigurowanie nazwy DNS maszyny wirtualnej

  3. Podaj wartość etykiety nazwy DNS i wybierz pozycję Zapisz.

  4. Skopiuj nową nazwę DNS, która powinna być w formacie <DNSnamelabel>.< vmlocation.cloudapp.azure.com>.

  5. Na maszynie wirtualnej użyj następującego polecenia, aby skonfigurować środowisko uruchomieniowe IoT Edge o nazwie DNS:

    • W systemie Linux:

      sudo nano /etc/iotedge/config.yaml
      
    • W systemie Windows:

      notepad C:\ProgramData\iotedge\config.yaml
      

Moduł IoT Edge zgłasza błędy łączności

Objawy

IoT Edge moduły łączące się bezpośrednio z usługami w chmurze, w tym moduły środowiska uruchomieniowego, przestają działać zgodnie z oczekiwaniami i zwracają błędy dotyczące błędów połączenia lub sieci.

Przyczyna

Kontenery korzystają z przekazywania pakietów IP w celu nawiązania połączenia z Internetem, aby mogły komunikować się z usługami w chmurze. Przekazywanie pakietów IP jest domyślnie włączone na platformie Docker, ale jeśli zostanie wyłączone, wszystkie moduły łączące się z usługami w chmurze nie będą działać zgodnie z oczekiwaniami. Aby uzyskać więcej informacji, zobacz Omówienie komunikacji kontenerów w dokumentacji platformy Docker.

Rozwiązanie

Aby włączyć przekazywanie pakietów IP, wykonaj następujące kroki.

W systemie Windows:

  1. Otwórz aplikację Uruchom .

  2. Wprowadź regedit tekst w polu tekstowym i wybierz przycisk OK.

  3. W oknie Edytor rejestru przejdź do HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.

  4. Wyszukaj parametr IPEnableRouter .

    1. Jeśli parametr istnieje, ustaw wartość parametru na 1.

    2. Jeśli parametr nie istnieje, dodaj go jako nowy parametr z następującymi ustawieniami:

      Ustawienie Wartość
      Nazwa IPEnableRouter
      Typ REG_DWORD
      Wartość 1
  5. Zamknij okno edytora rejestru.

  6. Uruchom ponownie system, aby zastosować zmiany.

W systemie Linux:

  1. Otwórz plik sysctl.conf .

    sudo nano /etc/sysctl.conf
    
  2. Dodaj następujący wiersz do pliku .

    net.ipv4.ip_forward=1
    
  3. Zapisz i zamknij plik.

  4. Uruchom ponownie usługę sieciową i usługę platformy Docker, aby zastosować zmiany.

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.