Řešení běžných problémů s IoT Edge
Platí pro: IoT Edge 1.1
Důležité
Datum ukončení podpory ioT Edge 1.1 bylo 13. prosince 2022. Informace o způsobu podpory tohoto produktu, služby, technologie nebo rozhraní API najdete v tématu věnovaném životnímu cyklu produktů Microsoftu. Další informace o aktualizaci na nejnovější verzi IoT Edge najdete v tématu Aktualizace IoT Edge.
Tento článek slouží k identifikaci a řešení běžných problémů při používání řešení IoT Edge. Pokud potřebujete informace o tom, jak najít protokoly a chyby ze zařízení IoT Edge, přečtěte si téma Řešení potíží se zařízením IoT Edge.
Zřizování a nasazení
Modul IoT Edge se nasadí úspěšně a pak zmizí ze zařízení
Příznaky
Po nastavení modulů pro zařízení IoT Edge se moduly úspěšně nasadí, ale po několika minutách zmizí ze zařízení a z podrobností o zařízení na webu Azure Portal. Na zařízení se můžou objevit i jiné moduly, než jsou definované moduly.
Příčina
Pokud automatické nasazení cílí na zařízení, má přednost před ručním nastavením modulů pro jedno zařízení. Funkce Sady modulů na webu Azure Portal nebo Vytvoření nasazení pro funkce jednoho zařízení v editoru Visual Studio Code se projeví na chvíli. Zobrazí se moduly, které jste definovali, se spustí v zařízení. Potom se spustí priorita automatického nasazení a přepíše požadované vlastnosti zařízení.
Řešení
Pro každé zařízení používejte pouze jeden typ mechanismu nasazení, a to buď automatické nasazení, nebo jednotlivá nasazení zařízení. Pokud máte více automatických nasazení, která cílí na zařízení, můžete změnit popisy priority nebo cíle, abyste měli jistotu, že se na dané zařízení vztahuje správná nasazení. Můžete také aktualizovat dvojče zařízení tak, aby se přestalo shodovat s cílovým popisem automatického nasazení.
Další informace najdete v tématu Vysvětlení automatických nasazení IoT Edge pro jednotlivá zařízení nebo ve velkém měřítku.
Nejde získat protokoly modulu runtime IoT Edge ve Windows
Příznaky
Při použití Get-WinEvent
ve Windows získáte výjimku EventLogException.
Příčina
Příkaz Get-WinEvent
PowerShellu spoléhá na položku registru, která se má prezentovat k vyhledání protokolů konkrétním ProviderName
uživatelem .
Řešení
Nastavte položku registru pro proces démona IoT Edge. Vytvořte soubor iotedge.reg s následujícím obsahem a importujte ho do registru Systému Windows tak, že na něj poklikáte nebo pomocí reg import iotedge.reg
příkazu:
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
Chyba klienta DPS
Příznaky
IoT Edge se nedaří spustit s chybovou zprávou failed to provision with IoT Hub, and no valid device backup was found dps client error.
Příčina
Registrace skupiny se používá ke zřízení zařízení IoT Edge pro IoT Hub. Zařízení IoT Edge se přesune do jiného centra. Registrace se odstraní v DPS. V DPS se vytvoří nová registrace pro nové centrum. Zařízení není znovu zřízený.
Řešení
- Ověřte správnost přihlašovacích údajů DPS.
- Použijte konfiguraci pomocí
sudo iotedge apply config
. - Pokud zařízení není znovu zřízený, restartujte ho pomocí
sudo iotedge system restart
. - Pokud zařízení není znovu zřízený, vynuťte opětovné zřízení pomocí
sudo iotedge system reprovision
.
Automatické opětovné zřízení nastavíte dynamic_reprovisioning: true
v konfiguračním souboru zařízení. Nastavení tohoto příznaku na true opts in to the dynamic reprovisioning feature. IoT Edge detekuje situace, kdy se zdá, že zařízení bylo znovu zřízený v cloudu, monitorováním vlastního připojení ioT Hubu pro určité chyby. IoT Edge reaguje vypnutím všech modulů Edge a samotným. Při příštím spuštění démona se pokusí toto zařízení znovu zřídit v Azure, aby získalo nové informace o zřizování ioT Hubu.
Při použití externího zřizování proces démon před vypnutím také oznámí externímu koncovému bodu zřizování o události opětovného zřízení. Další informace najdete v tématu Koncepty opětovného zřízení zařízení ve službě IoT Hub.
Modul runtime IoT Edge
Agent IoT Edge se zastaví po minutě.
Příznaky
Modul edgeAgent se spustí a úspěšně spustí přibližně minutu a pak se zastaví. Protokoly označují, že se agent IoT Edge pokusí připojit k IoT Hubu přes AMQP a pak se pokusí připojit pomocí AMQP přes WebSocket. Pokud se to nezdaří, agent IoT Edge se ukončí.
Příklady protokolů 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...
Příčina
Konfigurace sítě v hostitelské síti brání agentu IoT Edge v dosažení sítě. Agent se nejprve pokusí připojit přes protokol AMQP (port 5671). Pokud se připojení nezdaří, pokusí se webSockets (port 443).
Modul runtime IoT Edge nastaví pro každý z modulů síť, na které budou komunikovat. V Linuxu je tato síť síťovým mostem. Ve Windows využívá překlad adres (NAT). K tomuto problému častěji dochází na zařízeních s Windows využívajících kontejnery Windows a síť s překladem adres (NAT).
Řešení
Ujistěte se, že existuje trasa k internetu pro IP adresy přiřazené k této síti mostu nebo překladu adres (NAT). Někdy konfigurace sítě VPN na hostiteli přepíše síť IoT Edge.
Modul agenta Edge hlásí prázdný konfigurační soubor a na zařízení se nespouštějí žádné moduly
Příznaky
Zařízení má potíže se spouštěním modulů definovaných v nasazení. Běží jenom agent edgeAgent, ale neustále hlásí prázdný konfigurační soubor...
Příčina
IoT Edge ve výchozím nastavení spouští moduly ve vlastní izolované kontejnerové síti. Zařízení může mít problémy s překladem názvů DNS v rámci této privátní sítě.
Řešení
Možnost 1: Nastavení serveru DNS v nastavení kontejnerového stroje
V nastavení modulu kontejneru zadejte server DNS pro vaše prostředí, který bude platit pro všechny moduly kontejneru spuštěné modulem. Vytvořte soubor s názvem daemon.json
a zadejte server DNS, který se má použít. Příklad:
{
"dns": ["1.1.1.1"]
}
Tento server DNS je nastavený na veřejně přístupnou službu DNS. Některé sítě, jako jsou podnikové sítě, ale mají nainstalované vlastní servery DNS a nepovolují přístup k veřejným serverům DNS. Proto pokud vaše hraniční zařízení nemá přístup k veřejnému serveru DNS, nahraďte ho dostupnou adresou serveru DNS.
Místo daemon.json
ve správném umístění pro vaši platformu:
Platforma | Umístění |
---|---|
Linux | /etc/docker |
Hostitel Windows s kontejnery Windows | C:\ProgramData\iotedge-moby\config |
Pokud umístění už soubor obsahuje daemon.json
, přidejte do něj klíč DNS a soubor uložte.
Restartujte modul kontejneru, aby se aktualizace projevily.
Platforma | Příkaz |
---|---|
Linux | sudo systemctl restart docker |
Windows (Správce PowerShellu) | Restart-Service iotedge-moby -Force |
Možnost 2: Nastavení serveru DNS v nasazení IoT Edge na modul
Server DNS pro vytváření jednotlivých modulů můžete nastavit v nasazení IoT Edge. Příklad:
"createOptions": {
"HostConfig": {
"Dns": [
"x.x.x.x"
]
}
}
Upozorňující
Pokud použijete tuto metodu a zadáte nesprávnou adresu DNS, edgeAgent ztratí připojení ke službě IoT Hub a nemůže přijmout nová nasazení, aby se problém vyřešil. Pokud chcete tento problém vyřešit, můžete přeinstalovat modul runtime IoT Edge. Před instalací nové instance IoT Edge nezapomeňte odebrat všechny kontejnery edgeAgent z předchozí instalace.
Nezapomeňte tuto konfiguraci nastavit i pro moduly edgeAgent a edgeHub .
Agent Edge nemá přístup k imagi modulu (403)
Příznaky
Kontejner se nepodaří spustit a agent edgeAgent hlásí chybu 403.
Příčina
Modul agenta IoT Edge nemá oprávnění pro přístup k imagi modulu.
Řešení
Ujistěte se, že přihlašovací údaje registru kontejneru jsou správné v manifestu nasazení zařízení.
Centrum služby IoT Edge se nedaří spustit
Příznaky
Modul EdgeHub se nespustí. V protokolech se může zobrazit zpráva podobná jedné z následujících chyb:
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)
Nebo
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)
Příčina
Některé další procesy na hostitelském počítači vázaly port, který se modul EdgeHub pokouší svázat. Centrum IoT Edge mapuje porty 443, 5671 a 8883 pro použití ve scénářích brány. Modul se nepovede spustit, pokud už jeden z těchto portů vázal jiný proces.
Řešení
Tento problém můžete vyřešit dvěma způsoby:
Pokud zařízení IoT Edge funguje jako zařízení brány, musíte najít a zastavit proces, který používá port 443, 5671 nebo 8883. Chyba portu 443 obvykle znamená, že druhý proces je webový server.
Pokud zařízení IoT Edge nepotřebujete používat jako bránu, můžete odebrat vazby portů z možností vytvoření modulu EdgeHubu. Možnosti vytvoření můžete změnit na webu Azure Portal nebo přímo v souboru deployment.json.
Na webu Azure Portal:
Přejděte do centra IoT a v nabídce Správa zařízení vyberte Zařízení.
Vyberte zařízení IoT Edge, které chcete aktualizovat.
Vyberte Nastavit moduly.
Vyberte Nastavení modulu runtime.
V nastavení modulu Edge Hub odstraňte všechno z textového pole Vytvořit možnosti.
Uložte změny a vytvořte nasazení.
V souboru deployment.json:
Otevřete soubor deployment.json, který jste použili na zařízení IoT Edge.
edgeHub
Vyhledejte nastavení v části požadovaných vlastností 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" }
Odeberte čáru
createOptions
a koncovou čárku na konciimage
řádku před ní:"edgeHub": { "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1" }, "type": "docker", "status": "running", "restartPolicy": "always" }
Uložte soubor a znovu ho použijte na zařízení IoT Edge.
Modul IoT Edge nemůže poslat zprávu centru služby edgeHub kvůli chybě 404
Příznaky
Vlastní modul IoT Edge se nepodaří odeslat zprávu do centra IoT Edge s chybou 404 Module not found
. Modul runtime IoT Edge vypíše do protokolů následující zprávu:
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 )
Příčina
Modul runtime IoT Edge vynucuje identifikaci procesů pro všechny moduly připojující se k hraničnímuHubu z bezpečnostních důvodů. Ověřuje, že všechny zprávy odeslané modulem pocházejí z ID hlavního procesu modulu. Pokud modul odesílá zprávu z jiného ID procesu, než je původně navázáno, odmítne zprávu s chybovou zprávou 404.
Řešení
Od verze 1.0.7 jsou všechny procesy modulů autorizované k připojení. Další informace najdete v protokolu změn vydané verze 1.0.7.
Pokud upgrade na verzi 1.0.7 není možný, proveďte následující kroky. Ujistěte se, že vlastní modul IoT Edge vždy používá stejné ID procesu k odesílání zpráv do edgeHubu. Nezapomeňte ENTRYPOINT
CMD
například místo příkazu v souboru Dockeru. Příkaz CMD
vede k jednomu ID procesu modulu a k jinému ID procesu pro příkaz Bash, který spouští hlavní program, ale ENTRYPOINT
vede k jednomu ID procesu.
Problémy se stabilitou na menších zařízeních
Příznaky
Na zařízeních s omezenými prostředky, jako je Raspberry Pi, může docházet k problémům se stabilitou, zejména pokud se používá jako brána. Mezi příznaky patří výjimky z nedostatku paměti v modulu centra IoT Edge, podřízená zařízení se nedaří připojit nebo zařízení, které po několika hodinách neodesílá telemetrické zprávy.
Příčina
Centrum IoT Edge, které je součástí modulu runtime IoT Edge, je ve výchozím nastavení optimalizované pro výkon a pokouší se přidělit velké bloky paměti. Tato optimalizace není ideální pro omezená hraniční zařízení a může způsobit problémy se stabilitou.
Řešení
Pro centrum IoT Edge nastavte proměnnou prostředí OptimizeForPerformance na false. Proměnné prostředí můžete nastavit dvěma způsoby:
Na webu Azure Portal:
Ve službě IoT Hub vyberte své zařízení IoT Edge a na stránce s podrobnostmi o zařízení vyberte Nastavení>modulu runtime. Vytvořte proměnnou prostředí pro modul centra IoT Edge s názvem OptimizeForPerformance , která je nastavená na false.
V manifestu nasazení:
"edgeHub": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.1",
"createOptions": <snipped>
},
"env": {
"OptimizeForPerformance": {
"value": "false"
}
},
Proces démon zabezpečení se nepodařilo spustit úspěšně
Příznaky
Proces démon zabezpečení se nespustí a kontejnery modulů se nevytvořily. edgeHub
Služba edgeAgent
IoT Edge nespustit moduly a další vlastní moduly. V aziot-edged
protokolech se zobrazí tato chyba:
- Proces démon se nepodařilo úspěšně spustit: Nepodařilo se spustit službu správy.
- způsobené: Došlo k chybě pro cestu /var/run/iotedge/mgmt.sock
- způsobené: Oprávnění odepřeno (chyba operačního systému 13)
Příčina
Pro všechny distribuce Linuxu s výjimkou CentOS 7 je výchozí konfigurace IoT Edge používat systemd
aktivaci soketu. K chybě oprávnění dojde v případě, že změníte konfigurační soubor tak, aby nepoužít aktivaci soketu, ale adresy URL ponecháte jako /var/run/iotedge/*.sock
, protože iotedge
uživatel nemůže zapisovat, což /var/run/iotedge
znamená, že nemůže odemknout a připojit samotné sokety.
Řešení
Aktivaci soketu v distribuci, ve které se podporuje aktivace soketu, není nutné zakázat. Pokud však raději nepoužíváte aktivaci soketu vůbec, vložte sokety do /var/lib/iotedge/
.
- Spuštěním
systemctl disable iotedge.socket iotedge.mgmt.socket
zakažte jednotky soketů, aby se systém nespustí zbytečně. - Změna konfigurace iotedge tak, aby se používala
/var/lib/iotedge/*.sock
v obouconnect
listen
částech - Pokud už máte moduly, mají staré
/var/run/iotedge/*.sock
přípojky, takžedocker rm -f
jsou.
Modul nejde spustit kvůli neshodě operačního systému
Příznaky
Modul EdgeHub se nespustí ve službě IoT Edge verze 1.1.
Příčina
Modul Windows používá verzi Windows, která není kompatibilní s verzí Windows na hostiteli. Jako základní vrstvu image modulu se vyžaduje build IoT Edge verze 1809 17763, ale používá se jiná verze.
Řešení
Zkontrolujte verzi různých operačních systémů Windows v části Řešení potíží s neshodou imagí hostitele a kontejneru. Pokud se operační systémy liší, aktualizujte je na IoT Edge windows verze 1809 build 17763 a znovu sestavte image Dockeru používanou pro tento modul.
Sítě
Proces démon zabezpečení IoT Edge selže s neplatným názvem hostitele
Příznaky
Pokus o kontrolu protokolů správce zabezpečení IoT Edge se nezdaří a vytiskne následující zprávu:
Error parsing user input data: invalid hostname. Hostname cannot be empty or greater than 64 characters
Příčina
Modul runtime IoT Edge může podporovat pouze názvy hostitelů, které jsou kratší než 64 znaků. Fyzické počítače obvykle nemají dlouhé názvy hostitelů, ale problém je častější na virtuálním počítači. Automaticky generované názvy hostitelů pro virtuální počítače s Windows hostované v Azure jsou zejména dlouhé.
Řešení
Když se zobrazí tato chyba, můžete ji vyřešit konfigurací názvu DNS virtuálního počítače a následným nastavením názvu DNS jako názvu hostitele v příkazu nastavení.
Na webu Azure Portal přejděte na stránku s přehledem vašeho virtuálního počítače.
Vyberte konfigurovat pod názvem DNS. Pokud už váš virtuální počítač má nakonfigurovaný název DNS, nemusíte ho konfigurovat.
Zadejte hodnotu pro popisek názvu DNS a vyberte Uložit.
Zkopírujte nový název DNS, který by měl být ve formátu <DNSnamelabel>.<vmlocation.cloudapp.azure.com>.
V rámci virtuálního počítače pomocí následujícího příkazu nastavte modul runtime IoT Edge s názvem DNS:
V Linuxu:
sudo nano /etc/iotedge/config.yaml
Ve Windows:
notepad C:\ProgramData\iotedge\config.yaml
Modul IoT Edge hlásí chyby připojení
Příznaky
Moduly IoT Edge, které se připojují přímo ke cloudovým službám, včetně modulů runtime, přestanou fungovat podle očekávání a vrací chyby související s připojením nebo selháním sítě.
Příčina
Kontejnery spoléhají na předávání paketů PROTOKOLU IP, aby se mohly připojit k internetu, aby mohly komunikovat s cloudovými službami. Předávání paketů IP je ve výchozím nastavení v Dockeru povolené, ale pokud se zakáže, nebudou všechny moduly, které se připojují ke cloudovým službám, fungovat podle očekávání. Další informace najdete v tématu Vysvětlení komunikace kontejneru v dokumentaci k Dockeru.
Řešení
Pomocí následujících kroků povolte předávání paketů PROTOKOLU IP.
Ve Windows:
Otevřete aplikaci Spustit.
Zadejte
regedit
do textového pole a vyberte OK.V okně Editor registru přejděte na HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.
Vyhledejte parametr IPEnableRouter.
Pokud parametr existuje, nastavte hodnotu parametru na hodnotu 1.
Pokud parametr neexistuje, přidejte ho jako nový parametr s následujícím nastavením:
Nastavení Hodnota Name IPEnableRouter Typ REG_DWORD Hodnota 0
Zavřete okno editoru registru.
Restartujte systém, aby se změny použily.
V Linuxu:
Otevřete soubor sysctl.conf.
sudo nano /etc/sysctl.conf
Do souboru přidejte následující řádek.
net.ipv4.ip_forward=1
Soubor uložte a zavřete.
Restartujte síťovou službu a službu Dockeru, aby se změny použily.
Další kroky
Myslíte si, že jste v platformě IoT Edge našli chybu? Odešlete problém , abychom mohli pokračovat v vylepšování.
Pokud máte další otázky, vytvořte žádost o pomoc.