Мониторинг двойников модулей

Область применения:IoT Edge 1.5 проверка mark IoT Edge 1.5 IoT Edge 1.4 проверка mark IoT Edge 1.4

Внимание

Поддерживаются выпуски IoT Edge 1.5 LTS и IoT Edge 1.4 LTS. IoT Edge 1.4 LTS заканчивается жизнью 12 ноября 2024 года. Если вы используете более ранний выпуск, см. статью Обновление IoT Edge.

Двойники модулей в Центре Интернета вещей Azure позволяют вести мониторинг подключения и работоспособности развертываний IoT Edge. Двойники модулей хранят полезную информацию о производительности работающих модулей в центре Интернета вещей. Модули среды выполнения агент IoT Edge и центр IoT Edge, каждый из которых обслуживает своих двойников модулей — $edgeAgent и $edgeHub соответственно.

  • $edgeAgent содержит данные о работоспособности и подключении для модулей среды выполнения "агент IoT Edge" и "центр IoT Edge", а также для пользовательских модулей. Агент IoT Edge отвечает за развертывание модулей, их мониторинг и отправку отчетов о состоянии подключения в Центр Интернета вещей Azure.
  • $edgeHub содержит данные о взаимодействии между центром IoT Edge, работающим на устройстве, и Центром Интернета вещей Azure. Сюда входит обработка входящих сообщений от подчиненных устройств. Центр IoT Edge отвечает за обработку обмена данными между Центром Интернета вещей Azure и устройствами и модулями IoT Edge.

Данные организованы в метаданные, теги, а также ожидаемые и сообщаемые наборы свойств в структурах JSON двойников модулей. Ожидаемые свойства, указанные в файле deployment.json, копируются в двойники модулей. Агент IoT Edge и центр IoT Edge обновляют сообщаемые свойства для своих модулей.

Аналогичным образом, ожидаемые свойства, заданные для пользовательских модулей в файле deployment.json, копируются в их двойники модулей, но за предоставление значений сообщаемых свойств несет ответственность решение.

В этой статье описывается, как проверить двойников модулей на портале Azure, в Azure CLI и в Visual Studio Code. Сведения о мониторинге того, как устройства получают развертывания, см. в разделе Мониторинг развертываний IoT Edge. Общие сведения о концепции двойников модулей см. в разделе Общие сведения о двойниках модулей и их использование в Центре Интернета вещей.

Совет

Сообщаемые свойства модуля среды выполнения могут стать устаревшими, если устройство IoT Edge отключается от Центра Интернета вещей. Вы можете проверить связь с модулем $edgeAgent, чтобы определить, не потеряно ли соединение.

Мониторинг двойников модулей времени выполнения

Чтобы устранить проблемы с подключением при развертывании, просмотрите двойников модулей среды выполнения "агент IoT Edge" и "центр IoT Edge", а затем перейдите к другим модулям.

Мониторинг двойника модуля агента IoT Edge

В следующем примере JSON показан двойник модуля $edgeAgent в Visual Studio Code, где большая часть разделов JSON свернута.

{
  "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 можно описать в следующих разделах, начиная с верхнего.

  • Metadata — содержит данные о подключении. Интересно, что состояние подключения для агента IoT Edge всегда находится в отключенном состоянии: "connectionState": "Disconnected". Причина в том, что состояние подключения относится к сообщениям от устройства к облаку (D2C), а агент IoT Edge не отправляет сообщения D2C.
  • Properties — содержит подразделы 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 — состояние выполнения, может иметь одно из следующих значений:

    значение Описание
    неизвестно Состояние по умолчанию до создания развертывания.
    backoff Запуск модуля запланирован, но сейчас он не выполняется. Это значение полезно для изменения состояния модуля при перезапуске. Когда модуль после сбоя ожидает перезапуска в течение периода отсрочки, модуль будет находиться в состоянии backoff (задержка).
    выполняется Указывает, что модуль в данный момент выполняется.
    неработоспособный Указывает, что проверка работоспособности завершилась сбоем или истекло время ожидания ответа.
    stopped Указывает, что модуль успешно завершил работу (с нулевым кодом выхода).
    ошибка Указывает, что модуль завершился с кодом выхода сбоя (ненулевым). Модуль может вернуться из этого состояния к состоянию backoff в зависимости от действующей политики перезапуска. Это состояние может означать, что в модуле возникла неустранимая ошибка. Сбой происходит, когда Microsoft Monitoring Agent (MMA) больше не может реанимировать модуль, что требует нового развертывания.

Дополнительные сведения см. в разделе Сообщаемые свойства EdgeAgent.

Мониторинг двойника модуля центра IoT Edge

В следующем примере JSON показан двойник модуля $edgeHub в Visual Studio Code, где большая часть разделов JSON свернута.

{
  "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, отражаются в двойнике модуля, и модуль может обновлять сообщаемые значения свойств по мере необходимости.

Вы можете использовать предпочитаемый язык программирования с пакетами SDK для устройств Центра Интернета вещей Azure, чтобы обновить сообщаемые значения свойств в двойнике модуля на основе кода вашего приложения модуля. Следующая процедура использует для этого пакет Azure SDK для .NET с применением кода из модуля SimulatedTemperatureSensor.

  1. Создайте экземпляр ModuleClient с помощью метода CreateFromEnvironmentAysnc.

  2. Получите коллекцию свойств двойника модуля с помощью метода GetTwinAsync.

  3. Создайте прослушиватель (передав обратный вызов) для перехвата изменений ожидаемых свойств с помощью метода SetDesiredPropertyUpdateCallbackAsync.

  4. В методе обратного вызова обновите сообщаемые свойства в двойнике модуля с помощью метода UpdateReportedPropertiesAsync, передав параметр TwinCollection значений свойств, которые необходимо задать.

Доступ к двойникам модулей

Вы можете просмотреть JSON для двойников модулей в Центре Интернета вещей Azure, в Visual Studio Code и с помощью Azure CLI.

Мониторинг в Центре Интернета вещей Azure

Чтобы просмотреть JSON для двойника модуля, выполните следующие действия.

  1. Войдите на портал Azure и перейдите к своему Центру Интернета вещей.

  2. Выберите устройства в меню управления устройствами .

  3. Выберите идентификатор устройства Устройства IoT Edge с модулями, которые вы хотите отслеживать.

  4. Выберите имя модуля на вкладке Модули, а затем в верхней строке меню выберите Двойник удостоверения модуля.

    Снимок экрана: выбор двойника модуля для просмотра в портал Azure.

Если отображается сообщение об ошибке "Удостоверение модуля не существует для этого модуля", это означает, что серверное решение, изначально создавшее удостоверение, больше не доступно.

Мониторинг двойников модулей в Visual Studio Code

Чтобы просмотреть и изменить двойник модуля, выполните следующие действия.

  1. Если оно еще не установлено, установите расширения Azure IoT Edge и Центр Интернета вещей Azure. Средства Azure IoT Edge для расширения Visual Studio Code в режиме обслуживания.

  2. В Обозревателе разверните Центр Интернета вещей Azure, а затем разверните устройство с модулем, который требуется отслеживать.

  3. Щелкните модуль правой кнопкой мыши и выберите Изменить двойник модуля. Временный файл двойника модуля загрузится на компьютер и отобразится в Visual Studio Code.

    Снимок экрана: получение двойника модуля для редактирования в Visual Studio Code.

Если вы внесли изменения нажмите Обновить двойника модуля над кодом в редакторе, чтобы сохранить изменения в центре Интернета вещей.

Снимок экрана: обновление двойника модуля в Visual Studio Code.

Мониторинг двойников модулей в Azure CLI

Чтобы узнать, работает ли IoT Edge, воспользуйтесь командой az iot hub invoke-module-method для проверки связи с агентом 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.

Совет

Чтобы указать модули среды выполнения с помощью интерфейса командной строки, может потребоваться использовать escape-символ для $ в идентификаторе модуля. Например:

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 с помощью встроенных прямых методов.