Rozwiązania typowych problemów związanych z usługą Azure IoT Edge
Dotyczy ikony: 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 ProviderName
elementu .
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
- 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 aprowizacji, uruchom ponownie urządzenie przy użyciu polecenia
sudo iotedge system restart
. - 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:
Przejdź do centrum IoT i wybierz pozycję Urządzenia w menu Zarządzanie urządzeniami .
Wybierz urządzenie IoT Edge, które chcesz zaktualizować.
Wybierz pozycję Ustaw moduły.
Wybierz pozycję Ustawienia środowiska uruchomieniowego.
W ustawieniach modułu Edge Hub usuń wszystko z pola tekstowego Tworzenie opcji .
Zapisz zmiany i utwórz wdrożenie.
W pliku deployment.json:
Otwórz plik deployment.json zastosowany do urządzenia IoT Edge.
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" }
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 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.
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 edgeAgent
niestandardowe 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 .
- Uruchom polecenie
systemctl disable iotedge.socket iotedge.mgmt.socket
, aby wyłączyć jednostki gniazda, 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
zamontowania, więcdocker 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.
W 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>.
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:
Otwórz aplikację Uruchom .
Wprowadź
regedit
tekst 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ść Nazwa 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.