Compartilhar via


Solucionar problemas em dispositivos IoT Edge

Aplica-se aoícone:yes IoT Edge 1.1

Importante

A data de término do suporte do IoT Edge 1.1 foi em 13 de dezembro de 2022. Verifique o ciclo de vida do produto microsoft para obter informações sobre como este produto, serviço, tecnologia ou API tem suporte. Para obter mais informações sobre como atualizar para a versão mais recente do IoT Edge, consulte Atualizar o IoT Edge.

Se você tiver problemas com o Azure IoT Edge no seu ambiente, use este artigo como um guia para resolver esses problemas.

Executar o comando 'check'

Sua primeira etapa ao solucionar problemas do IoT Edge deve ser usar o comando check, que executa uma coleção de testes de configuração e conectividade para problemas comuns. O check comando está disponível na versão 1.0.7 e posterior.

Observação

A ferramenta de solução de problemas não pode executar verificações de conectividade se o dispositivo de IoT Edge estiver protegido por um servidor proxy.

Você pode executar o comando check da seguinte maneira ou incluir o --help sinalizador para ver uma lista completa de opções:

No Linux:

sudo iotedge check

No Windows:

iotedge check

A ferramenta de solução de problemas executa muitas verificações que são classificadas nestas três categorias:

  • As verificações de configuração examinam detalhes que podem impedir que dispositivos do IoT Edge se conectem à nuvem, incluindo problemas com o arquivo de configuração e o mecanismo de contêiner.
  • As verificações de conexão verificam se o runtime do IoT Edge pode acessar portas no dispositivo host e se todos os componentes do IoT Edge podem se conectar ao Hub IoT. Esse conjunto de verificações retornará erros se o dispositivo IoT Edge estiver protegido por um proxy.
  • As verificações de prontidão para produção buscam as melhores práticas recomendadas para produção, como o estado dos certificados de autoridade de certificação (CA) do dispositivo e a configuração do arquivo de log do módulo.

A ferramenta de verificação de IoT Edge usa um contêiner para executar seu diagnóstico. A imagem do contêiner está mcr.microsoft.com/azureiotedge-diagnostics:latestdisponível por meio do Registro de Contêiner da Microsoft. Se você precisar executar uma verificação em um dispositivo sem acesso direto à Internet, seus dispositivos precisarão acessar a imagem de contêiner.

Para obter informações sobre cada uma das verificações de diagnóstico que esta ferramenta executa, incluindo o que fazer se você receber um erro ou aviso, consulte verificações de solução de problemas do IoT Edge.

Coletar informações de depuração com o comando 'support-bundle'

Quando você precisar coletar logs de um dispositivo do IoT Edge, a maneira mais fácil é usar o comandosupport-bundle. Por padrão, esse comando coleta o módulo, Gerenciador de Segurança do IoT Edge e logs do mecanismo de contêiner, iotedge check saída JSON e outras informações de depuração úteis. Ele os compacta em um único arquivo para facilitar o compartilhamento. O support-bundle comando está disponível na versão 1.0.9 e posterior.

Execute o comando support-bundlecom o sinalizador --since para especificar por quanto tempo do passado você deseja obter logs. Por exemplo 6h , obterá logs desde as últimas seis horas, 6d desde os últimos seis dias, 6m desde os últimos seis minutos e assim por diante. Inclua o sinalizador --help para ver uma lista completa de opções.

No Linux:

sudo iotedge support-bundle --since 6h

No Windows:

iotedge support-bundle --since 6h

Por padrão, o support-bundle comando cria um arquivo zip chamado support_bundle.zip no diretório em que o comando é chamado. Use o sinalizador --output para especificar um caminho ou nome de arquivo diferente para a saída.

Para obter mais informações sobre o comando, veja as informações de ajuda dele.

iotedge support-bundle --help

Você também pode usar a chamada de método direto interno UploadSupportBundle para carregar a saída do comando de pacote de suporte para o Armazenamento de Blobs do Azure.

Aviso

A saída do comando support-bundle pode conter nomes de host, dispositivo e módulo, informações registradas por seus módulos etc. Lembre-se disso se estiver compartilhando a saída em um fórum público.

Examinar as métricas coletadas do runtime

Os módulos de runtime do IoT Edge produzem métricas que ajudam a monitorar e entender a integridade dos dispositivos do IoT Edge. Adicione o módulo do coletor de métricas às suas implantações para lidar com a coleta dessas métricas e enviá-las para a nuvem para facilitar o monitoramento.

Para obter mais informações, consulte Coletar e transportar métricas.

Verifique a versão do IoT Edge

A atualização poderá resolver o problema se você estiver executando uma versão mais antiga do IoT Edge. A iotedge check ferramenta verifica se o daemon de segurança do IoT Edge é a versão mais recente, mas não verifica as versões dos módulos de hub e agente do IoT Edge. Para verificar a versão dos módulos de runtime do dispositivo, use os comandos iotedge logs edgeAgent e iotedge logs edgeHub. O número de versão é informado nos logs na inicialização do módulo.

Para obter instruções sobre como atualizar seu dispositivo, consulte Atualizar o daemon de segurança e o runtime do IoT Edge.

Verificar a instalação do IoT Edge em seus dispositivos

Você pode verificar a instalação do IoT Edge em seus dispositivos monitorando o módulo gêmeo edgeAgent.

Para obter o módulo gêmeo edgeAgent mais recente, execute o seguinte comando do Azure Cloud Shell:

az iot hub module-twin show --device-id <edge_device_id> --module-id '$edgeAgent' --hub-name <iot_hub_name>

Esse comando produzirá todas as propriedades relatadas por edgeAgent. Aqui estão alguns comandos úteis que monitoram o status do dispositivo:

  • status do tempo de execução
  • hora de início do runtime
  • hora da última saída do runtime
  • contagem de reinicialização do runtime

Verifique o status do Gerenciador de segurança do IoT Edge e seus logs

O gerenciador de segurança do IoT Edge é responsável por operações como inicializar o sistema do IoT Edge em dispositivos de inicialização e provisionamento. Se o IoT Edge não estiver iniciando, os logs do gerenciador de segurança poderão fornecer informações úteis.

No Linux:

  • Exiba o status do gerenciador de segurança do IoT Edge:

    sudo systemctl status iotedge
    
  • Exiba os logs do gerenciador de segurança do IoT Edge:

    sudo journalctl -u iotedge -f
    
  • Exiba logs mais detalhados do gerenciador de segurança do IoT Edge:

    1. Edite as configurações de daemon do IoT Edge:

      sudo systemctl edit iotedge.service
      
    2. Atualize as seguintes linhas:

      [Service]
      Environment=IOTEDGE_LOG=debug
      
    3. Reinicie o daemon de segurança do IoT Edge:

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

No Windows:

  • Exiba o status do gerenciador de segurança do IoT Edge:

    Get-Service iotedge
    
  • Exiba os logs do gerenciador de segurança do IoT Edge:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
    
  • Exiba apenas os últimos 5 minutos dos logs do gerenciador de segurança do IoT Edge:

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog -StartTime ([datetime]::Now.AddMinutes(-5))
    
  • Exiba logs mais detalhados do gerenciador de segurança do IoT Edge:

    1. Adicione uma variável de ambiente no nível do sistema:

      [Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "debug", [EnvironmentVariableTarget]::Machine)
      
    2. Reinicie o Daemon de Segurança do IoT Edge:

      Restart-Service iotedge
      

Verifique os logs de contêiner de problemas

Depois que o daemon de segurança de IoT Edge está em execução, examine os logs de contêineres para detectar problemas. Comece com os contêineres implantados, examine os contêineres que compõem o runtime do IoT Edge: Agente do Edge e Hub do Edge. Os logs de agente do IoT Edge normalmente fornecem informações sobre o ciclo de vida de cada contêiner. Os logs do hub do IoT Edge fornecem informações sobre mensagens e roteamento.

Você pode recuperar os logs de contêiner de vários locais:

Limpar logs de contêiner

Por padrão, o mecanismo de contêiner Moby não define limites de tamanho de log de contêiner. Com o tempo, isso pode levar ao dispositivo que está se enchendo com os logs e ficando sem espaço em disco. Se logs de contêiner grandes estão afetando o desempenho do dispositivo IoT Edge, use o comando a seguir para forçar a remoção do contêiner e seus logs relacionados.

Se você ainda estiver solucionando problemas, espere e inspecione os logs de contêiner antes de realizar esta etapa.

Aviso

Se você forçar a remoção do contêiner do edgeHub enquanto ele tiver uma lista de pendências de mensagem não entregue e nenhum armazenamento de host configurado, as mensagens não entregues serão perdidas.

docker rm --force <container name>

Para cenários de manutenção e produção de logs contínuos, configure o driver de log padrão.

Consulte as mensagens enviadas por meio do hub do IoT Edge

Você pode visualizar as mensagens que passam pelo hub do IoT Edge e obter insights a partir de logs detalhados dos contêineres de tempo de execução. Para ativar logs detalhados nesses contêineres, configure o parâmetro RuntimeLogLevel no seu arquivo de configuração YAML. Para abrir o arquivo:

No Linux:

sudo nano /etc/iotedge/config.yaml

No Windows:

notepad C:\ProgramData\iotedge\config.yaml

Por padrão, o agent elemento será semelhante ao seguinte exemplo:

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

Substitua por env: {} :

env:
  RuntimeLogLevel: debug

Aviso

Os arquivos YAML não podem conter tabulações como recuo. Em vez disso, use dois espaços. Itens de nível superior não podem ter espaço em branco à esquerda.

Salve o arquivo e reinicie o gerenciador de segurança do IoT Edge.

Você também pode verificar as mensagens que estão sendo enviadas entre os dispositivos do Hub IoT e do IoT Edge. Exiba essas mensagens usando a extensão do Hub IoT do Azure para Visual Studio Code. Para obter mais informações, consulte a ferramenta Handy ao desenvolver com o Azure IoT.

Reinicie os contêineres

Depois de investigar os logs e as mensagens para obter informações, você pode tentar reiniciar os contêineres.

No dispositivo IoT Edge, use os seguintes comandos para reiniciar os módulos:

iotedge restart <container name>

Reiniciar contêineres de runtime do IoT Edge:

iotedge restart edgeAgent && iotedge restart edgeHub

Você também pode reiniciar os módulos remotamente usando o portal do Azure. Para obter mais informações, consulte Monitorar e solucionar problemas de dispositivos do IoT Edge no portal do Azure.

Verifique as regras de configuração do firewall e da porta

O Azure IoT Edge permite a comunicação de um servidor local para a nuvem do Azure usando protocolos do Hub IoT com suporte, consulte a escolha de um protocolo de comunicação. Para maior segurança, os canais de comunicação entre o Azure IoT Edge e o Hub IoT do Azure sempre são configurados para ser de Saída. Essa configuração se baseia no padrão de Comunicação Assistida dos Serviços, que minimiza a superfície de ataque para uma entidade mal-intencionada explorar. A comunicação de entrada só é necessária para cenários específicos em que o Hub IoT do Azure precisa enviar mensagens por push para o dispositivo do Azure IoT Edge. Mensagens da nuvem para dispositivo são protegidas usando canais TLS seguros e podem ser ainda mais protegidas usando certificados X.509 e módulos de dispositivo do TPM. O Gerenciador de Segurança do Azure IoT Edge controla como essa comunicação pode ser estabelecida, consulte o Gerenciador de Segurança do IoT Edge.

Embora o IoT Edge forneça uma configuração aprimorada para proteger o runtime do Azure IoT Edge e os módulos implantados, ele ainda depende da configuração de rede e do computador subjacente. Portanto, é fundamental garantir que as regras de rede e firewall adequadas sejam configuradas para a comunicação de borda segura para a nuvem. Os seguinte pode ser usado como uma diretriz para configurar regras de firewall para os servidores subjacentes em que o runtime do Azure IoT Edge está hospedado:

Protocolo Porto Recebendo Extrovertido Orientação
MQTT 8883 BLOQUEADO (padrão) BLOQUEADO (padrão)
  • Configure a Saída como Aberta ao usar o MQTT como o protocolo de comunicação.
  • 1883 para MQTT não tem suporte do IoT Edge.
  • As conexões de Entrada devem ser bloqueadas.
AMQP 5671 BLOQUEADO (padrão) ABERTO (padrão)
  • Protocolo de comunicação padrão do IoT Edge.
  • Deve ser configurado para ser Aberto se o Azure IoT Edge não estiver configurado para outros protocolos com suporte ou o AMQP for o protocolo de comunicação desejado.
  • 5672 para AMQP não tem suporte do IoT Edge.
  • Bloqueie essa porta quando o Azure IoT Edge usar outro protocolo do Hub IoT com suporte.
  • As conexões de Entrada devem ser bloqueadas.
HTTPS 443 BLOQUEADO (padrão) ABERTO (padrão)
  • Configure a Saída para ficar aberta na porta 443 para provisionamento do IoT Edge. Essa configuração é necessária ao usar scripts manuais ou DPS (Serviço de Provisionamento de Dispositivos IoT) do Azure.
  • A conexão de entrada deve ser aberta somente para cenários específicos:
    • Se você tiver um gateway transparente com dispositivos de downstream que podem enviar solicitações de método. Nesse caso, a Porta 443 não precisa estar aberta a redes externas para se conectar ao IoTHub ou fornecer serviços do IoTHub por meio do Azure IoT Edge. Assim, a regra de entrada pode ser restrita para abrir somente a Entrada da rede interna.
    • Para cenários de cliente para dispositivo (C2D).
  • Não há suporte para 80 para HTTP no IoT Edge.
  • Se os protocolos não HTTP (por exemplo, AMQP ou MQTT) não puderem ser configurados na empresa; as mensagens podem ser enviadas por WebSockets. A porta 443 será usada para comunicação webSocket nesse caso.

Último recurso: parar e recriar todos os contêineres

Às vezes, um sistema pode exigir modificações especiais significativas para trabalhar com restrições de rede ou sistema operacional existentes. Por exemplo, um sistema pode exigir uma montagem de disco de dados diferente e configurações de proxy. Se você tentou todas as etapas acima e ainda obter falhas de contêiner, é possível que, em algum lugar, os caches do sistema docker ou as configurações de rede persistentes não estejam atualizados com a reconfiguração mais recente. Nesse caso, a última opção de recurso é usar docker prune para começar do zero.

O seguinte comando interrompe o sistema IoT Edge (e, assim, todos os contêineres) e usa as opções "todos" e "volume" para docker prune remover todos os contêineres e volumes. Examine o aviso de que o comando está com problemas e confirme quando y estiver pronto.

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]

Inicie o sistema novamente. Para maior segurança, aplique qualquer configuração potencialmente restante e inicie o sistema com um comando.

sudo iotedge config apply

Aguarde alguns minutos e verifique novamente.

sudo iotedge list

Próximas etapas

Você acha que encontrou um bug na plataforma IoT Edge? Envie um problema para que possamos continuar a melhorar.

Se você tiver mais perguntas, crie uma solicitação de suporte para obter ajuda.