Řešení běžných problémů s IoT Edge

Platí pro: Ikona Ano 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 ProviderNameuž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í

  1. Ověřte správnost přihlašovacích údajů DPS.
  2. Použijte konfiguraci pomocí sudo iotedge apply config.
  3. Pokud zařízení není znovu zřízený, restartujte ho pomocí sudo iotedge system restart.
  4. 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.jsona 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:

  1. Přejděte do centra IoT a v nabídce Správa zařízení vyberte Zařízení.

  2. Vyberte zařízení IoT Edge, které chcete aktualizovat.

  3. Vyberte Nastavit moduly.

  4. Vyberte Nastavení modulu runtime.

  5. V nastavení modulu Edge Hub odstraňte všechno z textového pole Vytvořit možnosti.

  6. Uložte změny a vytvořte nasazení.

V souboru deployment.json:

  1. Otevřete soubor deployment.json, který jste použili na zařízení IoT Edge.

  2. 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"
    }
    
  3. Odeberte čáru createOptions a koncovou čárku na konci image řádku před ní:

    "edgeHub": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  4. 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.

OptimizeForPerformance 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 edgeAgentIoT 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/.

  1. Spuštěním systemctl disable iotedge.socket iotedge.mgmt.socket zakažte jednotky soketů, aby se systém nespustí zbytečně.
  2. Změna konfigurace iotedge tak, aby se používala /var/lib/iotedge/*.sock v obou connect listen částech
  3. Pokud už máte moduly, mají staré /var/run/iotedge/*.sock přípojky, takže docker 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í.

  1. Na webu Azure Portal přejděte na stránku s přehledem vašeho virtuálního počítače.

  2. Vyberte konfigurovat pod názvem DNS. Pokud už váš virtuální počítač má nakonfigurovaný název DNS, nemusíte ho konfigurovat.

    Konfigurace názvu DNS virtuálního počítače

  3. Zadejte hodnotu pro popisek názvu DNS a vyberte Uložit.

  4. Zkopírujte nový název DNS, který by měl být ve formátu <DNSnamelabel>.<vmlocation.cloudapp.azure.com>.

  5. 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:

  1. Otevřete aplikaci Spustit.

  2. Zadejte regedit do textového pole a vyberte OK.

  3. V okně Editor registru přejděte na HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.

  4. Vyhledejte parametr IPEnableRouter.

    1. Pokud parametr existuje, nastavte hodnotu parametru na hodnotu 1.

    2. 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
  5. Zavřete okno editoru registru.

  6. Restartujte systém, aby se změny použily.

V Linuxu:

  1. Otevřete soubor sysctl.conf.

    sudo nano /etc/sysctl.conf
    
  2. Do souboru přidejte následující řádek.

    net.ipv4.ip_forward=1
    
  3. Soubor uložte a zavřete.

  4. 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.