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: IoT Edge 1.5 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.json
lokalizacji , 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
Sprawdź ustawienie jednostki MTU dla sieci platformy Docker.
docker network inspect <network name>
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:
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.
Zatrzymaj i usuń sieć platformy Azure.
docker network rm azure-iot-edge
Utwórz ponownie sieć platformy Azure.
docker network create --opt com.docker.network.driver.mtu=1430 azure-iot-edge
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:
Przejdź do centrum IoT i wybierz pozycję Urządzenia w menu Zarządzanie urządzeniami .
Wybierz urządzenie usługi IoT Edge, które chcesz zaktualizować.
Wybierz pozycję Ustaw moduły.
Wybierz pozycję Ustawienia środowiska uruchomieniowego.
W ustawieniach modułu Usługi Edge Hub usuń wszystko z pola tekstowego Opcje tworzenia kontenera.
Wybierz pozycję Zastosuj , aby zapisać zmiany i utworzyć wdrożenie.
W pliku deployment.json:
Otwórz plik deployment.json zastosowany do urządzenia usługi IoT Edge.
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" }
createOptions
Usuń wiersz i przecinek końcowy na końcuimage
wiersza przed nim:"edgeHub": { "restartPolicy": "always", "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5", "status": "running", "type": "docker" }
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:
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>.
Utwórz zmienną środowiskową dla modułu centrum usługi IoT Edge o nazwie OptimizeForPerformance z typem True/False ustawionym na wartość False.
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" }
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 edgeAgent
i 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/
.
- Uruchom polecenie
systemctl disable iotedge.socket iotedge.mgmt.socket
, aby wyłączyć jednostki gniazd, aby systemd nie uruchamiał ich niepotrzebnie - Zmień konfigurację iotedge do użycia
/var/lib/iotedge/*.sock
w obuconnect
sekcjach ilisten
- Jeśli masz już moduły, mają stare
/var/run/iotedge/*.sock
instalacji, więcdocker 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.
W witrynie Azure Portal przejdź do strony przeglądu maszyny wirtualnej.
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.
Podaj wartość etykiety nazwy DNS, jeśli jeszcze jej nie masz, a następnie wybierz pozycję Zapisz.
Skopiuj nową nazwę DNS, która powinna mieć format:
<DNSnamelabel>.<vmlocation.cloudapp.azure.com>.Na urządzeniu usługi IoT Edge otwórz plik konfiguracji.
sudo nano /etc/aziot/config.toml
Zastąp wartość
hostname
nazwą DNS.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.
Otwórz plik sysctl.conf.
sudo nano /etc/sysctl.conf
Dodaj następujący wiersz do pliku.
net.ipv4.ip_forward=1
Zapisz i zamknij plik.
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 request
dziennikó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 credentials
dziennikó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:
- Postępuj zgodnie z tym przewodnikiem, aby wyeksportować i zaimportować tożsamości urządzeń ze starego centrum IoT Do nowego
- Ponownie skonfiguruj wszystkie wdrożenia i konfiguracje usługi IoT Edge w nowym centrum IoT
- Ponownie skonfiguruj wszystkie relacje urządzeń nadrzędny-podrzędny w nowym centrum IoT
- Zaktualizuj każde urządzenie, aby wskazywało nową nazwę hosta centrum IoT (
iothub_hostname
w obszarze w )[provisioning]
config.toml
- 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
) - Najpierw uruchom ponownie nadrzędne urządzenie edge najwyższego poziomu, upewnij się, że jest ono uruchomione
- 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:
- Przejdź do centrum IoT Hub i wybierz pozycję Urządzenia w menu Zarządzanie urządzeniami .
- Wybierz urządzenie usługi IoT Edge, które chcesz zaktualizować.
- Wybierz pozycję Ustaw moduły.
- Wybierz pozycję Ustawienia środowiska uruchomieniowego.
- Na karcie Ustawienia modułu usługi Edge Hub dodaj zmienną środowiskową MaxUpstreamBatchSize jako typ Number z wartością 20.
- 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.