Udostępnij za pośrednictwem


Rozwiązania typowych problemów dotyczących usługi Azure IoT Edge

Uwaga

W tym artykule odwołuje się do systemu CentOS — dystrybucji systemu Linux, która jest stanem End Of Life (EOL). Rozważ odpowiednie użycie i planowanie. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące zakończenia życia systemu CentOS.

Dotyczy: Znacznik wyboru usługi IoT Edge 1.5 IoT Edge 1.5 Znacznik wyboru usługi IoT Edge 1.4 IoT Edge 1.4

Ważne

Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4 LTS. Usługa IoT Edge 1.4 LTS kończy się 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Skorzystaj z tego artykułu, aby zidentyfikować i rozwiązać typowe problemy podczas korzystania z rozwiązań usługi IoT Edge. Jeśli potrzebujesz informacji na temat znajdowania dzienników i błędów z urządzenia usługi IoT Edge, zobacz Rozwiązywanie problemów z urządzeniem usługi 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 usługi IoT Edge moduły zostaną pomyślnie wdrożone, ale po kilku minutach znikną z urządzenia i ze szczegółów urządzenia w witrynie 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 ustawieniem modułów dla jednego urządzenia. Funkcja Ustawianie modułów w witrynie Azure Portal lub Tworzenie wdrożenia dla funkcji pojedynczego urządzenia w programie Visual Studio Code będzie obowiązywać na chwilę. Zobaczysz moduły zdefiniowane 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 dla każdego urządzenia — 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 właściwe dotyczy danego urządzenia. Możesz również zaktualizować bliźniacze reprezentację urządzenia, aby nie odpowiadała już docelowemu opisowi wdrożenia automatycznego.

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

Środowisko uruchomieniowe usługi IoT Edge

Agent usługi 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 usługi IoT Edge próbuje nawiązać połączenie z usługą 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. Gdy to się nie powiedzie, agent usługi 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 usługi 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, podejmie próbę protokołu WebSocket (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 agent edgeAgent jest uruchomiony, ale i zgłasza pusty plik konfiguracji....

  • Po uruchomieniu sudo iotedge check na urządzeniu zgłasza , że aparat kontenera nie jest skonfigurowany z ustawieniem serwera DNS, co może mieć wpływ na łączność z usługą IoT Hub. Zobacz https://aka.ms/iotedge-prod-checklist-dns najlepsze rozwiązania.

Przyczyna

  • Domyślnie usługa 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.
  • W przypadku korzystania z instalacji przystawki usługi IoT Edge plik konfiguracji platformy Docker jest inną lokalizacją. Zobacz opcję rozwiązania 3.

Rozwiązanie

Opcja 1. Ustawianie serwera DNS w ustawieniach aparatu kontenera

Określ serwer DNS dla środowiska w ustawieniach aparatu kontenera, który ma zastosowanie do wszystkich modułów kontenera uruchomionych przez aparat. Utwórz plik o nazwie daemon.json, a następnie określ serwer DNS do użycia. Na 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 będą zezwalać 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 katalogu na urządzeniu /etc/docker .

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ć.

sudo systemctl restart docker

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

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

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

Ostrzeżenie

Jeśli używasz tej metody i określisz niewłaściwy adres DNS, agent edgeAgent traci połączenie z usługą 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 usługi IoT Edge. Przed zainstalowaniem nowego wystąpienia usługi IoT Edge należy usunąć wszystkie kontenery edgeAgent z poprzedniej instalacji.

Pamiętaj, aby ustawić tę konfigurację również dla modułów edgeAgent i edgeHub .

Opcja 3. Przekaż lokalizację pliku konfiguracji platformy Docker, aby sprawdzić polecenie

Jeśli usługa IoT Edge jest zainstalowana jako przystawka, użyj parametru --container-engine-config-file , aby określić lokalizację pliku konfiguracji platformy Docker. Jeśli na przykład plik konfiguracji platformy Docker znajduje się w /var/snap/docker/current/config/daemon.jsonlokalizacji , uruchom następujące polecenie: iotedge check --container-engine-config-file '/var/snap/docker/current/config/daemon.json'.

Obecnie komunikat ostrzegawczy nadal pojawia się w danych wyjściowych sprawdzania iotedge nawet po ustawieniu lokalizacji pliku konfiguracji. Sprawdź, czy zgłasza błąd, ponieważ przystawka usługi IoT Edge nie ma dostępu do odczytu do przystawki platformy Docker. Jeśli używasz sprawdzania iotedge w procesie wydania, możesz pominąć komunikat ostrzegawczy przy użyciu parametru --ignore container-engine-dns container-engine-logrotate .

Moduł agenta usługi Edge z połączeniem LTE zgłasza "pustą konfigurację agenta brzegowego" i powoduje błąd "przejściowy błąd sieci"

Objawy

Urządzenie skonfigurowane z połączeniem LTE ma problemy z uruchamianiem modułów zdefiniowanych we wdrożeniu. Agent edgeAgent nie może nawiązać połączenia z usługą IoT Hub i zgłasza pustą konfigurację agenta brzegowego i wystąpił przejściowy błąd sieci.

Przyczyna

Niektóre sieci mają obciążenie pakietami, co sprawia, że domyślna sieć platformy Docker MTU (1500) jest zbyt wysoka i powoduje fragmentację pakietów uniemożliwiającą dostęp do zasobów zewnętrznych.

Rozwiązanie

  1. Sprawdź ustawienie jednostki MTU dla sieci platformy Docker.

    docker network inspect <network name>

  2. Sprawdź ustawienie jednostki MTU dla adaptera sieci fizycznej na urządzeniu.

    ip addr show eth0

Uwaga

Jednostki MTU dla sieci platformy Docker nie mogą być wyższe niż jednostki MTU dla urządzenia. Aby uzyskać więcej informacji, skontaktuj się z usługodawcą.

Jeśli widzisz inny rozmiar jednostki MTU dla sieci platformy Docker i urządzenia, spróbuj wykonać następujące obejście:

  1. Utwórz nową sieć. Przykład:

    docker network create --opt com.docker.network.driver.mtu=1430 test-mtu

    W tym przykładzie ustawienie jednostki MTU dla urządzenia to 1430. W związku z tym wartość jednostki MTU dla sieci platformy Docker ma wartość 1430.

  2. Zatrzymaj i usuń sieć platformy Azure.

    docker network rm azure-iot-edge

  3. Utwórz ponownie sieć platformy Azure.

    docker network create --opt com.docker.network.driver.mtu=1430 azure-iot-edge

  4. Usuń wszystkie kontenery i uruchom ponownie usługę aziot-edged .

    sudo iotedge system stop && sudo docker rm -f $(docker ps -aq -f "label=net.azure-devices.edge.owner=Microsoft.Azure.Devices.Edge.Agent") && sudo iotedge config apply

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 usługi IoT Edge nie ma uprawnień dostępu do obrazu modułu.

Rozwiązanie

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

Agent usługi IoT Edge wykonuje nadmierne wywołania tożsamości

Objawy

Agent usługi IoT Edge wykonuje nadmierne wywołania tożsamości do usługi Azure IoT Hub.

Przyczyna

Błędna konfiguracja manifestu wdrożenia urządzenia powoduje niepowodzenie wdrożenia na urządzeniu. Logika ponawiania prób agenta usługi IoT Edge nadal ponawia próbę wdrożenia. Każda ponowna próba wykonuje wywołania tożsamości do momentu pomyślnego wdrożenia. Jeśli na przykład manifest wdrożenia określa identyfikator URI modułu, który nie istnieje w rejestrze kontenerów lub jest błędnie wtypowany, agent usługi IoT Edge ponawia próbę wdrożenia, dopóki manifest wdrożenia nie zostanie poprawiony.

Rozwiązanie

Zweryfikuj manifest wdrożenia w witrynie Azure Portal. Popraw wszelkie błędy i ponownie wdróż manifest na urządzeniu.

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)

Or

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ć. Centrum usługi 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

Możesz rozwiązać ten problem na dwa sposoby:

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

Jeśli nie musisz używać urządzenia usługi IoT Edge jako bramy, możesz usunąć powiązania portów z opcji tworzenia modułu edgeHub. Opcje tworzenia można zmienić w witrynie 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 usługi IoT Edge, które chcesz zaktualizować.

  3. Wybierz pozycję Ustaw moduły.

  4. Wybierz pozycję Ustawienia środowiska uruchomieniowego.

  5. W ustawieniach modułu Usługi Edge Hub usuń wszystko z pola tekstowego Opcje tworzenia kontenera.

  6. Wybierz pozycję Zastosuj , aby zapisać zmiany i utworzyć wdrożenie.

W pliku deployment.json:

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

  2. edgeHub Znajdź ustawienia w sekcji właściwości żądanej agenta edge:

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

      "edgeHub": {
          "restartPolicy": "always",
          "settings": {
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
          "status": "running",
          "type": "docker"
    }
    
  4. Wybierz pozycję Utwórz , aby ponownie zastosować go do urządzenia usługi IoT Edge.

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

Objawy

Niestandardowy moduł usługi IoT Edge nie może wysłać komunikatu do centrum usługi IoT Edge z błędem 404 Module not found . Środowisko uruchomieniowe usługi 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 usługi 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 ustanowiony, odrzuca komunikat z komunikatem o błędzie 404.

Rozwiązanie

Od wersji 1.0.7 wszystkie procesy modułu są autoryzowane do łą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ł usługi IoT Edge do wysyłania komunikatów do usługi edgeHub. Na przykład upewnij się, że ENTRYPOINT zamiast CMD polecenia w pliku platformy 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 jednego identyfikatora procesu.

Problemy ze stabilnością na mniejszych urządzeniach

Objawy

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

Przyczyna

Centrum usługi IoT Edge, które jest częścią środowiska uruchomieniowego usługi IoT Edge, jest domyślnie zoptymalizowane pod kątem wydajności i próbuje przydzielić duże fragmenty pamięci. Ta optymalizacja nie jest idealna w przypadku ograniczonych urządzeń brzegowych i może powodować problemy ze stabilnością.

Rozwiązanie

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

W witrynie Azure Portal:

  1. W usłudze IoT Hub wybierz urządzenie usługi IoT Edge, a następnie na stronie szczegółów urządzenia wybierz pozycję Ustaw ustawienia środowiska uruchomieniowego modułów>.

  2. Utwórz zmienną środowiskową dla modułu centrum usługi IoT Edge o nazwie OptimizeForPerformance z typem True/False ustawionym na wartość False.

  3. Wybierz pozycję Zastosuj , aby zapisać zmiany, a następnie wybierz pozycję Przejrzyj i utwórz.

    Zmienna środowiskowa znajduje się teraz we edgeHub właściwości manifestu wdrożenia:

       "edgeHub": {
          "env": {
                "OptimizeForPerformance": {
                   "value": false
                }
          },
          "restartPolicy": "always",
          "settings": {
                "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
          },
          "status": "running",
          "type": "docker"
       }
    
  4. Wybierz pozycję Utwórz , aby zapisać zmiany i wdrożyć moduł.

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

Objawy

Nie można uruchomić demona zabezpieczeń, a kontenery modułów nie są tworzone. edgeHub Moduły edgeAgenti inne moduły niestandardowe nie są uruchamiane przez usługę usługi IoT Edge. W aziot-edged dziennikach zostanie wyświetlony następujący błąd:

  • Demon nie mógł pomyślnie uruchomić: nie można uruchomić usługi zarządzania
  • przyczyna: Wystąpił błąd dla ś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 usługi 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ć samych gniazd.

Rozwiązanie

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

  1. Uruchom polecenie systemctl disable iotedge.socket iotedge.mgmt.socket , aby wyłączyć jednostki gniazd, 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 instalacji, więc docker rm -f .

Czyszczenie kolejki komunikatów działa wolno

Objawy

Kolejka komunikatów nie jest czyszczona po przetworzeniu komunikatów. Kolejka komunikatów rośnie wraz z upływem czasu i ostatecznie powoduje, że środowisko uruchomieniowe usługi IoT Edge zabraknie pamięci.

Przyczyna

Interwał oczyszczania komunikatów jest kontrolowany przez czas wygaśnięcia komunikatu klienta (czas wygaśnięcia) i zmienną środowiskową EdgeHub MessageCleanupIntervalSecs . Domyślna wartość czasu wygaśnięcia komunikatu to dwie godziny, a domyślna wartość MessageCleanupIntervalSecs to 30 minut. Jeśli aplikacja używa wartości czasu wygaśnięcia krótszej niż domyślna i nie dostosujesz wartości MessageCleanupIntervalSecs , wygasłe komunikaty nie zostaną wyczyszczone do następnego interwału oczyszczania.

Rozwiązanie

Jeśli zmienisz wartość czasu wygaśnięcia dla aplikacji, która jest krótsza niż domyślna, dostosuj również wartość MessageCleanupIntervalSecs . Wartość MessageCleanupIntervalSecs powinna być znacznie mniejsza niż najmniejsza wartość czasu wygaśnięcia używana przez klienta. Jeśli na przykład aplikacja kliencka definiuje czas wygaśnięcia równy pięciu minut w nagłówku komunikatu, ustaw wartość MessageCleanupIntervalSecs na minutę. Te ustawienia zapewniają, że komunikaty są czyszczone w ciągu sześciu (5 + 1) minut.

Aby skonfigurować wartość MessageCleanupIntervalSecs , ustaw zmienną środowiskową w manifeście wdrożenia dla modułu centrum usługi IoT Edge. Aby uzyskać więcej informacji na temat ustawiania zmiennych środowiskowych środowiska uruchomieniowego, zobacz Edge Agent i Edge Hub Environment Variables (Zmienne środowiskowe centrum usługi Edge).

Sieć

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

Objawy

Próba sprawdzenia dzienników menedżera zabezpieczeń usługi IoT Edge kończy 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 usługi 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 częściej spotykany na maszynie wirtualnej. Automatycznie generowane nazwy hostów dla maszyn wirtualnych z systemem Windows hostowanych na platformie Azure, w szczególności, wydają się być 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 konfiguracji.

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

  2. Otwórz panel konfiguracji, wybierając link Nieskonfigurowane (jeśli maszyna wirtualna jest nowa) lub wybierz istniejącą nazwę DNS w obszarze Podstawowa>nazwa DNS. Jeśli maszyna wirtualna ma już skonfigurowaną nazwę DNS, nie musisz konfigurować nowej.

  3. Podaj wartość etykiety nazwy DNS, jeśli jeszcze jej nie masz, a następnie wybierz pozycję Zapisz.

  4. Skopiuj nową nazwę DNS, która powinna mieć format:
    <DNSnamelabel>.<vmlocation.cloudapp.azure.com>.

  5. Na urządzeniu usługi IoT Edge otwórz plik konfiguracji.

    sudo nano /etc/aziot/config.toml
    
  6. Zastąp wartość hostname nazwą DNS.

  7. Zapisz i zamknij plik, a następnie zastosuj zmiany w usłudze IoT Edge.

    sudo iotedge config apply
    

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

Objawy

Moduły usługi IoT Edge łą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 polegają na przekierowywaniu pakietów IP w celu nawiązania połączenia z Internetem, aby umożliwić komunikację 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

Wykonaj poniższe kroki, aby włączyć przekazywanie pakietów IP.

  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.

Usługa IoT Edge za bramą nie może wykonywać żądań HTTP ani uruchamiać modułu edgeAgent

Objawy

Środowisko uruchomieniowe usługi IoT Edge jest aktywne z prawidłowym plikiem konfiguracji, ale nie może uruchomić modułu edgeAgent . Polecenie iotedge list zwraca pustą listę. Raporty Could not perform HTTP request środowiska uruchomieniowego usługi IoT Edge w dziennikach.

Przyczyna

Urządzenia usługi IoT Edge za bramą pobierają obrazy modułów z nadrzędnego urządzenia usługi IoT Edge określonego w parent_hostname polu pliku konfiguracji. Błąd Could not perform HTTP request oznacza, że urządzenie podrzędne nie może nawiązać połączenia z urządzeniem nadrzędnym za pośrednictwem protokołu HTTP.

Rozwiązanie

Upewnij się, że nadrzędne urządzenie usługi IoT Edge może odbierać żądania przychodzące z podrzędnego urządzenia usługi IoT Edge. Otwórz ruch sieciowy na portach 443 i 6617 dla żądań pochodzących z urządzenia podrzędnego.

Usługa IoT Edge za bramą nie może wykonywać żądań HTTP ani uruchamiać modułu edgeAgent

Objawy

Demon usługi IoT Edge jest aktywny z prawidłowym plikiem konfiguracji, ale nie może uruchomić modułu edgeAgent. Polecenie iotedge list zwraca pustą listę. Raport Could not perform HTTP requestdzienników demona usługi IoT Edge.

Przyczyna

Urządzenia usługi IoT Edge za bramą pobierają obrazy modułów z nadrzędnego urządzenia usługi IoT Edge określonego w parent_hostname polu pliku konfiguracji. Błąd Could not perform HTTP request oznacza, że urządzenie podrzędne nie może nawiązać połączenia z urządzeniem nadrzędnym za pośrednictwem protokołu HTTP.

Rozwiązanie

Upewnij się, że nadrzędne urządzenie usługi IoT Edge może odbierać żądania przychodzące z podrzędnego urządzenia usługi IoT Edge. Otwórz ruch sieciowy na portach 443 i 6617 dla żądań pochodzących z urządzenia podrzędnego.

Usługa IoT Edge za bramą nie może nawiązać połączenia podczas migracji z jednego centrum IoT Do innego

Objawy

Podczas próby migracji hierarchii urządzeń usługi IoT Edge z jednego centrum IoT Do drugiego nadrzędne urządzenie usługi IoT Edge najwyższego poziomu może nawiązać połączenie z usługą IoT Hub, ale urządzenia podrzędne usługi IoT Edge nie mogą. Raport Unable to authenticate client downstream-device/$edgeAgent with module credentialsdzienników .

Przyczyna

Poświadczenia dla urządzeń podrzędnych nie zostały prawidłowo zaktualizowane po przeprowadzeniu migracji do nowego centrum IoT. W związku z tym moduły zostały edgeHub ustawione tak, edgeAgent aby miały typ none uwierzytelniania (wartość domyślna, jeśli nie została jawnie ustawiona). Podczas nawiązywania połączenia moduły na urządzeniach podrzędnych używają starych poświadczeń, co powoduje niepowodzenie uwierzytelniania.

Rozwiązanie

Podczas migracji do nowego centrum IoT (przy założeniu, że nie korzystasz z usługi DPS), wykonaj następujące kroki w następującej kolejności:

  1. Postępuj zgodnie z tym przewodnikiem, aby wyeksportować i zaimportować tożsamości urządzeń ze starego centrum IoT Do nowego
  2. Ponownie skonfiguruj wszystkie wdrożenia i konfiguracje usługi IoT Edge w nowym centrum IoT
  3. Ponownie skonfiguruj wszystkie relacje urządzeń nadrzędny-podrzędny w nowym centrum IoT
  4. Zaktualizuj każde urządzenie, aby wskazywało nową nazwę hosta centrum IoT (iothub_hostnamew obszarze w )[provisioning] config.toml
  5. Jeśli zdecydujesz się wykluczyć klucze uwierzytelniania podczas eksportowania urządzenia, skonfiguruj ponownie każde urządzenie przy użyciu nowych kluczy podanych przez nowe centrum IoT (device_id_pk w obszarze w programie [provisioning.authentication] config.toml)
  6. Najpierw uruchom ponownie nadrzędne urządzenie edge najwyższego poziomu, upewnij się, że jest ono uruchomione
  7. Uruchom ponownie każde urządzenie na poziomie hierarchii według poziomu od góry do dołu

Usługa IoT Edge ma niską przepływność komunikatów, gdy jest geograficznie odległe od usługi IoT Hub

Objawy

Urządzenia usługi Azure IoT Edge, które są geograficznie odległe od usługi Azure IoT Hub, mają niższą niż oczekiwaną przepływność komunikatów.

Przyczyna

Duże opóźnienie między urządzeniem a usługą IoT Hub może spowodować niższą niż oczekiwaną przepływność komunikatów. Usługa IoT Edge używa domyślnego rozmiaru partii komunikatów 10. Ogranicza to liczbę komunikatów wysyłanych w jednej partii, co zwiększa liczbę rund między urządzeniem a usługą IoT Hub.

Rozwiązanie

Spróbuj zwiększyć zmienną środowiskową MaxUpstreamBatchSize centrum usługi IoT Edge. Dzięki temu można wysyłać więcej komunikatów w jednej partii, co zmniejsza liczbę rund między urządzeniem a usługą IoT Hub.

Aby ustawić zmienne środowiskowe usługi Azure Edge Hub w witrynie Azure Portal:

  1. Przejdź do centrum IoT Hub i wybierz pozycję Urządzenia w menu Zarządzanie urządzeniami .
  2. Wybierz urządzenie usługi IoT Edge, które chcesz zaktualizować.
  3. Wybierz pozycję Ustaw moduły.
  4. Wybierz pozycję Ustawienia środowiska uruchomieniowego.
  5. Na karcie Ustawienia modułu usługi Edge Hub dodaj zmienną środowiskową MaxUpstreamBatchSize jako typ Number z wartością 20.
  6. Wybierz Zastosuj.

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.