Share via


Oplossingen voor veelvoorkomende problemen voor Azure IoT Edge

Van toepassing op: Ja-pictogram IoT Edge 1.1

Belangrijk

Het einde van de ondersteuningsdatum voor IoT Edge 1.1 is 13 december 2022. Raadpleeg het levenscyclusbeleid van Microsoft voor informatie over hoe dit product of deze service, technologie of API wordt ondersteund. Zie IoT Edge bijwerken voor meer informatie over het bijwerken naar de nieuwste versie van IoT Edge.

Gebruik dit artikel om veelvoorkomende problemen te identificeren en op te lossen bij het gebruik van IoT Edge-oplossingen. Als u informatie nodig hebt over het vinden van logboeken en fouten van uw IoT Edge-apparaat, raadpleegt u Problemen met uw IoT Edge-apparaat oplossen.

Inrichten en implementeren

De IoT Edge-module wordt geïmplementeerd, maar verdwijnt vervolgens van het apparaat

Symptomen

Nadat u modules voor een IoT Edge-apparaat hebt ingesteld, worden de modules geïmplementeerd, maar na een paar minuten verdwijnen ze van het apparaat en van de apparaatdetails in Azure Portal. Andere modules dan de modules die zijn gedefinieerd, kunnen ook op het apparaat worden weergegeven.

Oorzaak

Als een automatische implementatie is gericht op een apparaat, heeft deze prioriteit boven het handmatig instellen van de modules voor één apparaat. De functionaliteit Modules instellen in Azure Portal of Implementatie maken voor functionaliteit voor één apparaat in Visual Studio Code wordt even van kracht. U ziet de modules die u hebt gedefinieerd, beginnen op het apparaat. Vervolgens wordt de prioriteit van de automatische implementatie gestart en worden de gewenste eigenschappen van het apparaat overschreven.

Oplossing

Gebruik slechts één type implementatiemechanisme per apparaat, ofwel een automatische implementatie of afzonderlijke apparaatimplementaties. Als u meerdere automatische implementaties hebt die zijn gericht op een apparaat, kunt u prioriteit of doelbeschrijvingen wijzigen om ervoor te zorgen dat de juiste implementatie van toepassing is op een bepaald apparaat. U kunt de apparaatdubbel ook bijwerken zodat deze niet meer overeenkomt met de doelbeschrijving van de automatische implementatie.

Zie Automatische implementaties van IoT Edge voor afzonderlijke apparaten of op schaal begrijpen voor meer informatie.

Kan de IoT Edge-runtimelogboeken niet ophalen in Windows

Symptomen

U krijgt een EventLogException wanneer u windows gebruikt Get-WinEvent .

Oorzaak

De Get-WinEvent PowerShell-opdracht is afhankelijk van een registervermelding die aanwezig is om logboeken te vinden op basis van een specifieke ProviderName.

Oplossing

Stel een registervermelding in voor de IoT Edge-daemon. Maak een iotedge.reg-bestand met de volgende inhoud en importeer het in het Windows-register door erop te dubbelklikken of met de reg import iotedge.reg opdracht:

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

DPS-clientfout

Symptomen

IoT Edge kan niet worden gestart met een foutbericht failed to provision with IoT Hub, and no valid device backup was found dps client error.

Oorzaak

Een groepsinschrijving wordt gebruikt om een IoT Edge-apparaat in te richten op een IoT Hub. Het IoT Edge-apparaat wordt verplaatst naar een andere hub. De registratie wordt verwijderd in DPS. Er wordt een nieuwe registratie gemaakt in DPS voor de nieuwe hub. Het apparaat wordt niet opnieuw geprovisioneerd.

Oplossing

  1. Controleer of uw DPS-referenties juist zijn.
  2. Pas uw configuratie toe met behulp van sudo iotedge apply config.
  3. Als het apparaat niet opnieuw wordt ingerichte, start u het apparaat opnieuw op met behulp van sudo iotedge system restart.
  4. Als het apparaat niet opnieuw wordt geprovisioneerd, moet u het opnieuw inrichten afdwingen met behulp van sudo iotedge system reprovision.

Als u de inrichting automatisch opnieuw wilt inrichten, stelt u dynamic_reprovisioning: true dit in het configuratiebestand van het apparaat in. Als u deze vlag instelt op true, wordt u aangemeld voor de functie voor dynamische herinrichting. IoT Edge detecteert situaties waarin het apparaat opnieuw is ingericht in de cloud door een eigen IoT Hub-verbinding voor bepaalde fouten te bewaken. IoT Edge reageert door alle Edge-modules en zichzelf af te sluiten. De volgende keer dat de daemon wordt gestart, wordt geprobeerd dit apparaat opnieuw in te richten met Azure om de nieuwe IoT Hub-inrichtingsgegevens te ontvangen.

Wanneer u externe inrichting gebruikt, informeert de daemon ook het externe inrichtingseindpunt over de reprovisioning-gebeurtenis voordat deze wordt afgesloten. Zie concepten voor het opnieuw inrichten van IoT Hub-apparaten voor meer informatie.

IoT Edge-runtime

IoT Edge-agent stopt na een minuut

Symptomen

De edgeAgent-module wordt ongeveer een minuut gestart en uitgevoerd en stopt vervolgens. De logboeken geven aan dat de IoT Edge-agent probeert verbinding te maken met IoT Hub via AMQP en vervolgens probeert verbinding te maken via AMQP via WebSocket. Als dat mislukt, wordt de IoT Edge-agent afgesloten.

Voorbeeld van edgeAgent-logboeken:

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

Oorzaak

Een netwerkconfiguratie op het hostnetwerk voorkomt dat de IoT Edge-agent het netwerk bereikt. De agent probeert eerst verbinding maken via AMQP (poort 5671). Als de verbinding mislukt, wordt WebSockets (poort 443) geprobeerd.

De IoT Edge-runtime stelt een netwerk in voor elk van de modules waarmee moet worden gecommuniceerd. In Linux is dit netwerk een brugnetwerk. In Windows wordt NAT gebruikt. Dit probleem komt vaker voor op Windows-apparaten die gebruikmaken van Windows-containers die het NAT-netwerk gebruiken.

Oplossing

Zorg ervoor dat er een route naar internet is voor de IP-adressen die zijn toegewezen aan dit brug-/NAT-netwerk. Soms heeft een VPN-configuratie op de host voorrang op het IoT Edge-netwerk.

Edge-agentmodule rapporteert 'leeg configuratiebestand' en er worden geen modules gestart op het apparaat

Symptomen

Het apparaat ondervindt problemen bij het starten van modules die zijn gedefinieerd in de implementatie. Alleen de edgeAgent wordt uitgevoerd, maar rapporteert voortdurend 'leeg configuratiebestand...'.

Oorzaak

Standaard start IoT Edge modules in hun eigen geïsoleerde containernetwerk. Het apparaat ondervindt mogelijk problemen met DNS-naamomzetting binnen dit privénetwerk.

Oplossing

Optie 1: DNS-server instellen in instellingen voor container-engine

Geef de DNS-server voor uw omgeving op in de instellingen van de containerengine, die van toepassing zijn op alle containermodules die door de engine zijn gestart. Maak een bestand met de naam daemon.jsonen geef vervolgens de DNS-server op die moet worden gebruikt. Voorbeeld:

{
    "dns": ["1.1.1.1"]
}

Deze DNS-server is ingesteld op een openbaar toegankelijke DNS-service. Sommige netwerken, zoals bedrijfsnetwerken, hebben echter hun eigen DNS-servers geïnstalleerd en staan geen toegang tot openbare DNS-servers toe. Als uw edge-apparaat geen toegang heeft tot een openbare DNS-server, vervangt u dit door een toegankelijk DNS-serveradres.

Plaats daemon.json op de juiste locatie voor uw platform:

Platform Locatie
Linux /etc/docker
Windows-host met Windows-containers C:\ProgramData\iotedge-moby\config

Als de locatie al een bestand bevat daemon.json , voegt u de DNS-sleutel eraan toe en slaat u het bestand op.

Start de containerengine opnieuw op om de updates van kracht te laten worden.

Platform Opdracht
Linux sudo systemctl restart docker
Windows (Admin PowerShell) Restart-Service iotedge-moby -Force

Optie 2: DNS-server instellen in IoT Edge-implementatie per module

U kunt dns-server instellen voor de createOptions van elke module in de IoT Edge-implementatie. Voorbeeld:

"createOptions": {
  "HostConfig": {
    "Dns": [
      "x.x.x.x"
    ]
  }
}

Waarschuwing

Als u deze methode gebruikt en het verkeerde DNS-adres opgeeft, verliest edgeAgent de verbinding met IoT Hub en kan geen nieuwe implementaties ontvangen om het probleem op te lossen. U kunt dit probleem oplossen door de IoT Edge-runtime opnieuw te installeren. Voordat u een nieuw exemplaar van IoT Edge installeert, moet u alle EdgeAgent-containers uit de vorige installatie verwijderen.

Zorg ervoor dat u deze configuratie ook instelt voor de edgeAgent - en EdgeHub-modules .

De IoT Edge-agent heeft geen toegang tot de installatiekopie van een module (403)

Symptomen

Een container kan niet worden uitgevoerd en in de edgeAgent-logboeken wordt een 403-fout gerapporteerd.

Oorzaak

De IoT Edge-agentmodule heeft geen machtigingen voor toegang tot de installatiekopieën van een module.

Oplossing

Zorg ervoor dat uw containerregisterreferenties juist zijn voor het implementatiemanifest van uw apparaat.

IoT Edge-hub kan niet worden gestart

Symptomen

De EdgeHub-module kan niet worden gestart. Mogelijk ziet u een bericht zoals een van de volgende fouten in de logboeken:

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)

Oorzaak

Een ander proces op de hostcomputer heeft een poort gebonden die de edgeHub-module probeert te binden. De IoT Edge-hub wijst poorten 443, 5671 en 8883 toe voor gebruik in gatewayscenario's. De module kan niet worden gestart als er al een ander proces aan een van deze poorten is gebonden.

Oplossing

U kunt dit probleem op twee manieren oplossen:

Als het IoT Edge-apparaat werkt als een gatewayapparaat, moet u het proces zoeken en stoppen dat gebruikmaakt van poort 443, 5671 of 8883. Een fout voor poort 443 betekent meestal dat het andere proces een webserver is.

Als u het IoT Edge-apparaat niet als gateway hoeft te gebruiken, kunt u de poortbindingen verwijderen uit de opties voor het maken van edgeHub-modules. U kunt de opties voor maken wijzigen in Azure Portal of rechtstreeks in het deployment.json-bestand.

In Azure Portal:

  1. Navigeer naar uw IoT-hub en selecteer Apparaten in het menu Apparaatbeheer.

  2. Selecteer het IoT Edge-apparaat dat u wilt bijwerken.

  3. Selecteer Modules instellen.

  4. Selecteer Runtime-instellingen.

  5. Verwijder alles uit het tekstvak Opties maken in de instellingen van de Edge Hub-module.

  6. Sla uw wijzigingen op en maak de implementatie.

In het bestand deployment.json:

  1. Open het deployment.json-bestand dat u hebt toegepast op uw IoT Edge-apparaat.

  2. Zoek de edgeHub instellingen in de sectie gewenste eigenschappen van 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. Verwijder de createOptions lijn en de volgkomma aan het einde van de image regel ervoor:

    "edgeHub": {
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.1"
        },
        "type": "docker",
        "status": "running",
        "restartPolicy": "always"
    }
    
  4. Sla het bestand op en pas het opnieuw toe op uw IoT Edge-apparaat.

IoT Edge-module kan geen bericht verzenden naar edgeHub met 404-fout

Symptomen

Een aangepaste IoT Edge-module kan geen bericht verzenden naar de IoT Edge-hub met een 404-fout Module not found . De IoT Edge-runtime drukt het volgende bericht af in de logboeken:

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 )

Oorzaak

De IoT Edge-runtime dwingt procesidentificatie af voor alle modules die verbinding maken met edgeHub om veiligheidsredenen. Hiermee wordt gecontroleerd of alle berichten die door een module worden verzonden afkomstig zijn van de hoofdproces-id van de module. Als een bericht wordt verzonden door een module van een andere proces-id dan in eerste instantie tot stand is gebracht, wordt het bericht geweigerd met een 404-foutbericht.

Oplossing

Vanaf versie 1.0.7 zijn alle moduleprocessen gemachtigd om verbinding te maken. Zie het wijzigingenlogboek voor de release 1.0.7 voor meer informatie.

Als een upgrade naar 1.0.7 niet mogelijk is, voert u de volgende stappen uit. Zorg ervoor dat dezelfde proces-id altijd wordt gebruikt door de aangepaste IoT Edge-module om berichten naar edgeHub te verzenden. Zorg er bijvoorbeeld voor dat ENTRYPOINT u in plaats van CMD de opdracht in uw Docker-bestand. De CMD opdracht leidt naar één proces-id voor de module en een andere proces-id voor de bash-opdracht waarop het hoofdprogramma wordt uitgevoerd, maar ENTRYPOINT leidt tot één proces-id.

Stabiliteitsproblemen op kleinere apparaten

Symptomen

U kunt stabiliteitsproblemen ondervinden op apparaten met beperkte resources, zoals de Raspberry Pi, met name wanneer u als gateway wordt gebruikt. Symptomen zijn uitzonderingen met onvoldoende geheugen in de IoT Edge-hubmodule, downstreamapparaten die geen verbinding kunnen maken of het apparaat kan na enkele uren geen telemetrieberichten verzenden.

Oorzaak

De IoT Edge-hub, die deel uitmaakt van de IoT Edge-runtime, is standaard geoptimaliseerd voor prestaties en probeert grote segmenten geheugen toe te wijzen. Deze optimalisatie is niet ideaal voor beperkte edge-apparaten en kan stabiliteitsproblemen veroorzaken.

Oplossing

Stel voor de IoT Edge-hub een omgevingsvariabele OptimizeForPerformance in op false. Er zijn twee manieren om omgevingsvariabelen in te stellen:

In Azure Portal:

Selecteer uw IoT Edge-apparaat in uw IoT Hub en selecteer op de pagina met apparaatdetails de optie Runtime-instellingen voor modules>instellen. Maak een omgevingsvariabele voor de IoT Edge-hubmodule met de naam OptimizeForPerformance die is ingesteld op false.

OptimizeForPerformance ingesteld op false

In het implementatiemanifest:

"edgeHub": {
  "type": "docker",
  "settings": {
    "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
    "createOptions": <snipped>
  },
  "env": {
    "OptimizeForPerformance": {
      "value": "false"
    }
  },

Beveiligingsdaemon kan niet worden gestart

Symptomen

De beveiligingsdemon kan niet worden gestart en modulecontainers worden niet gemaakt. De edgeAgenten edgeHub andere aangepaste modules worden niet gestart door de IoT Edge-service. In aziot-edged logboeken ziet u deze fout:

  • De daemon kan niet worden opgestart: kan de beheerservice niet starten
  • veroorzaakt door: Er is een fout opgetreden voor pad /var/run/iotedge/mgmt.sock
  • veroorzaakt door: Machtiging geweigerd (besturingssysteemfout 13)

Oorzaak

Voor alle Linux-distributies behalve CentOS 7 is de standaardconfiguratie van IoT Edge het gebruik van systemd socketactivering. Er treedt een machtigingsfout op als u het configuratiebestand wijzigt om geen socketactivering te gebruiken, maar de URL's /var/run/iotedge/*.sockongewijzigd laat, omdat de gebruiker niet kan schrijven naar /var/run/iotedge de betekenis dat het iotedge de sockets zelf niet kan ontgrendelen en koppelen.

Oplossing

U hoeft socketactivering niet uit te schakelen voor een distributie waarbij socketactivering wordt ondersteund. Als u echter liever helemaal geen socketactivering gebruikt, plaatst u de sockets in /var/lib/iotedge/.

  1. Uitvoeren systemctl disable iotedge.socket iotedge.mgmt.socket om de socketeenheden uit te schakelen, zodat de systeemeenheden niet onnodig worden gestart
  2. De iotedge-configuratie wijzigen voor gebruik /var/lib/iotedge/*.sock in zowel connect listen secties als in beide secties
  3. Als u al modules hebt, hebben ze de oude /var/run/iotedge/*.sock koppels, dus docker rm -f ze.

Kan de module niet starten omdat het besturingssysteem niet overeenkomt

Symptoom

De EdgeHub-module kan niet worden gestart in IoT Edge versie 1.1.

Oorzaak

Windows-module maakt gebruik van een versie van Windows die niet compatibel is met de versie van Windows op de host. IoT Edge Windows versie 1809 build 17763 is nodig als de basislaag voor de module-installatiekopieën, maar er wordt een andere versie gebruikt.

Oplossing

Controleer de versie van uw verschillende Windows-besturingssystemen in Problemen met host- en containerinstallatiekopieën oplossen. Als de besturingssystemen verschillen, werkt u deze bij naar IoT Edge Windows versie 1809 build 17763 en bouwt u de Docker-installatiekopieën opnieuw die voor die module worden gebruikt.

Netwerken

IoT Edge-beveiligingsdaemon mislukt met een ongeldige hostnaam

Symptomen

Het controleren van de IoT Edge-beveiligingsbeheerlogboeken mislukt en het volgende bericht wordt afgedrukt:

Error parsing user input data: invalid hostname. Hostname cannot be empty or greater than 64 characters

Oorzaak

De IoT Edge-runtime kan alleen hostnamen ondersteunen die korter zijn dan 64 tekens. Fysieke machines hebben meestal geen lange hostnamen, maar het probleem komt vaker voor op een virtuele machine. De automatisch gegenereerde hostnamen voor virtuele Windows-machines die worden gehost in Azure, zijn meestal lang.

Oplossing

Wanneer u deze fout ziet, kunt u deze oplossen door de DNS-naam van uw virtuele machine te configureren en vervolgens de DNS-naam in te stellen als de hostnaam in de installatieopdracht.

  1. Navigeer in Azure Portal naar de overzichtspagina van uw virtuele machine.

  2. Selecteer Configureren onder DNS-naam. Als op uw virtuele machine al een DNS-naam is geconfigureerd, hoeft u geen nieuwe te configureren.

    DNS-naam van virtuele machine configureren

  3. Geef een waarde op voor het DNS-naamlabel en selecteer Opslaan.

  4. Kopieer de nieuwe DNS-naam, die de indeling <DNSnamelabel> moet hebben.<vmlocation.cloudapp.azure.com>.

  5. Gebruik in de virtuele machine de volgende opdracht om de IoT Edge-runtime in te stellen met uw DNS-naam:

    • Op Linux:

      sudo nano /etc/iotedge/config.yaml
      
    • In Windows:

      notepad C:\ProgramData\iotedge\config.yaml
      

IoT Edge-module rapporteert connectiviteitsfouten

Symptomen

IoT Edge-modules die rechtstreeks verbinding maken met cloudservices, inclusief de runtimemodules, werken niet meer zoals verwacht en retourneren fouten rond verbindings- of netwerkfouten.

Oorzaak

Containers zijn afhankelijk van het doorsturen van IP-pakketten om verbinding te maken met internet, zodat ze kunnen communiceren met cloudservices. Doorsturen van IP-pakketten is standaard ingeschakeld in Docker, maar als het wordt uitgeschakeld, werken modules die verbinding maken met cloudservices niet zoals verwacht. Zie Informatie over containercommunicatie in de Docker-documentatie voor meer informatie.

Oplossing

Gebruik de volgende stappen om doorsturen van IP-pakketten in te schakelen.

In Windows:

  1. Open de toepassing Uitvoeren .

  2. Voer regedit het tekstvak in en selecteer OK.

  3. Blader in het venster Registereditor naar HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters.

  4. Zoek de parameter IPEnableRouter .

    1. Als de parameter bestaat, stelt u de waarde van de parameter in op 1.

    2. Als de parameter niet bestaat, voegt u deze toe als een nieuwe parameter met de volgende instellingen:

      Instelling Weergegeven als
      Naam IPEnableRouter
      Type REG_DWORD
      Weergegeven als 1
  5. Sluit het venster van de registereditor.

  6. Start uw systeem opnieuw op om de wijzigingen toe te passen.

Op Linux:

  1. Open het bestand sysctl.conf .

    sudo nano /etc/sysctl.conf
    
  2. Voeg de volgende regel aan het bestand toe.

    net.ipv4.ip_forward=1
    
  3. Sla het bestand op en sluit het bestand.

  4. Start de netwerkservice en docker-service opnieuw op om de wijzigingen toe te passen.

Volgende stappen

Denkt u dat u een fout op het IoT Edge-platform hebt gevonden? Dien een probleem in, zodat we kunnen blijven verbeteren.

Als u meer vragen hebt, maakt u een ondersteuningsaanvraag voor hulp.