Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se ao 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:latest
disponí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-bundle
com 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:
Edite as configurações de daemon do IoT Edge:
sudo systemctl edit iotedge.service
Atualize as seguintes linhas:
[Service] Environment=IOTEDGE_LOG=debug
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:
Adicione uma variável de ambiente no nível do sistema:
[Environment]::SetEnvironmentVariable("IOTEDGE_LOG", "debug", [EnvironmentVariableTarget]::Machine)
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:
No dispositivo IoT Edge, execute o seguinte comando para ver os logs:
iotedge logs <container name>
No portal do Azure, use a ferramenta de solução de problemas interna. Monitorar e solucionar problemas de dispositivos do IoT Edge no portal do Azure
Use o método direto UploadModuleLogs para carregar os logs de um módulo no Armazenamento de Blobs do Azure.
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) |
|
AMQP | 5671 | BLOQUEADO (padrão) | ABERTO (padrão) |
|
HTTPS | 443 | BLOQUEADO (padrão) | ABERTO (padrão) |
|
Ú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.