Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:
IoT Edge 1.1
Důležité
IoT Edge 1.1 datum ukončení podpory 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 AktualizaceIoT 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 Nastavení modulů v Azure portálu nebo funkce Vytvoření nasazení pro jedno zařízení v editoru Visual Studio Code má okamžitý účinek. Na zařízení vidíte moduly, které jste definovali, jak se spouštějí. 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.
Nepodařilo se získat protokoly runtime IoT Edge na 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 ProviderNameuživatelem .
Řešení
Nastavte položku registru pro 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 konfiguraci 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í opět nakonfigurováno.
Řešení
- Ověřte správnost přihlašovacích údajů DPS.
- Použijte svou konfiguraci s použitím
sudo iotedge apply config. - Pokud není zařízení znovu nastaveno, 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.
IoT Edge runtime
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 operačním systémem Windows, která využívají kontejnery systému Windows a síť NAT.
Řešení
Ujistěte se, že pro IP adresy přiřazené této síti bridge/NAT existuje směrování k internetu. Někdy konfigurace VPN na hostiteli přepíše konfiguraci sítě 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í. Spouští se pouze 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.jsona zadejte server DNS, který se má použít. Napří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 koncové zařízení nemá přístup k veřejnému serveru DNS, nahraďte adresu serveru DNS dostupnou adresou.
Místěte daemon.json na správné místo 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 (Administrátorský PowerShell) | Restart-Service iotedge-moby -Force |
Možnost 2: Nastavení serveru DNS v nasazení IoT Edge na modul
V nasazení IoT Edge můžete nastavit server DNS pro createOptions každého modulu. Například:
"createOptions": {
"HostConfig": {
"Dns": [
"x.x.x.x"
]
}
}
Výstraha
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 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.
edgeHubVyhledejte 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
createOptionsa 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 ENTRYPOINTCMD 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"
}
},
Nepodařilo se úspěšně spustit bezpečnostní démon.
Příznaky
Proces démon zabezpečení se nespustí a kontejnery modulů se nevytvořily.
edgeAgent Služba edgeHubIoT Edge nespustit moduly a další vlastní moduly. V aziot-edged protokolech se zobrazí tato chyba:
- Démona se nepodařilo úspěšně spustit: Nepodařilo se spustit řídicí službu.
- 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, pokud změníte konfigurační soubor tak, aby nepoužíval aktivaci soketu, ale ponecháte adresy URL jako /var/run/iotedge/*.sock, protože uživatel iotedge nemůže zapisovat do /var/run/iotedge, což 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.socketzakažte jednotky soketů, aby se systém nespustí zbytečně. - Změňte konfiguraci iotedge, aby se použila
/var/lib/iotedge/*.sockv obouconnectalistenčástech. - Pokud už máte moduly, mají staré
/var/run/iotedge/*.sockpřípojky, takžedocker rm -fvyměňte.
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í vrstva pro image modulu je třeba IoT Edge Windows verze 1809 build 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íťování
Proces služby zabezpečení IoT Edge selže s neplatným názvem hostitele
Příznaky
Pokus o zkontrolování protokolů správce zabezpečení IoT Edge selže a zobrazí 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.yamlV systému 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.
V systému Windows
Otevřete aplikaci Spustit .
Zadejte
regeditdo 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 Název IPEnableRouter Typ REG_DWORD Hodnota 1
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.confDo souboru přidejte následující řádek.
net.ipv4.ip_forward=1Uložte a zavřete soubor.
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.