Rozwiązania typowych problemów dotyczących usługi Azure IoT Edge
Dotyczy: IoT Edge 1.1
Ważne
Data zakończenia wsparcia usługi IoT Edge 1.1 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 usługi IoT Edge, zobacz Aktualizowanie usługi 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ę.
Nie można pobrać dzienników środowiska uruchomieniowego usługi IoT Edge w systemie Windows
Objawy
Podczas korzystania z programu Get-WinEvent
w systemie Windows otrzymasz wyjątek EventLogException.
Przyczyna
Polecenie Get-WinEvent
programu PowerShell opiera się na wpisie rejestru, który ma być obecny w celu znalezienia dzienników według określonego ProviderName
elementu .
Rozwiązanie
Ustaw wpis rejestru dla demona usługi 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
Nie można uruchomić usługi IoT Edge z komunikatem o błędzie failed to provision with IoT Hub, and no valid device backup was found dps client error.
Przyczyna
Rejestracja grup jest używana do aprowizowania urządzenia usługi IoT Edge w usłudze IoT Hub. Urządzenie usługi 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 zostało ponownie aprowidowane.
Rozwiązanie
- Sprawdź, czy poświadczenia usługi DPS są poprawne.
- Zastosuj konfigurację przy użyciu polecenia
sudo iotedge apply config
. - Jeśli urządzenie nie zostało ponownie aprowidowane, uruchom ponownie urządzenie przy użyciu polecenia
sudo iotedge system restart
. - Jeśli urządzenie nie zostało ponownie aprowidowane, wymuś ponowne aprowizowanie przy użyciu polecenia
sudo iotedge system reprovision
.
Aby automatycznie ponownie aprowizacja, ustaw wartość dynamic_reprovisioning: true
w pliku konfiguracji urządzenia. Ustawienie tej flagi na wartość true w funkcji dynamicznej ponownej aprowizacji. Usługa IoT Edge wykrywa sytuacje, w których urządzenie zostało ponownie aprowidowane w chmurze, monitorując własne połączenie usługi IoT Hub pod kątem niektórych błędów. Usługa IoT Edge reaguje, zamykając wszystkie moduły usługi Edge i samą siebie. Przy następnym uruchomieniu demona podejmie próbę ponownego aprowizacji tego urządzenia z platformą Azure w celu otrzymania nowych informacji o aprowizacji usługi IoT Hub.
W przypadku korzystania z aprowizacji zewnętrznej demon powiadomi również zewnętrzny punkt końcowy aprowizacji o zdarzeniu ponownej aprowizacji przed zamknięciem. Aby uzyskać więcej informacji, zobacz Pojęcia dotyczące ponownej aprowizacji urządzeń usługi IoT Hub.
Ś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. Działa tylko agent edgeAgent, ale stale zgłasza "pusty plik konfiguracji...".
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.
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. 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 odpowiedniej lokalizacji dla twojej 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 (Admin PowerShell) | Restart-Service iotedge-moby -Force |
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 .
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.
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 Utwórz opcje .
Zapisz zmiany i utwórz 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": { "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" }
createOptions
Usuń wiersz i przecinek końcowy na końcuimage
wiersza przed nim:"edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1" }, "type": "docker", "status": "running", "restartPolicy": "always" }
Zapisz plik i ponownie zastosuj go na urządzeniu 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, odrzuci 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 ustawioną na 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
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
.
Nie można uruchomić modułu z powodu niezgodności systemu operacyjnego
Objaw
Nie można uruchomić modułu edgeHub w usłudze IoT Edge w wersji 1.1.
Przyczyna
Moduł systemu Windows używa wersji systemu Windows niezgodnej z wersją systemu Windows na hoście. Usługa IoT Edge w wersji 1809 kompilacji 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ściami obrazów hosta i kontenera. Jeśli systemy operacyjne są różne, zaktualizuj je do usługi IoT Edge 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 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.
Wybierz pozycję Konfiguruj w obszarze Nazwa DNS. Jeśli maszyna wirtualna ma już skonfigurowaną nazwę DNS, nie musisz konfigurować nowej.
Podaj wartość etykiety nazwy DNS i wybierz pozycję Zapisz.
Skopiuj nową nazwę DNS, która powinna być w formacie <DNSnamelabel.<>vmlocation.cloudapp.azure.com>.
Wewnątrz maszyny wirtualnej użyj następującego polecenia, aby skonfigurować środowisko uruchomieniowe usługi IoT Edge pod nazwą 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
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.
W systemie Windows:
Otwórz aplikację Uruchom .
Wprowadź
regedit
w polu tekstowym i wybierz przycisk OK.W oknie Edytor rejestru przejdź do HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.
Wyszukaj parametr IPEnableRouter.
Jeśli parametr istnieje, ustaw wartość parametru na 1.
Jeśli parametr nie istnieje, dodaj go jako nowy parametr z następującymi ustawieniami:
Ustawienie Wartość Nazwisko IPEnableRouter Typ REG_DWORD Wartość 1
Zamknij okno edytora rejestru.
Uruchom ponownie system, aby zastosować zmiany.
W systemie Linux:
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.
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.