次の方法で共有


モジュール ツインの監視

適用対象:IoT Edge 1.5 のチェックマーク IoT Edge 1.5

重要

IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

Azure IoT Hub のモジュール ツインを使用すると、IoT Edge デプロイの接続性と正常性を監視できます。 モジュール ツインは、実行中のモジュールのパフォーマンスに関する情報を IoT ハブに格納します。 IoT Edge エージェントIoT Edge ハブ ランタイム モジュールは、それぞれ独自のモジュール ツイン ($edgeAgent$edgeHub) を維持します。

  • $edgeAgent には、IoT Edge エージェント、IoT Edge ハブ ランタイム モジュール、およびカスタム モジュールに関する正常性と接続データがあります。 IoT Edge エージェントは、モジュールをデプロイして監視し、接続状態を Azure IoT ハブに報告します。
  • $edgeHub には、デバイスで実行されている IoT Edge ハブと Azure IoT Hub の間の通信に関するデータがあります。 これには、ダウンストリーム デバイスからの受信メッセージの処理が含まれます。 IoT Edge ハブは、Azure IoT Hub と IoT Edge デバイスとモジュール間の通信を処理します。

データは、モジュール ツインの JSON 構造でメタデータ、タグ、および必要なプロパティ セットと報告されるプロパティ セットに編成されます。 deployment.json ファイルで指定する必要なプロパティがモジュール ツインにコピーされます。 IoT Edge エージェントと IoT Edge ハブではそれぞれ、モジュールに対する報告されたプロパティが更新されます。

同様に、deployment.json ファイル内のカスタム モジュールに指定する必要なプロパティは、そのモジュール ツインにコピーされますが、ソリューションによって報告されるプロパティ値が提供されます。

この記事では、Azure portal、Azure CLI、Visual Studio Code でモジュール ツインを確認する方法について説明します。 デバイスによるデプロイの受信状況を監視する方法については、「IoT Edge デプロイの監視」を参照してください。 モジュール ツインの概要については、 IoT Hub でのモジュール ツインの理解と使用に関するページを参照してください。

ヒント

IoT Edge デバイスが IoT ハブから切断されると、ランタイム モジュールの報告されるプロパティが古くなる可能性があります。 モジュールに $edgeAgent を実行して、接続が失われたかどうかを確認します。

ランタイム モジュール ツインを監視する

デプロイの接続の問題をトラブルシューティングするには、IoT Edge エージェントと IoT Edge ハブのランタイム モジュール ツインを確認してから、その他のモジュールにドリルダウンします。

IoT Edge エージェントのモジュール ツインを監視する

この JSON では、ほとんどのセクションが折りたたまれている Visual Studio Code の $edgeAgent モジュール ツインを示しています。

{
  "deviceId": "Windows109",
  "moduleId": "$edgeAgent",
  "etag": "AAAAAAAAAAU=",
  "deviceEtag": "NzgwNjA1MDUz",
  "status": "enabled",
  "statusUpdateTime": "0001-01-01T00:00:00Z",
  "connectionState": "Disconnected",
  "lastActivityTime": "0001-01-01T00:00:00Z",
  "cloudToDeviceMessageCount": 0,
  "authenticationType": "sas",
  "x509Thumbprint": {
    "primaryThumbprint": null,
    "secondaryThumbprint": null
  },
  "version": 53,
  "properties": {
    "desired": { "···" },
    "reported": {
      "schemaVersion": "1.0",
      "version": { "···" },
      "lastDesiredStatus": { "···" },
      "runtime": { "···" },
      "systemModules": {
        "edgeAgent": { "···" },
        "edgeHub": { "···" }
      },
      "lastDesiredVersion": 5,
      "modules": {
        "SimulatedTemperatureSensor": { "···" }
      },
      "$metadata": { "···" },
      "$version": 48
    }
  }
}

この JSON には、次のセクションがあります。

  • メタデータ - 接続データがあります。 IoT Edge エージェントの接続状態は、デバイスからクラウド (D2C) メッセージに適用され、IoT Edge エージェントが D2C メッセージを送信しないため、常に "Disconnected" されます。
  • プロパティ - desired サブセクションと reported サブセクションがあります。
  • Properties.desired - (折りたたまれて表示される) deployment.jsonファイルで設定される期待されるプロパティ値。
  • Properties.reported - IoT Edge エージェントによって報告された最新のプロパティ値。

properties.desiredセクションとproperties.reported セクションの構造は似ていますが、スキーマ、バージョン、ランタイム情報のメタデータも含まれています。 また、modulesなどのカスタム モジュールのSimulatedTemperatureSensor セクションと、systemModulesおよび$edgeAgentランタイム モジュール用の$edgeHub セクションもあります。

報告されたプロパティ値を目的の値と比較して不一致を見つけ、問題のトラブルシューティングに役立つ切断を特定します。 値を比較するときは、調査中のプロパティの$lastUpdatedセクションで、metadata報告された値を確認します。

トラブルシューティングを行うときは、次のプロパティを確認してください。

  • exitcode - ゼロ以外の値は、障害が発生してモジュールが停止したことを意味します。 エラー コード 137 または 143 は、モジュールが意図的に停止状態に設定されている場合に使用されます。

  • lastStartTimeUtc - コンテナーが最後に開始されたときの DateTime を表示します。 コンテナーが開始されていない場合、この値は 0001-01-01T00:00:00Z です。

  • lastExitTimeUtc - コンテナーが最後に完了したときの DateTime を表示します。 コンテナーが実行中で、停止されなかった場合、この値は 0001-01-01T00:00:00Z になります。

  • runtimeStatus - 次のいずれかの値があります。

    説明
    不明 デプロイが作成されるまでの既定の状態。
    バックオフ モジュールは開始するようにスケジュールされていますが、実行されていません。 この値は、再起動するモジュールに役立ちます。 障害が発生したモジュールがクールオフ期間中に再起動を待機している場合、モジュールはバックオフ状態になります。
    実行中 モジュールが実行されています。
    不健康 正常性プローブ チェックがエラーまたはタイムアウトになりました。
    停止 モジュールが正常に終了しました (終了コードが 0)。
    失敗 モジュールは、エラー終了コード (ゼロ以外) で終了しました。 モジュールは、再起動ポリシーに応じて、この状態からバックオフに戻ることができます。 この状態は、モジュールに回復不可能なエラーがあることを意味します。 エラーは、Microsoft Monitoring Agent (MMA) がモジュールを再起動できないときに発生し、新しいデプロイが必要になります。

詳細については、 EdgeAgent の報告されるプロパティに関するページを参照してください。

IoT Edge ハブのモジュール ツインを監視する

次の JSON に、ほとんどのセクションが折りたたまれている、Visual Studio Code の $edgeHub モジュール ツインを示します。

{
  "deviceId": "Windows109",
  "moduleId": "$edgeHub",
  "etag": "AAAAAAAAAAU=",
  "deviceEtag": "NzgwNjA1MDU2",
  "status": "enabled",
  "statusUpdateTime": "0001-01-01T00:00:00Z",
  "connectionState": "Connected",
  "lastActivityTime": "0001-01-01T00:00:00Z",
  "cloudToDeviceMessageCount": 0,
  "authenticationType": "sas",
  "x509Thumbprint": {
    "primaryThumbprint": null,
    "secondaryThumbprint": null
  },
  "version": 102,
    "properties": {
      "desired": { "···" },
      "reported": {
        "schemaVersion": "1.0",
        "version": { "···" },
      "lastDesiredVersion": 5,
      "lastDesiredStatus": { "···" },
      "clients": {
        "Windows109/SimulatedTemperatureSensor": {
          "status": "Disconnected",
          "lastConnectedTimeUtc": "2020-04-08T21:42:42.1743956Z",
          "lastDisconnectedTimeUtc": "2020-04-09T07:02:42.1398325Z"
        }
      },
      "$metadata": { "···" },
      "$version": 97
    }
  }
}

JSON は上から順に、次のセクションで表すことができます。

  • Metadata - 接続データが含まれます。

  • Properties - desired および reported サブセクションが含まれます。

  • Properties.desired - (折りたたまれて表示されています) deployment.json ファイル内に、演算子で設定されたプロパティ値が必要です。

  • Properties.reported - IoT Edge ハブによって報告された最新のプロパティ値。

ダウンストリーム デバイスで問題が発生している場合は、まずこのデータを確認します。

カスタム モジュール ツインを監視する

IoT Edge エージェント モジュール ツインは、カスタム モジュールの接続に関する情報を保持します。 カスタム モジュールのモジュール ツインには、主にソリューションのデータが格納されます。 deployment.json ファイルで定義する必要なプロパティはモジュール ツインに表示され、モジュールは必要に応じて報告されるプロパティ値を更新できます。

Azure IoT Hub Device SDK で好みのプログラミング言語を使用して、モジュールのアプリケーション コードに基づいてモジュール ツインの報告されたプロパティ値を更新します。 次の手順では、Azure SDK for .NET と SimulatedTemperatureSensor モジュールのコードを使用します。

  1. CreateFromEnvironmentAsync メソッドを使用して ModuleClient のインスタンスを作成します。

  2. GetTwinAsync メソッドを使用して、モジュール ツインのプロパティを取得します。

  3. SetDesiredPropertyUpdateCallbackAsync メソッドを使用して、必要なプロパティへの変更をキャッチするコールバックを含むリスナーを作成します。

  4. コールバック メソッドで、 UpdateReportedPropertiesAsync メソッドを使用してモジュール ツインの報告されたプロパティを更新し、設定するプロパティ値の TwinCollection を渡します。

モジュール ツインにアクセスする

Azure IoT Hub、Visual Studio Code、または Azure CLI のモジュール ツインの JSON を確認します。

Azure IoT Hub 上で監視する

モジュール ツインの JSON を表示します。

  1. Azure Portal にサインインし、IoT Hub に移動します。

  2. [デバイス管理] メニューで、[デバイス] を選択します。

  3. 監視する対象のモジュールを含む IoT Edge デバイスの [デバイス ID] を選択します。

  4. [モジュール] タブからモジュール名を選択して、上部のメニュー バーから [モジュール ID ツイン] を選択します。

    Azure portal で表示するモジュール ツインの選択方法を示すスクリーンショット。

"このモジュールのモジュール ID が存在しません" というメッセージが表示された場合、このエラーは、ID を最初に作成したバックエンド ソリューションが使用できないことを意味します。

Visual Studio Code 上でモジュール ツインを監視する

モジュール ツインをレビューして編集します。

  1. Azure IoT Edge 拡張機能と Azure IoT Hub 拡張機能がまだインストールされていない場合は、インストールします。 "Visual Studio Code 用の Azure IoT Edge Tools" 拡張機能は、メンテナンス モードになっています。

  2. エクスプローラーで、Azure IoT Hub を展開し、監視するモジュールを含むデバイスを展開します。

  3. モジュールを選択し、[ モジュール ツインの編集] を選択します。 モジュール ツインの一時ファイルがコンピューターにダウンロードされ、Visual Studio Code で開きます。

    Visual Studio Code で編集するモジュール ツインを取得する方法を示すスクリーンショット。

変更を行った後、エディターのコードの上にある [モジュール ツインの更新 ] を選択して、IoT ハブに保存します。

Visual Studio Code でモジュール ツインを更新する方法を示すスクリーンショット。

Azure CLI 上でモジュール ツインを監視する

az iot hub invoke-module-method コマンドを使用して IoT Edge エージェントに ping を実行して、IoT Edge が実行されているかどうかを確認します。

az iot hub module-twin 構造では、以下のコマンドが提供されています。

  • az iot hub module-twin show - モジュール ツインの定義を表示します。
  • az iot hub module-twin update - モジュール ツインの定義を更新します。
  • az iot hub module-twin replace - モジュール ツインの定義を対象の JSON に置き換えます。

ヒント

CLI コマンドを使用してランタイム モジュールをターゲットにするには、モジュール ID の $ 文字をエスケープすることが必要になる場合があります。 次に例を示します。

az iot hub module-twin show -m '$edgeAgent' -n <hub name> -d <device name>

または:

az iot hub module-twin show -m \$edgeAgent -n <hub name> -d <device name>

次のステップ

組み込みのダイレクト メソッドを使用して EdgeAgent と通信する方法について説明します。