Share via


Problemen met uw IoT Edge-apparaat oplossen

Van toepassing op: IoT Edge 1.5-vinkje IoT Edge 1.5 Vinkje voor IoT Edge 1.4 IoT Edge 1.4

Belangrijk

IoT Edge 1.5 LTS en IoT Edge 1.4 LTS worden ondersteund releases. IoT Edge 1.4 LTS eindigt op 12 november 2024. Raadpleeg IoT Edge bijwerken als u een eerdere versie hebt.

Als u problemen ondervindt met het uitvoeren van Azure IoT Edge in uw omgeving, gebruikt u dit artikel als richtlijn voor het oplossen van problemen en diagnostische gegevens.

Voer de opdracht 'check' uit

Uw eerste stap bij het oplossen van problemen met IoT Edge moet zijn om de check opdracht te gebruiken, waarmee een verzameling configuratie- en connectiviteitstests voor veelvoorkomende problemen wordt uitgevoerd. De check opdracht is beschikbaar in release 1.0.7 en hoger.

Notitie

Het hulpprogramma voor probleemoplossing kan geen connectiviteitscontroles uitvoeren als het IoT Edge-apparaat zich achter een proxyserver bevindt.

U kunt de check opdracht als volgt uitvoeren of de --help vlag opnemen om een volledige lijst met opties weer te geven:

sudo iotedge check

Het hulpprogramma voor probleemoplossing voert veel controles uit die in deze drie categorieën zijn gesorteerd:

  • Configuratiecontroles onderzoeken details die kunnen voorkomen dat IoT Edge-apparaten verbinding maken met de cloud, inclusief problemen met het configuratiebestand en de containerengine.
  • Verbindingscontroles controleren of de IoT Edge-runtime toegang heeft tot poorten op het hostapparaat en of alle IoT Edge-onderdelen verbinding kunnen maken met de IoT Hub. Deze set controles retourneert fouten als het IoT Edge-apparaat zich achter een proxy bevindt.
  • Controles voor productiegereedheid zoeken naar aanbevolen best practices voor productie, zoals de status van ca-certificaten (device certificate authority) en configuratie van modulelogboekbestanden.

Het ioT Edge-controleprogramma maakt gebruik van een container om de diagnostische gegevens uit te voeren. De containerinstallatiekopieën, mcr.microsoft.com/azureiotedge-diagnostics:latestzijn beschikbaar via Het Microsoft Container Registry. Als u een controle op een apparaat wilt uitvoeren zonder directe toegang tot internet, hebben uw apparaten toegang nodig tot de containerinstallatiekopieën.

In een scenario met geneste IoT Edge-apparaten kunt u toegang krijgen tot de diagnostische installatiekopie op downstreamapparaten door de installatiekopie te routeren die via de bovenliggende apparaten worden opgehaald.

sudo iotedge check --diagnostics-image-name <parent_device_fqdn_or_ip>:<port_for_api_proxy_module>/azureiotedge-diagnostics:1.2

Zie IoT Edge-problemen oplossen voor informatie over elk van de diagnostische controles die door dit hulpprogramma worden uitgevoerd, inclusief wat u moet doen als u een fout of waarschuwing krijgt.

Foutopsporingsgegevens verzamelen met de opdracht 'support-bundle'

Wanneer u logboeken van een IoT Edge-apparaat wilt verzamelen, is het handigst om de support-bundle opdracht te gebruiken. Met deze opdracht worden standaard module-, IoT Edge-beveiligingsbeheer- en containerenginelogboeken, iotedge check JSON-uitvoer en andere nuttige foutopsporingsgegevens verzameld. Het comprimeert ze in één bestand voor eenvoudig delen. De support-bundle opdracht is beschikbaar in release 1.0.9 en hoger.

Voer de support-bundle opdracht uit met de --since vlag om op te geven hoe lang u logboeken wilt ophalen uit het verleden. Haalt bijvoorbeeld 6h logboeken op sinds de afgelopen zes uur, 6d sinds de afgelopen zes dagen, 6m sinds de afgelopen zes minuten enzovoort. Voeg de --help vlag toe om een volledige lijst met opties weer te geven.

sudo iotedge support-bundle --since 6h

De opdracht maakt standaard een zip-bestand met de support-bundle naam support_bundle.zip in de map waarin de opdracht wordt aangeroepen. Gebruik de vlag --output om een ander pad of een andere bestandsnaam voor de uitvoer op te geven.

Bekijk de Help-informatie voor meer informatie over de opdracht.

iotedge support-bundle --help

U kunt ook de ingebouwde directe methode UploadSupportBundle aanroepen om de uitvoer van de opdracht support-bundle te uploaden naar Azure Blob Storage.

Waarschuwing

Uitvoer van de support-bundle opdracht kan host-, apparaat- en modulenamen, informatie bevatten die door uw modules is geregistreerd, enzovoort. Houd er rekening mee als u de uitvoer deelt op een openbaar forum.

Metrische gegevens bekijken die zijn verzameld uit de runtime

De IoT Edge-runtimemodules produceren metrische gegevens om u te helpen bij het bewaken en begrijpen van de status van uw IoT Edge-apparaten. Voeg de module metrics-collector toe aan uw implementaties om het verzamelen van deze metrische gegevens af te handelen en deze naar de cloud te verzenden voor eenvoudigere bewaking.

Zie Metrische gegevens verzamelen en transporten voor meer informatie.

Uw IoT Edge-versie controleren

Als u een oudere versie van IoT Edge hebt, kunt u het probleem mogelijk oplossen door een upgrade uit te voeren. Het iotedge check hulpprogramma controleert of de IoT Edge-beveiligingsdaemon de nieuwste versie is, maar controleert niet de versies van de IoT Edge-hub en agentmodules. Als u de versie van de runtimemodules op uw apparaat wilt controleren, gebruikt u de opdrachten iotedge logs edgeAgent en iotedge logs edgeHub. Het versienummer staat in de logboeken vermeld wanneer de module wordt gestart.

Zie De IoT Edge-beveiligingsdaemon en runtime bijwerken voor instructies over het bijwerken van uw apparaat.

De installatie van IoT Edge op uw apparaten controleren

U kunt de installatie van IoT Edge op uw apparaten controleren door de edgeAgent-moduledubbel te controleren.

Voer de volgende opdracht uit vanuit Azure Cloud Shell om de nieuwste edgeAgent-moduledubbel op te halen:

az iot hub module-twin show --device-id <edge_device_id> --module-id '$edgeAgent' --hub-name <iot_hub_name>

Met deze opdracht worden alle gerapporteerde eigenschappen van edgeAgent uitgevoerd. Hier volgen enkele nuttige functies die de status van het apparaat controleren:

  • runtimestatus
  • begintijd van runtime
  • runtime laatste afsluittijd
  • Aantal runtime-herstarts

Controleer de status van ioT Edge-beveiligingsbeheer en de bijbehorende logboeken

IoT Edge-beveiligingsbeheer is verantwoordelijk voor bewerkingen zoals het initialiseren van het IoT Edge-systeem bij het opstarten en inrichten van apparaten. Als IoT Edge niet wordt gestart, kunnen de beveiligingsbeheerlogboeken nuttige informatie bieden.

  • Bekijk de status van de IoT Edge-systeemservices:

    sudo iotedge system status
    
  • Bekijk de logboeken van de IoT Edge-systeemservices:

    sudo iotedge system logs -- -f
    
  • Schakel logboeken op foutopsporingsniveau in om gedetailleerdere logboeken van de IoT Edge-systeemservices weer te geven:

    1. Schakel logboeken op foutopsporingsniveau in.

      sudo iotedge system set-log-level debug
      sudo iotedge system restart
      
    2. Ga terug naar de standaardlogboeken op informatieniveau na foutopsporing.

      sudo iotedge system set-log-level info
      sudo iotedge system restart
      

Containerlogboeken controleren op problemen

Zodra de IoT Edge-beveiligingsdaemon wordt uitgevoerd, bekijkt u de logboeken van de containers om problemen te detecteren. Begin met uw geïmplementeerde containers en bekijk vervolgens de containers waaruit de IoT Edge-runtime bestaat: edgeAgent en edgeHub. De Logboeken van de IoT Edge-agent bieden doorgaans informatie over de levenscyclus van elke container. De IoT Edge-hublogboeken bieden informatie over berichten en routering.

U kunt de containerlogboeken ophalen van verschillende locaties:

Containerlogboeken opschonen

De Moby-containerengine stelt standaard geen limieten in voor de grootte van containerlogboeken. In de loop van de tijd kunnen uitgebreide logboeken ertoe leiden dat het apparaat volloopt met logboeken en onvoldoende schijfruimte heeft. Als grote containerlogboeken van invloed zijn op de prestaties van uw IoT Edge-apparaat, gebruikt u de volgende opdracht om de container samen met de bijbehorende logboeken af te dwingen.

Als u nog steeds problemen ondervindt, wacht u totdat u de containerlogboeken hebt gecontroleerd om deze stap uit te voeren.

Waarschuwing

Als u afdwingen dat de EdgeHub-container wordt verwijderd terwijl deze een niet-bezorgde berichtenachterstand heeft en er geen hostopslag is ingesteld, gaan de niet-bezorgde berichten verloren.

docker rm --force <container name>

Voor doorlopende onderhouds- en productiescenario's stelt u het standaardstuurprogramma voor logboekregistratie in.

De berichten bekijken die via de IoT Edge-hub gaan

U kunt de berichten bekijken die via de IoT Edge-hub gaan en inzichten verzamelen uit uitgebreide logboeken van de runtimecontainers. Als u uitgebreide logboeken voor deze containers wilt inschakelen, stelt u de RuntimeLogLevel omgevingsvariabele in het implementatiemanifest in.

Als u berichten wilt bekijken die via de IoT Edge-hub gaan, stelt u de RuntimeLogLevel omgevingsvariabele debug in op de edgeHub-module.

Zowel de edgeHub- als edgeAgent-modules hebben deze runtimelogboekomgevingsvariabele, waarbij de standaardwaarde is ingesteld op info. Deze omgevingsvariabele kan de volgende waarden aannemen:

  • noodlottig
  • error
  • waarschuwing
  • Info
  • foutopsporing
  • uitgebreid

U kunt ook controleren of er berichten worden verzonden tussen IoT Hub- en IoT-apparaten. Bekijk deze berichten met behulp van de Azure IoT Hub-extensie voor Visual Studio Code. Zie Het handige hulpprogramma bij het ontwikkelen met Azure IoT voor meer informatie.

Containers opnieuw opstarten

Nadat u de logboeken en berichten voor informatie hebt onderzocht, kunt u proberen containers opnieuw te starten.

Gebruik op het IoT Edge-apparaat de volgende opdrachten om modules opnieuw op te starten:

iotedge restart <container name>

Start de IoT Edge-runtimecontainers opnieuw:

iotedge restart edgeAgent && iotedge restart edgeHub

U kunt modules ook extern opnieuw opstarten vanuit Azure Portal. Zie IoT Edge-apparaten bewaken en problemen oplossen vanuit Azure Portal voor meer informatie.

Uw firewall- en poortconfiguratieregels controleren

Met Azure IoT Edge kan communicatie van een on-premises server naar de Azure-cloud worden uitgevoerd met behulp van ondersteunde IoT Hub-protocollen. Zie het kiezen van een communicatieprotocol voor meer informatie. Voor verbeterde beveiliging zijn communicatiekanalen tussen Azure IoT Edge en Azure IoT Hub altijd geconfigureerd voor uitgaand verkeer. Deze configuratie is gebaseerd op het patroon Services Assisted Communication, waardoor het kwetsbaarheid voor aanvallen voor een kwaadwillende entiteit wordt geminimaliseerd om te verkennen. Binnenkomende communicatie is alleen vereist voor specifieke scenario's waarbij Azure IoT Hub berichten naar het Azure IoT Edge-apparaat moet pushen. Cloud-naar-apparaat-berichten worden beveiligd met behulp van beveiligde TLS-kanalen en kunnen verder worden beveiligd met X.509-certificaten en TPM-apparaatmodules. Azure IoT Edge Security Manager bepaalt hoe deze communicatie tot stand kan worden gebracht. Zie IoT Edge Security Manager.

Hoewel IoT Edge een verbeterde configuratie biedt voor het beveiligen van Azure IoT Edge-runtime en geïmplementeerde modules, is deze nog steeds afhankelijk van de onderliggende computer- en netwerkconfiguratie. Daarom is het noodzakelijk om ervoor te zorgen dat de juiste netwerk- en firewallregels zijn ingesteld voor beveiligde edge-naar-cloudcommunicatie. De volgende tabel kan worden gebruikt als richtlijn bij configuratiefirewallregels voor de onderliggende servers waarop Azure IoT Edge-runtime wordt gehost:

Protocol Port Binnenkomend Uitgaand Richtlijn
MQTT 8883 GEBLOKKEERD (standaard) GEBLOKKEERD (standaard)
  • Configureer uitgaande (uitgaande) om te worden geopend wanneer u MQTT als communicatieprotocol gebruikt.
  • 1883 voor MQTT wordt niet ondersteund door IoT Edge.
  • Binnenkomende (binnenkomende) verbindingen moeten worden geblokkeerd.
AMQP 5671 GEBLOKKEERD (standaard) OPENEN (standaard)
  • Standaardcommunicatieprotocol voor IoT Edge.
  • Moet zijn geconfigureerd om open te zijn als Azure IoT Edge niet is geconfigureerd voor andere ondersteunde protocollen of AMQP het gewenste communicatieprotocol is.
  • 5672 voor AMQP wordt niet ondersteund door IoT Edge.
  • Blokkeer deze poort wanneer Azure IoT Edge gebruikmaakt van een ander door IoT Hub ondersteund protocol.
  • Binnenkomende (binnenkomende) verbindingen moeten worden geblokkeerd.
HTTPS 443 GEBLOKKEERD (standaard) OPENEN (standaard)
  • Configureer uitgaande (uitgaande) inrichting op 443 voor IoT Edge-inrichting. Deze configuratie is vereist bij het gebruik van handmatige scripts of Azure IoT Device Provisioning Service (DPS).
  • Binnenkomende (binnenkomende) verbinding mag alleen worden geopend voor specifieke scenario's:
    • Als u een transparante gateway hebt met downstreamapparaten die methodeaanvragen kunnen verzenden. In dit geval hoeft poort 443 niet open te staan voor externe netwerken om verbinding te maken met IoTHub of IoTHub-services te leveren via Azure IoT Edge. De regel voor binnenkomend verkeer kan dus worden beperkt tot alleen binnenkomende (inkomende) openen vanuit het interne netwerk.
    • Voor C2D-scenario's (Client to Device).
  • 80 voor HTTP wordt niet ondersteund door IoT Edge.
  • Als niet-HTTP-protocollen (bijvoorbeeld AMQP of MQTT) niet kunnen worden geconfigureerd in de onderneming; de berichten kunnen via WebSockets worden verzonden. Poort 443 wordt gebruikt voor WebSocket-communicatie in dat geval.

Laatste redmiddel: alle containers stoppen en opnieuw maken

Soms kan een systeem aanzienlijke speciale aanpassingen vereisen om te kunnen werken met bestaande netwerk- of besturingssysteembeperkingen. Een systeem kan bijvoorbeeld een andere koppeling van gegevensschijven en proxyinstellingen vereisen. Als u alle vorige stappen hebt geprobeerd en nog steeds containerfouten hebt opgehaald, worden de docker-systeemcaches of permanente netwerkinstellingen mogelijk niet bijgewerkt met de meest recente herconfiguratie. In dit geval is de laatste redmiddeloptie om een volledig nieuwe start te maken docker prune .

Met de volgende opdracht stopt u het IoT Edge-systeem (en dus alle containers), gebruikt u de optie 'all' en 'volume' om docker prune alle containers en volumes te verwijderen. Bekijk de waarschuwing dat de opdracht problemen ondervindt en bevestig bij y wanneer u klaar bent.

sudo iotedge system stop
docker system prune --all --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N]

Start het systeem opnieuw. Als u veilig wilt zijn, past u eventueel resterende configuratie toe en start u het systeem met één opdracht.

sudo iotedge config apply

Wacht een paar minuten en controleer het opnieuw.

sudo iotedge list

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.