Partilhar via


Monitorizar módulos duplos

Aplica-se a: Marca de verificação do IoT Edge 1.5 IoT Edge 1.5 Marca de verificação do IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS são versões suportadas. O IoT Edge 1.4 LTS termina a vida útil em 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.

Os gêmeos de módulo no Hub IoT do Azure permitem monitorar a conectividade e a integridade de suas implantações do IoT Edge. Os gêmeos de módulo armazenam informações úteis em seu hub IoT sobre o desempenho de seus módulos em execução. O agente do IoT Edge e os módulos de tempo de execução do hub IoT Edge mantêm seus gêmeos de módulo e$edgeHub, $edgeAgent respectivamente:

  • $edgeAgent contém dados de integridade e conectividade sobre o agente IoT Edge e os módulos de tempo de execução do hub IoT Edge e seus módulos personalizados. O agente IoT Edge é responsável por implantar os módulos, monitorá-los e relatar o status da conexão ao seu hub IoT do Azure.
  • $edgeHub contém dados sobre comunicações entre o hub IoT Edge em execução em um dispositivo e seu hub IoT do Azure. Isso inclui o processamento de mensagens recebidas de dispositivos a jusante. O hub IoT Edge é responsável pelo processamento das comunicações entre o Hub IoT do Azure e os dispositivos e módulos do IoT Edge.

Os dados são organizados em metadados, tags, juntamente com conjuntos de propriedades desejadas e relatadas nas estruturas JSON dos gêmeos de módulo. As propriedades desejadas especificadas no arquivo deployment.json são copiadas para os gêmeos do módulo. O agente IoT Edge e o hub IoT Edge atualizam as propriedades relatadas para seus módulos.

Da mesma forma, as propriedades desejadas especificadas para seus módulos personalizados no arquivo deployment.json são copiadas para seu módulo gêmeo, mas sua solução é responsável por fornecer seus valores de propriedade relatados.

Este artigo descreve como revisar os gêmeos de módulo no portal do Azure, CLI do Azure e no Visual Studio Code. Para obter informações sobre como monitorar como seus dispositivos recebem as implantações, consulte Monitorar implantações do IoT Edge. Para obter uma visão geral sobre o conceito de gêmeos de módulo, consulte Compreender e usar gêmeos de módulo no Hub IoT.

Gorjeta

As propriedades relatadas de um módulo de tempo de execução podem ficar obsoletas se um dispositivo IoT Edge for desconectado de seu hub IoT. Você pode executar ping no $edgeAgent módulo para determinar se a conexão foi perdida.

Monitorar gêmeos de módulo de tempo de execução

Para solucionar problemas de conectividade de implantação, revise os gêmeos do agente do IoT Edge e do módulo de tempo de execução do hub IoT Edge e, em seguida, faça uma busca detalhada em outros módulos.

Monitore o módulo duplo do agente IoT Edge

O JSON a seguir mostra o módulo gêmeo $edgeAgent no Visual Studio Code com a maioria das seções JSON recolhidas.

{
  "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
    }
  }
}

O JSON pode ser descrito nas seguintes seções, começando do topo:

  • Metadados - Contém dados de conectividade. Curiosamente, o estado de conexão para o agente IoT Edge está sempre em um estado desconectado: "connectionState": "Disconnected". O motivo é que o estado da conexão diz respeito a mensagens D2C (device-to-cloud) e o agente do IoT Edge não envia mensagens D2C.
  • Propriedades - Contém as desired subseções e reported .
  • Properties.desired - (mostrado recolhido) Valores de propriedade esperados definidos pelo operador no arquivo deployment.json.
  • Properties.reported - Valores de propriedade mais recentes relatados pelo agente IoT Edge.

properties.desired As seções e properties.reported têm uma estrutura semelhante e contêm metadados adicionais para informações de esquema, versão e tempo de execução. Também está incluída a modules seção para quaisquer módulos personalizados (como SimulatedTemperatureSensor), e a systemModules seção para $edgeAgent e os $edgeHub módulos de tempo de execução.

Ao comparar os valores de propriedade relatados com os valores desejados, você pode determinar discrepâncias e identificar desconexões que podem ajudá-lo a solucionar problemas. Ao fazer essas comparações, verifique o $lastUpdated metadata valor informado na seção do estabelecimento que você está investigando.

As seguintes propriedades são importantes para examinar a solução de problemas:

  • exitcode - Qualquer valor diferente de zero indica que o módulo parou com uma falha. No entanto, os códigos de erro 137 ou 143 são usados se um módulo foi intencionalmente definido para um status interrompido.

  • lastStartTimeUtc - Mostra o DateTime que o contêiner foi iniciado pela última vez. Esse valor é 0001-01-01T00:00:00Z se o contêiner não tiver sido iniciado.

  • lastExitTimeUtc - Mostra o DateTime que o contêiner concluiu pela última vez. Esse valor é 0001-01-01T00:00:00Z se o contêiner estiver em execução e nunca tiver sido interrompido.

  • runtimeStatus - Pode ser um dos seguintes valores:

    valor Description
    desconhecido Estado padrão até que a implantação seja criada.
    recuo O módulo está programado para iniciar, mas não está em execução no momento. Esse valor é útil para um módulo que está passando por alterações de estado na reinicialização. Quando um módulo com falha estiver aguardando a reinicialização durante o período de resfriamento, o módulo estará em um estado de backoff.
    em execução Indica que o módulo está em execução no momento.
    insalubridade Indica que uma verificação de teste de integridade falhou ou expirou.
    parado Indica que o módulo saiu com êxito (com um código de saída zero).
    com falhas Indica que o módulo saiu com um código de saída de falha (diferente de zero). O módulo pode fazer a transição de volta para backoff desse estado, dependendo da política de reinicialização em vigor. Esse estado pode indicar que o módulo sofreu um erro irrecuperável. A falha ocorre quando o Microsoft Monitoring Agent (MMA) não pode mais ressuscitar o módulo, exigindo uma nova implantação.

Consulte Propriedades relatadas do EdgeAgent para obter detalhes.

Monitorar o módulo de hub IoT Edge gêmeo

O JSON a seguir mostra o módulo gêmeo $edgeHub no Visual Studio Code com a maioria das seções JSON recolhidas.

{
  "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
    }
  }
}

O JSON pode ser descrito nas seguintes seções, começando do topo:

  • Metadados - Contém dados de conectividade.

  • Propriedades - Contém as desired subseções e reported .

  • Properties.desired - (mostrado recolhido) Valores de propriedade esperados definidos pelo operador no arquivo deployment.json.

  • Properties.reported - Valores de propriedade mais recentes relatados pelo hub IoT Edge.

Se você estiver enfrentando problemas com seus dispositivos downstream, examinar esses dados seria um bom lugar para começar.

Monitore gêmeos de módulo personalizados

As informações sobre a conectividade de seus módulos personalizados são mantidas no gêmeo do módulo do agente do IoT Edge. O módulo twin para o seu módulo personalizado é usado principalmente para manter dados para a sua solução. As propriedades desejadas definidas no arquivo deployment.json são refletidas no módulo gêmeo e o módulo pode atualizar os valores de propriedade relatados conforme necessário.

Você pode usar sua linguagem de programação preferida com os SDKs de Dispositivo do Hub IoT do Azure para atualizar os valores de propriedade relatados no gêmeo do módulo, com base no código do aplicativo do módulo. O procedimento a seguir usa o SDK do Azure para .NET para fazer isso, usando o código do módulo SimulatedTemperatureSensor :

  1. Crie uma instância do ModuleClient com o método CreateFromEnvironmentAsync .

  2. Obtenha uma coleção das propriedades do gêmeo do módulo com o método GetTwinAsync .

  3. Crie um ouvinte (passando um retorno de chamada) para capturar alterações nas propriedades desejadas com o método SetDesiredPropertyUpdateCallbackAsync .

  4. No método de retorno de chamada, atualize as propriedades relatadas no módulo gêmeo com o método UpdateReportedPropertiesAsync , passando um TwinCollection dos valores de propriedade que você deseja definir.

Aceda aos gémeos do módulo

Você pode revisar o JSON para gêmeos de módulo no Hub IoT do Azure, no Visual Studio Code e com a CLI do Azure.

Monitorar no Hub IoT do Azure

Para visualizar o JSON para o módulo gêmeo:

  1. Entre no portal do Azure e navegue até seu hub IoT.

  2. Selecione Dispositivos no menu Gerenciamento de dispositivos.

  3. Selecione o ID do dispositivo IoT Edge com os módulos que você deseja monitorar.

  4. Selecione o nome do módulo na guia Módulos e, em seguida, selecione Identidade do módulo Twin na barra de menu superior.

    Captura de tela mostrando como selecionar um módulo gêmeo para exibir no portal do Azure.

Se você vir a mensagem "Uma identidade de módulo não existe para este módulo", esse erro indica que a solução de back-end não está mais disponível que criou originalmente a identidade.

Monitorar gêmeos de módulo no Visual Studio Code

Para rever e editar um módulo twin:

  1. Se ainda não estiver instalado, instale as extensões Azure IoT Edge e Azure IoT Hub . A extensão de código das ferramentas do Azure IoT Edge para Visual Studio está no modo de manutenção.

  2. No Explorer, expanda o Hub IoT do Azure e expanda o dispositivo com o módulo que você deseja monitorar.

  3. Clique com o botão direito do mouse no módulo e selecione Editar módulo duplo. Um arquivo temporário do módulo gêmeo é baixado para o computador e exibido no Visual Studio Code.

    Captura de tela mostrando como fazer com que um módulo gêmeo seja editado no Visual Studio Code.

Se você fizer alterações, selecione Atualizar módulo Twin acima do código no editor para salvar as alterações no hub IoT.

Captura de tela mostrando como atualizar um módulo gêmeo no Visual Studio Code.

Monitorar gêmeos de módulo na CLI do Azure

Para ver se o IoT Edge está em execução, use o az iot hub invoke-module-method para executar ping no agente do IoT Edge.

A estrutura az iot hub module-twin fornece estes comandos:

  • az iot hub module-twin show - Mostrar uma definição de módulo twin.
  • az iot hub module-twin update - Atualize uma definição de módulo duplo.
  • az iot hub module-twin replace - Substitua uma definição de módulo twin por um JSON de destino.

Gorjeta

Para direcionar os módulos de tempo de execução com comandos da CLI, talvez seja necessário escapar do $ caractere no ID do módulo. Por exemplo:

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

Ou:

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

Próximos passos

Saiba como se comunicar com o EdgeAgent usando métodos diretos integrados.