Teilen über


Probleme mit Ihrem IoT Edge-Gerät beheben

Gilt für:yes icon IoT Edge 1.1

Wichtig

Das Ende des Supports für IoT Edge 1.1 war der 13. Dezember 2022. Überprüfen Sie den Microsoft Product Lifecycle , um Informationen darüber zu erhalten, wie dieses Produkt, dieser Dienst, die Technologie oder die API unterstützt wird. Weitere Informationen zum Aktualisieren auf die neueste Version von IoT Edge finden Sie unter Update IoT Edge.

Wenn in Ihrer Umgebung Probleme bei der Ausführung von Azure IoT Edge auftreten, nutzen Sie diesen Artikel als Leitfaden zur Problembehandlung und Diagnose.

Führen Sie den Befehl ‚check‘ aus

Ihr erster Schritt im Rahmen der Problembehandlung bei IoT Edge sollte die Verwendung des Befehls check sein, mit dem eine Reihe von Konfigurations- und Konnektivitätstests zur Behandlung allgemeiner Probleme durchgeführt wird. Der check Befehl ist in Version 1.0.7 und höher verfügbar.

Hinweis

Das Problembehandlungstool kann keine Konnektivitätsprüfungen durchführen, wenn sich das IoT Edge-Gerät hinter einem Proxyserver befindet.

Sie können den Befehl check wie folgt ausführen oder das Flag --help einbinden, um alle Optionen anzuzeigen:

Unter Linux:

sudo iotedge check

Unter Windows:

iotedge check

Das Problembehandlungstool führt viele Überprüfungen durch, die in folgende drei Kategorien eingeteilt werden:

  • Konfigurationsprüfungen untersuchen Details, die verhindern könnten, dass IoT Edge-Geräte eine Verbindung mit der Cloud herstellen, einschließlich Problemen mit der Konfigurationsdatei und dem Containermodul.
  • Verbindungsprüfungen stellen sicher, dass die IoT Edge-Laufzeit auf Ports auf dem Hostgerät zugreifen kann und dass alle IoT Edge-Komponenten eine Verbindung mit dem IoT Hub herstellen können. Diese Gruppe von Überprüfungen gibt Fehler zurück, wenn sich das IoT Edge-Gerät hinter einem Proxy befindet.
  • Produktionsbereitschaftsprüfungen suchen nach empfohlenen bewährten Methoden für die Produktion, z. B. nach dem Status von Zertifizierungsstellenzertifikaten (Device Certificate Authority, CA) und Modulprotokolldateikonfiguration.

Das Prüftool für IoT Edge verwendet einen Container, um die Diagnosen durchzuführen. Das Containerimage ist mcr.microsoft.com/azureiotedge-diagnostics:latestüber die Microsoft-Containerregistrierung verfügbar. Wenn Sie eine Überprüfung auf einem Gerät ohne Direktzugriff auf das Internet ausführen möchten, benötigen die Geräte Zugriff auf das Containerimage.

Informationen zu den einzelnen Diagnoseüberprüfungen, die dieses Tool ausführt, einschließlich der Schritte, die Sie tun müssen, wenn sie einen Fehler oder eine Warnung erhalten, finden Sie unter IoT Edge Problembehandlungsprüfungen.

Sammeln von Debuginformationen mit dem Befehl „support-bundle“

Wenn Sie Protokolle von einem IoT Edge-Gerät sammeln müssen, verwenden Sie dazu am einfachsten den Befehl support-bundle. Dieser Befehl sammelt standardmäßig Protokolle von Modulen, IoT Edge Security Manager und Container-Engine, die JSON-Ausgabe iotedge check und weitere nützliche Debuginformationen. Er komprimiert sie zum einfachen Teilen in eine einzige Datei. Der support-bundle Befehl ist in Version 1.0.9 und höher verfügbar.

Führen Sie den Befehl support-bundle mit dem Flag --since aus, um anzugeben, für welchen Zeitraum aus der Vergangenheit Sie Protokolle abrufen möchten. Beispielsweise erhalten 6h Protokolle seit den letzten sechs Stunden, 6d seit den letzten sechs Tagen, 6m seit den letzten sechs Minuten usw. Beziehen Sie das Flag --help mit ein, damit eine vollständige Liste der Optionen angezeigt wird.

Unter Linux:

sudo iotedge support-bundle --since 6h

Unter Windows:

iotedge support-bundle --since 6h

Standardmäßig erstellt der support-bundle Befehl eine ZIP-Datei namenssupport_bundle.zip im Verzeichnis, in dem der Befehl aufgerufen wird. Wenn Sie einen anderen Pfad oder Dateinamen für die Ausgabe angeben möchten, verwenden Sie das Flag --output.

Weitere Informationen zum Befehl finden Sie in den Hilfeinformationen.

iotedge support-bundle --help

Sie können auch den integrierten direkten Methodenaufruf "UploadSupportBundle " verwenden, um die Ausgabe des Support-Bundle-Befehls in Azure Blob Storage hochzuladen.

Warnung

Die Ausgabe des Befehls support-bundle kann Host-, Geräte- und Modulnamen, von ihren Modulen protokollierte Informationen usw. enthalten. Beachten Sie dies bitte, wenn Sie die Ausgabe in einem öffentlichen Forum freigeben.

Überprüfen der von der Runtime gesammelten Metriken

Die IoT Edge-Runtimemodule erzeugen Metriken, mit deren Hilfe Sie die Integrität Ihrer IoT Edge-Geräte überwachen und verstehen können. Fügen Sie das Metriksammlermodul zu Ihren Bereitstellungen hinzu, um diese Metriken zu sammeln und sie zur einfacheren Überwachung an die Cloud zu senden.

Weitere Informationen finden Sie unter Sammeln und Transportmetriken.

Überprüfen Sie Ihre IoT Edge-Version

Wenn Sie eine ältere Version von IoT Edge ausführen, löst ein Upgrade möglicherweise Ihr Problem. Das iotedge check Tool überprüft, ob der IoT Edge-Sicherheitsdaemon die neueste Version ist, überprüft jedoch nicht die Versionen der IoT Edge-Hub- und Agentmodule. Wenn Sie die Version der Runtimemodule auf Ihrem Gerät überprüfen möchten, verwenden Sie die Befehle iotedge logs edgeAgent und iotedge logs edgeHub. Die Versionsnummer wird in den Protokollen beim Starten des Moduls deklariert.

Anweisungen zum Aktualisieren Ihres Geräts finden Sie unter Aktualisieren des IoT Edge-Sicherheitsdaemons und der Laufzeit.

Überprüfen der Installation von IoT Edge auf Ihren Geräten

Sie können die Installation von IoT Edge auf Ihren Geräten überprüfen, indem Sie das EdgeAgent-Modul Twin überwachen.

Um das neueste EdgeAgent-Modul twin zu erhalten, führen Sie den folgenden Befehl aus Azure Cloud Shell aus:

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

Dieser Befehl gibt alle gemeldeten EdgeAgent-Eigenschaften aus. Hier sind einige hilfreiche Werkzeuge, um den Status des Geräts zu überwachen:

  • Laufzeitstatus
  • Laufzeitbeginn
  • Laufzeit letzte Ausstiegszeit
  • Laufzeit-Neustart-Anzahl

Überprüfen Sie den Status des IoT Edge-Sicherheits-Managers und seiner Protokolle

Der IoT Edge-Sicherheits-Manager ist für Vorgänge wie das Initialisieren des IoT Edge-Systems beim Start- und Bereitstellungsgerät verantwortlich. Wenn IoT Edge nicht gestartet wird, können die Security Manager-Protokolle nützliche Informationen enthalten.

Unter Linux:

  • Anzeigen des Status des IoT Edge-Sicherheits-Managers:

    sudo systemctl status iotedge
    
  • Anzeigen der Protokolle des IoT Edge-Sicherheits-Managers:

    sudo journalctl -u iotedge -f
    
  • Detailliertere Protokolle des IoT Edge-Sicherheits-Managers anzeigen:

    1. Bearbeiten Sie die IoT Edge-Daemoneinstellungen:

      sudo systemctl edit iotedge.service
      
    2. Aktualisieren Sie die folgenden Zeilen:

      [Service]
      Environment=IOTEDGE_LOG=debug
      
    3. Starten Sie den IoT Edge-Sicherheitsdaemon neu:

      sudo systemctl cat iotedge.service
      sudo systemctl daemon-reload
      sudo systemctl restart iotedge
      

Unter Windows:

  • Anzeigen des Status des IoT Edge-Sicherheits-Managers:

    Get-Service iotedge
    
  • Anzeigen der Protokolle des IoT Edge-Sicherheits-Managers:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
    
  • Zeigen Sie nur die letzten 5 Minuten der IoT Edge-Sicherheits-Manager-Protokolle an:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog -StartTime ([datetime]::Now.AddMinutes(-5))
    
  • Detailliertere Protokolle des IoT Edge-Sicherheits-Managers anzeigen:

    1. Hinzufügen einer Umgebungsvariable auf Systemebene:

      [Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "debug", [EnvironmentVariableTarget]::Machine)
      
    2. Starten Sie den IoT Edge-Sicherheitsdaemon neu:

      Restart-Service iotedge
      

Überprüfen Sie die Containerprotokolle auf Probleme

Sobald der IoT Edge-Sicherheits-Daemon ausgeführt wird, sehen Sie sich die Protokolle der Container an, um Probleme zu erkennen. Beginnen Sie mit den bereitgestellten Containern, und sehen Sie sich dann die Container der IoT Edge-Runtime an: „edgeAgent“ und „edgeHub“. Die IoT Edge-Agent-Protokolle bieten in der Regel Informationen zum Lebenszyklus der einzelnen Container. Die IoT Edge-Hub-Protokolle bieten Informationen zu Messaging und Routing.

Sie können die Containerprotokolle von mehreren Stellen abrufen:

Bereinigen von Containerprotokollen

Standardmäßig legt die Moby-Containerengine keine Grenzwerte für die Größe des Containerprotokolls fest. Im Laufe der Zeit kann dies dazu führen, dass das Gerät mit Protokollen überfüllt wird und nicht genügend Speicherplatz auf dem Datenträger zur Verfügung steht. Wenn sich große Containerprotokolle auf die Leistung Ihres IoT Edge-Geräts auswirken, können Sie mit dem folgenden Befehl das Entfernen des Containers zusammen mit den zugehörigen Protokollen erzwingen.

Wenn Sie noch mit der Fehlerbehebung beschäftigt sind, warten Sie, bis Sie die Container-Logs überprüft haben, bevor Sie diesen Schritt machen.

Warnung

Wenn Sie erzwingen, dass der EdgeHub-Container entfernt wird, während er über einen nicht zugestellten Nachrichtenbacklog verfügt und kein Hostspeicher eingerichtet ist, gehen die nicht zugestellten Nachrichten verloren.

docker rm --force <container name>

Richten Sie den Standardprotokollierungstreiber für laufende Protokollwartungs- und Produktionsszenarien ein.

Zeigen Sie die Nachrichten an, die den IoT Edge-Hub durchlaufen

Sie können die Nachrichten anzeigen, die über den IoT Edge-Hub gehen, und Einblicke aus ausführlichen Protokollen aus den Laufzeitcontainern sammeln. Um ausführliche Protokolle für diese Container zu aktivieren, legen Sie RuntimeLogLevel in Ihrer Yaml-Konfigurationsdatei fest. So öffnen Sie die Datei:

Unter Linux:

sudo nano /etc/iotedge/config.yaml

Unter Windows:

notepad C:\ProgramData\iotedge\config.yaml

Standardmäßig sieht das agent-Element wie im folgenden Beispiel aus:

agent:
  name: edgeAgent
  type: docker
  env: {}
  config:
    image: mcr.microsoft.com/azureiotedge-agent:1.1
    auth: {}

Ersetzen Sie env: {} durch:

env:
  RuntimeLogLevel: debug

Warnung

YAML-Dateien dürfen keine Tabs als Einrückung enthalten. Verwenden Sie stattdessen zwei Leerzeichen. Elemente auf oberster Ebene können keine führenden Leerzeichen aufweisen.

Speichern Sie die Datei, und starten Sie den IoT Edge-Sicherheits-Manager neu.

Sie können auch die Nachrichten überprüfen, die zwischen IoT Hub und den IoT-Geräten gesendet werden. Zeigen Sie diese Nachrichten mithilfe der Azure IoT Hub-Erweiterung für Visual Studio Code an. Weitere Informationen finden Sie unter "Praktisches Tool", wenn Sie mit Azure IoT entwickeln.

Führen Sie einen Neustart der Container aus

Nachdem Sie die Protokolle und Nachrichten auf Informationen untersucht haben, können Sie einen Neustart der Container versuchen.

Verwenden Sie auf dem IoT Edge-Gerät die folgenden Befehle zum Neustart von Modulen:

iotedge restart <container name>

Starten Sie die IoT Edge-Runtime-Container neu:

iotedge restart edgeAgent && iotedge restart edgeHub

Sie können Module auch remote über das Azure-Portal neu starten. Weitere Informationen finden Sie unter Überwachen und Behandeln von Problemen mit IoT Edge-Geräten über das Azure-Portal.

Überprüfen Sie Ihre Konfigurationsregeln für Firewall und Ports

Azure IoT Edge ermöglicht die Kommunikation von einem lokalen Server in die Azure-Cloud mithilfe unterstützter IoT Hub-Protokolle, siehe Auswählen eines Kommunikationsprotokolls. Aus Sicherheitsgründen sind Kommunikationskanäle zwischen Azure IoT Edge und Azure IoT Hub immer als „Ausgehend“ konfiguriert. Diese Konfiguration basiert auf dem Dienstunterstützten Kommunikationsmuster, das die Angriffsfläche für eine schädliche Entität minimiert. Eingehende Kommunikation ist nur für bestimmte Szenarien erforderlich, in denen Azure IoT Hub Nachrichten an das Azure IoT Edge-Gerät pushen muss. Cloud-zu-Gerät-Nachrichten werden mithilfe von sicheren TLS-Kanälen geschützt und können mithilfe von X. 509-Zertifikaten und TPM-Gerätemodulen weiter gesichert werden. Der Azure IoT Edge Security Manager steuert, wie diese Kommunikation hergestellt werden kann, siehe IoT Edge Security Manager.

Während IoT Edge eine erweiterte Konfiguration zum Sichern der Azure IoT Edge-Laufzeit und der bereitgestellten Module bereitstellt, hängt es weiterhin von dem zugrunde liegenden Computer und der Netzwerkkonfiguration ab. Daher ist es zwingend erforderlich, sicherzustellen, dass geeignete Netzwerk- und Firewallregeln für die sichere Edge-zu-Cloud-Kommunikation eingerichtet werden. Beim Konfigurieren von Firewallregeln für die zugrunde liegenden Server, auf denen die Azure IoT Edge-Runtime gehostet wird, können Sie sich an folgender Tabelle orientieren:

Protokoll Hafen Eingehend Ausgehend Beratung
MQTT 8883 BLOCKIERT (Standard) BLOCKIERT (Standard)
  • Konfigurieren Sie ausgehende Verbindungen als Offen, wenn Sie MQTT als Kommunikationsprotokoll verwenden.
  • 1883 für MQTT wird von IoT Edge nicht unterstützt.
  • Eingehende Verbindungen sollten blockiert werden.
AMQP 5671 BLOCKIERT (Standard) OFFEN (Standard)
  • Standardkommunikationsprotokoll für IoT Edge.
  • Muss so konfiguriert sein, dass er offen ist, wenn Azure IoT Edge nicht für andere unterstützte Protokolle konfiguriert ist oder AMQP das gewünschte Kommunikationsprotokoll ist.
  • 5672 für AMQP wird von IoT Edge nicht unterstützt.
  • Blockieren Sie diesen Port, wenn Azure IoT Edge ein anderes von IoT Hub unterstütztes Protokoll verwendet.
  • Eingehende Verbindungen sollten blockiert werden.
HTTPS 443 BLOCKIERT (Standard) OFFEN (Standard)
  • Konfigurieren Sie Port 443 als offen für ausgehende Verbindungen bei der IoT Edge-Bereitstellung. Diese Konfiguration ist bei Verwendung manueller Skripts oder des Azure IoT Device Provisioning-Diensts (Device Provisioning Service, DPS) erforderlich.
  • Eingehende Verbindung sollte nur für bestimmte Szenarien geöffnet sein:
    • Wenn Sie ein transparentes Gateway mit nachgeschalteten Geräten haben, die möglicherweise Methodenanforderungen senden. In diesem Fall muss Port 443 nicht für externe Netzwerke geöffnet sein, um eine Verbindung mit IoTHub herzustellen oder IoTHub-Dienste über Azure IoT Edge bereitzustellen. Die Eingangsregel könnte somit darauf eingeschränkt werden, nur eingehende (Inbound) Kommunikation aus dem internen Netzwerk zuzulassen.
    • Für Client-zu-Gerät (C2D) Szenarien.
  • 80 für HTTP wird von IoT Edge nicht unterstützt.
  • Wenn nicht-HTTP-Protokolle (z. B. AMQP oder MQTT) nicht im Unternehmen konfiguriert werden können; die Nachrichten können über WebSockets gesendet werden. Port 443 wird in diesem Fall für die WebSocket-Kommunikation verwendet.

Letzte Möglichkeit: Beenden und erneutes Erstellen aller Container

Manchmal erfordert ein System möglicherweise erhebliche besondere Änderungen, um mit bestehenden Netzwerk- oder Betriebssystemeinschränkungen arbeiten zu können. Beispielsweise könnte ein System eine andere Datenträgereinbindung und Proxyeinstellungen erfordern. Wenn Sie alle oben beschriebenen Schritte ausprobiert haben und weiterhin Containerfehler erhalten, ist es möglich, dass irgendwo im Docker-System zwischengespeicherte oder beibehaltene Netzwerkeinstellungen nicht auf dem neuesten Stand der Neukonfiguration sind. In diesem Fall besteht Ihre letzte Option darin, mithilfe von docker prune einen sauberen Start von Grund auf durchzuführen.

Der folgende Befehl stoppt das IoT Edge-System (und somit alle Container) und verwendet die Optionen "all" und "volume" für docker prune, um alle Container und Volumes zu entfernen. Überprüfen Sie die vom Befehl ausgegebene Warnung und bestätigen Sie mit y, wenn Sie bereit sind.

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]

Starten Sie das System erneut. Wenden Sie sicherheitshalber jede beliebige möglicherweise verbleibende Konfiguration an, und starten Sie das System mit einem einzigen Befehl.

sudo iotedge config apply

Warten Sie ein paar Minuten, und überprüfen Sie es erneut.

sudo iotedge list

Nächste Schritte

Sind Sie der Meinung, dass Sie in der IoT Edge-Plattform einen Fehler gefunden haben? Übermitteln Sie ein Problem , damit wir weiter verbessern können.

Wenn Sie weitere Fragen haben, erstellen Sie eine Supportanfrage für Hilfe.