Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
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 iotedgeAnzeigen der Protokolle des IoT Edge-Sicherheits-Managers:
sudo journalctl -u iotedge -fDetailliertere Protokolle des IoT Edge-Sicherheits-Managers anzeigen:
Bearbeiten Sie die IoT Edge-Daemoneinstellungen:
sudo systemctl edit iotedge.serviceAktualisieren Sie die folgenden Zeilen:
[Service] Environment=IOTEDGE_LOG=debugStarten 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 iotedgeAnzeigen der Protokolle des IoT Edge-Sicherheits-Managers:
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLogZeigen 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:
Hinzufügen einer Umgebungsvariable auf Systemebene:
[Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "debug", [EnvironmentVariableTarget]::Machine)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:
Führen Sie auf dem IoT Edge-Gerät den folgenden Befehl zum Anzeigen von Protokollen aus:
iotedge logs <container name>Verwenden Sie im Azure-Portal das integrierte Problembehandlungstool. Überwachen und Beheben von IoT Edge-Geräten über das Azure-Portal
Verwenden Sie die direkte UploadModuleLogs-Methode , um die Protokolle eines Moduls in Azure Blob Storage hochzuladen.
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) |
|
| AMQP | 5671 | BLOCKIERT (Standard) | OFFEN (Standard) |
|
| HTTPS | 443 | BLOCKIERT (Standard) | OFFEN (Standard) |
|
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.