IoT Edge デバイスのトラブルシューティングTroubleshoot your IoT Edge device

お使いの環境で Azure IoT Edge の実行中に問題が発生した場合は、この記事を参考にしてトラブルシューティングと診断を行ってください。If you experience issues running Azure IoT Edge in your environment, use this article as a guide for troubleshooting and diagnostics.

"check" コマンドを実行するRun the 'check' command

IoT Edge のトラブルシューティング時の最初のステップは、check コマンドを使用することです。このコマンドは、一般的な問題の構成の収集と接続テストを実行します。Your first step when troubleshooting IoT Edge should be to use the check command, which runs a collection of configuration and connectivity tests for common issues. check コマンドは、リリース 1.0.7 以降で使用できます。The check command is available in release 1.0.7 and later.

注意

トラブルシューティング ツールでは、IoT Edge デバイスがプロキシ サーバーの背後にある場合、接続チェックを実行できません。The troubleshooting tool can't run connectivity checks if the IoT Edge device is behind a proxy server.

check コマンドは次のように実行できます。または、--help フラグを追加してオプションの完全なリストを表示できます。You can run the check command as follows, or include the --help flag to see a complete list of options:

Linux の場合:On Linux:

sudo iotedge check

Windows の場合:On Windows:

iotedge check

トラブルシューティング ツールでは、次の 3 つのカテゴリに分類される多くのチェックが実行されます。The troubleshooting tool runs many checks that are sorted into these three categories:

  • "構成検査" では、config.yaml およびコンテナー エンジンの問題を含め、IoT Edge デバイスからクラウドへの接続を妨げる可能性のある問題の詳細を調べます。Configuration checks examines details that could prevent IoT Edge devices from connecting to the cloud, including issues with config.yaml and the container engine.
  • "接続検査" では、IoT Edge ランタイムがホスト デバイス上のポートにアクセス可能であること、およびすべての IoT Edge コンポーネントが IoT Hub にアクセス可能であることが確認されます。Connection checks verify that the IoT Edge runtime can access ports on the host device and that all the IoT Edge components can connect to the IoT Hub. IoT Edge デバイスがプロキシの背後にある場合、この一連の検査でてエラーが返されます。This set of checks returns errors if the IoT Edge device is behind a proxy.
  • "製品の準備完了検査" では、デバイス証明機関 (CA) の証明書の状態やモジュール ログ ファイルの構成など、推奨される運用上のベスト プラクティスが検査されます。Production readiness checks look for recommended production best practices, such as the state of device certificate authority (CA) certificates and module log file configuration.

エラーや警告が表示された場合の対処方法など、このツールが実行する各診断チェックの詳細については、IoT Edge のトラブルシューティング チェックに関するページを参照してください。For information about each of the diagnostic checks this tool runs, including what to do if you get an error or warning, see IoT Edge troubleshoot checks.

"support-bundle" コマンドを使用してデバッグ情報を収集するGather debug information with 'support-bundle' command

IoT Edge デバイスからログを収集する必要がある場合、最も便利な方法は support-bundle コマンドを使用することです。When you need to gather logs from an IoT Edge device, the most convenient way is to use the support-bundle command. このコマンドを使うと、既定では、モジュールと IoT Edge Security Manager とコンテナー エンジンのログ、iotedge check の JSON 出力、および他の有用なデバッグ情報が収集されます。By default, this command collects module, IoT Edge security manager and container engine logs, iotedge check JSON output, and other useful debug information. 共有しやすいように、それらが 1 つのファイルに圧縮されます。It compresses them into a single file for easy sharing. support-bundle コマンドは、リリース 1.0.9 以降で使用できます。The support-bundle command is available in release 1.0.9 and later.

ログを取得する過去の期間を指定するには、--since フラグを指定して support-bundle コマンドを実行します。Run the support-bundle command with the --since flag to specify how long from the past you want to get logs. たとえば、6h では過去 6 時間、6d では過去 6 日間、6m では過去 6 分間のログが取得されます。For example 6h will get logs since the last six hours, 6d since the last six days, 6m since the last six minutes and so on. オプションの完全な一覧を表示するには、--help フラグを含めます。Include the --help flag to see a complete list of options.

Linux の場合:On Linux:

sudo iotedge support-bundle --since 6h

Windows の場合:On Windows:

iotedge support-bundle --since 6h

警告

support-bundle コマンドからの出力には、ホスト、デバイス名とモジュール名、モジュールによってログに記録された情報などが含まれる場合があります。パブリック フォーラムで出力を共有する場合は、この点に注意してください。Output from the support-bundle command can contain host, device and module names, information logged by your modules etc. Please be aware of this if sharing the output in a public forum.

IoT Edge のバージョンを確認するCheck your IoT Edge version

古いバージョンの IoT Edge を実行している場合は、アップグレードすると問題が解決されることがあります。If you're running an older version of IoT Edge, then upgrading may resolve your issue. iotedge check ツールでは、IoT Edge セキュリティ デーモンが最新バージョンであることは確認されますが、IoT Edge ハブとエージェント モジュールのバージョンは確認されません。The iotedge check tool checks that the IoT Edge security daemon is the latest version, but does not check the versions of the IoT Edge hub and agent modules. デバイス上のランタイム モジュールのバージョンを確認するには、iotedge logs edgeAgentiotedge logs edgeHub のコマンドを使用します。To check the version of the runtime modules on your device, use the commands iotedge logs edgeAgent and iotedge logs edgeHub. バージョン番号は、モジュールの起動時にログで宣言されます。The version number is declared in the logs when the module starts up.

デバイスを更新する手順については、「IoT Edge セキュリティ デーモンおよびランタイムの更新」を参照してください。For instructions on how to update your device, see Update the IoT Edge security daemon and runtime.

IoT Edge Security Manager の状態とそのログを確認するCheck the status of the IoT Edge security manager and its logs

IoT Edge Security Manager は、デバイスの起動時およびプロビジョニングでの IoT Edge システムの初期化などの操作を担当します。The IoT Edge security manager is responsible for operations like initializing the IoT Edge system at startup and provisioning devices. IoT Edge が開始されていない場合、セキュリティ マネージャーのログに有用な情報が提供されることがあります。If IoT Edge isn't starting, the security manager logs may provide useful information.

Linux の場合:On Linux:

  • IoT Edge Security Manager の状態を確認します。View the status of the IoT Edge security manager:

    sudo systemctl status iotedge
    
  • IoT Edge Security Manager のログを確認します。View the logs of the IoT Edge security manager:

    sudo journalctl -u iotedge -f
    
  • IoT Edge Security Manager のログの詳細を確認します。View more detailed logs of the IoT Edge security manager:

    • IoT Edge デーモンの設定を編集します。Edit the IoT Edge daemon settings:

      sudo systemctl edit iotedge.service
      
    • 次の行を更新します。Update the following lines:

      [Service]
      Environment=IOTEDGE_LOG=edgelet=debug
      
    • IoT Edge セキュリティ デーモンを再起動します。Restart the IoT Edge Security Daemon:

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

Windows の場合:On Windows:

  • IoT Edge Security Manager の状態を確認します。View the status of the IoT Edge security manager:

    Get-Service iotedge
    
  • IoT Edge Security Manager のログを確認します。View the logs of the IoT Edge security manager:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
    
  • IoT Edge Security Manager のログの最後の 5 分だけを表示します。View only the last 5 minutes of the IoT Edge security manager logs:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog -StartTime ([datetime]::Now.AddMinutes(-5))
    
  • IoT Edge Security Manager のログの詳細を確認します。View more detailed logs of the IoT Edge security manager:

    • システムレベルの環境変数を追加します。Add a system-level environment variable:

      [Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "edgelet=debug", [EnvironmentVariableTarget]::Machine)
      
    • IoT Edge セキュリティ デーモンを再起動します。Restart the IoT Edge Security Daemon:

      Restart-Service iotedge
      

IoT Edge Security Manager が実行されていない場合は、yaml 構成ファイルを確認しますIf the IoT Edge security manager is not running, verify your yaml configuration file

警告

YAML ファイルには、インデントとしてタブを含めることはできません。YAML files cannot contain tabs as indentation. 代わりにスペース 2 つを使用してください。Use 2 spaces instead. 最上位の要素の先頭にはスペースを入れないでください。Top-level elements should have no leading spaces.

Linux の場合:On Linux:

sudo nano /etc/iotedge/config.yaml

Windows の場合:On Windows:

notepad C:\ProgramData\iotedge\config.yaml

IoT Edge Security Manager を再起動するRestart the IoT Edge security manager

問題がまだ解決しない場合は、IoT Edge Security Manager を再起動することができます。If issue is still persisting, you can try restarting the IoT Edge security manager.

Linux の場合:On Linux:

sudo systemctl restart iotedge

Windows の場合:On Windows:

Stop-Service iotedge -NoWait
sleep 5
Start-Service iotedge

コンテナーのログで問題を確認するCheck container logs for issues

IoT Edge セキュリティ デーモンが実行されている場合は、コンテナーのログを参照して問題を検出します。Once the IoT Edge security daemon is running, look at the logs of the containers to detect issues. デプロイされたコンテナーから開始して、IoT Edge ランタイムを形成しているコンテナーである edgeAgent および edgeHub を確認します。Start with your deployed containers, then look at the containers that make up the IoT Edge runtime: edgeAgent and edgeHub. 通常、IoT Edge エージェントのログでは、各コンテナーのライフサイクルについての情報が提供されます。The IoT Edge agent logs typically provide info on the lifecycle of each container. IoT Edge ハブのログでは、メッセージングとルーティングについての情報が提供されます。The IoT Edge hub logs provide info on messaging and routing.

iotedge logs <container name>

IoT Edge ハブを通過するメッセージを表示するView the messages going through the IoT Edge hub

IoT Edge ハブを通過するメッセージを表示し、ランタイム コンテナーから得た詳細なログから分析情報を収集できます。You can view the messages going through the IoT Edge hub, and gather insights from verbose logs from the runtime containers. これらのコンテナーで詳細ログを有効にするには、yaml 構成ファイルにRuntimeLogLevel を設定します。To turn on verbose logs on these containers, set RuntimeLogLevel in your yaml configuration file. ファイルを開くには:To open the file:

Linux の場合:On Linux:

sudo nano /etc/iotedge/config.yaml

Windows の場合:On Windows:

notepad C:\ProgramData\iotedge\config.yaml

既定では、agent 要素は次の例のようになります。By default, the agent element will look like the following example:

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

env: {} を以下で置き換えます。Replace env: {} with:

env:
  RuntimeLogLevel: debug

警告

YAML ファイルには、インデントとしてタブを含めることはできません。YAML files cannot contain tabs as identation. 代わりにスペース 2 つを使用してください。Use 2 spaces instead. 最上位の項目の先頭に空白を入れることはできません。Top-level items cannot have leading whitespace.

ファイルを保存し、IoT Edge Security Manager を再起動します。Save the file and restart the IoT Edge security manager.

IoT Hub デバイスと IoT Edge デバイスの間で送信されたメッセージを確認することもできます。You can also check the messages being sent between IoT Hub and the IoT Edge devices. Visual Studio Code 用の Azure IoT Hub 拡張機能を使用して、これらのメッセージを表示します。View these messages by using the Azure IoT Hub extension for Visual Studio Code. 詳細については、Azure IoT で開発するときの便利なツールに関するページを参照してください。For more information, see Handy tool when you develop with Azure IoT.

コンテナーを再起動するRestart containers

ログとメッセージの情報を調べた後は、コンテナーの再起動を試みることもできます。After investigating the logs and messages for information, you can try restarting containers:

iotedge restart <container name>

IoT Edge ランタイム コンテナーを再起動する:Restart the IoT Edge runtime containers:

iotedge restart edgeAgent && iotedge restart edgeHub

ファイアウォール規則とポート構成規則を確認するCheck your firewall and port configuration rules

Azure IoT Edge では、サポートされている IoT Hub プロトコルを使用した、オンプレミス サーバーから Azure クラウドへの通信が許可されています。「通信プロトコルの選択」をご覧ください。Azure IoT Edge allows communication from an on-premises server to Azure cloud using supported IoT Hub protocols, see choosing a communication protocol. セキュリティ強化のため、Azure IoT Edge と Azure IoT Hub の間の通信チャネルは常にアウトバウンドに構成されます。For enhanced security, communication channels between Azure IoT Edge and Azure IoT Hub are always configured to be Outbound. この構成は、サービス支援通信方式に基づいていて、悪意のあるエンティティが探る攻撃対象の領域が最小限になります。This configuration is based on the Services Assisted Communication pattern, which minimizes the attack surface for a malicious entity to explore. インバウンド通信が必要なのは、Azure IoT Hub がメッセージを Azure IoT Edge デバイスにプッシュする必要がある特定のシナリオのみです。Inbound communication is only required for specific scenarios where Azure IoT Hub needs to push messages to the Azure IoT Edge device. cloud-to-device メッセージは、セキュリティで保護された TLS チャネルを使用して保護されます。また、X.509 証明書と TPM デバイス モジュールを使用してさらに保護することができます。Cloud-to-device messages are protected using secure TLS channels and can be further secured using X.509 certificates and TPM device modules. この通信の確立方法は、Azure IoT Edge セキュリティ マネージャーによって管理されます。IoT Edge セキュリティ マネージャーに関するページを参照してください。The Azure IoT Edge Security Manager governs how this communication can be established, see IoT Edge Security Manager.

IoT Edge は、Azure IoT Edge ランタイムとデプロイされたモジュールをセキュリティで保護するための強化された構成を提供しますが、依然として基になるマシンとネットワークの構成に依存しています。While IoT Edge provides enhanced configuration for securing Azure IoT Edge runtime and deployed modules, it is still dependent on the underlying machine and network configuration. そのため、エッジからクラウドへの安全な通信を実現するための適切なネットワーク規則およびファイアウォール規則が設定されていることを確認することが不可欠です。Hence, it is imperative to ensure proper network and firewall rules are set up for secure edge to cloud communication. Azure IoT Edge ランタイムがホストされている、基になるサーバー用にファイアウォール規則を構成するときには、以下の表をガイドラインとして使用できます。The following table can be used as a guideline when configuration firewall rules for the underlying servers where Azure IoT Edge runtime is hosted:

ProtocolProtocol PortPort 受信Incoming 送信Outgoing ガイダンスGuidance
MQTTMQTT 88838883 ブロック (既定値)BLOCKED (Default) ブロック (既定値)BLOCKED (Default)
  • 通信プロトコルとして MQTT を使用する場合は、送信 (アウトバウンド) をオープンになるように構成します。Configure Outgoing (Outbound) to be Open when using MQTT as the communication protocol.
  • MQTT での 1883 は、IoT Edge ではサポートされていません。1883 for MQTT is not supported by IoT Edge.
  • 受信 (インバウンド) 接続はブロックする必要があります。Incoming (Inbound) connections should be blocked.
AMQPAMQP 56715671 ブロック (既定値)BLOCKED (Default) オープン (既定値)OPEN (Default)
  • IoT Edge の既定の通信プロトコル。Default communication protocol for IoT Edge.
  • Azure IoT Edge が他のサポートされているプロトコル用に構成されていない場合、または AMQP が望ましい通信プロトコルである場合は、オープンになるように構成する必要があります。Must be configured to be Open if Azure IoT Edge is not configured for other supported protocols or AMQP is the desired communication protocol.
  • AMQP での 5672 は、IoT Edge ではサポートされていません。5672 for AMQP is not supported by IoT Edge.
  • Azure IoT Edge が、IoT Hub でサポートされているのとは異なるプロトコルを使用する場合は、このポートをブロックします。Block this port when Azure IoT Edge uses a different IoT Hub supported protocol.
  • 受信 (インバウンド) 接続はブロックする必要があります。Incoming (Inbound) connections should be blocked.
HTTPSHTTPS 443443 ブロック (既定値)BLOCKED (Default) オープン (既定値)OPEN (Default)
  • IoT Edge のプロビジョニングのために、送信 (アウトバウンド) を 443 でオープンにするように構成します。Configure Outgoing (Outbound) to be Open on 443 for IoT Edge provisioning. この構成は、手動スクリプトや Azure IoT Device Provisioning Service (DPS) を使用する場合に必要です。This configuration is required when using manual scripts or Azure IoT Device Provisioning Service (DPS).
  • 受信 (インバウンド) 接続が以下の特定のシナリオだけでオープンになるようにする必要があります。Incoming (Inbound) connection should be Open only for specific scenarios:
    • メソッド要求を送信することがあるリーフ デバイスを備えた透過的なゲートウェイがある場合。If you have a transparent gateway with leaf devices that may send method requests. この場合、ポート 443 は、IoT Hub に接続したり Azure IoT Edge を通じて IoT Hub サービスを提供したりするために外部ネットワークに対してオープンにする必要はありません。In this case, Port 443 does not need to be open to external networks to connect to IoTHub or provide IoTHub services through Azure IoT Edge. そのため、受信規則は内部ネットワークからのオープンな受信 (インバウンド) だけに制限することができます。Thus the incoming rule could be restricted to only open Incoming (Inbound) from the internal network.
    • Client to Device (C2D) シナリオの場合。For Client to Device (C2D) scenarios.
  • HTTP での 80 は、IoT Edge ではサポートされていません。80 for HTTP is not supported by IoT Edge.
  • 企業内で非 HTTP プロトコル (AMQP や MQTT など) を構成できない場合は、メッセージを WebSockets 経由で送信できます。If non-HTTP protocols (for example, AMQP or MQTT) cannot be configured in the enterprise; the messages can be sent over WebSockets. その場合、ポート 443 は WebSocket 通信のために使用されます。Port 443 will be used for WebSocket communication in that case.

次のステップNext steps

IoT Edge プラットフォームのバグを発見したと思われる場合は、Do you think that you found a bug in the IoT Edge platform? 改善を続けられるように問題を報告してください。Submit an issue so that we can continue to improve.

その他に質問がある場合は、サポート リクエストを作成して対応を要請してください。If you have more questions, create a Support request for help.