Monitorar, diagnosticar e solucionar problemas de conectividade de dispositivo do Hub IoT do Azure
Problemas de conectividade para dispositivos IoT podem ser difíceis de solucionar porque há muitos pontos possíveis de falha. Lógica de aplicativos, redes físicas, protocolos, hardware, Hub IoT e outros serviços em nuvem podem causar problemas. A capacidade de detetar e identificar a origem de um problema é fundamental. No entanto, uma solução de IoT em escala pode ter milhares de dispositivos, por isso não é prático verificar dispositivos individuais manualmente. O Hub IoT integra-se com dois serviços do Azure para ajudá-lo:
Azure Monitor O Azure Monitor permite coletar, analisar e agir na telemetria do Hub IoT. Para ajudá-lo a detetar, diagnosticar e solucionar esses problemas em escala, use os recursos de monitoramento que o Hub IoT fornece por meio do Azure Monitor. Essa abordagem inclui a configuração de alertas para disparar notificações e ações quando ocorrem desconexões e a configuração de logs que você pode usar para descobrir as condições que causaram desconexões.
Grade de Eventos do Azure Para infraestrutura crítica e desconexões por dispositivo, use a Grade de Eventos do Azure para assinar eventos de conexão e desconexão de dispositivo emitidos pelo Hub IoT. A Grade de Eventos do Azure permite que você use qualquer um dos seguintes manipuladores de eventos:
- Funções do Azure
- Logic Apps
- Azure Automation
- WebHooks
- Armazenamento de Filas
- Ligações Híbridas
- Hubs de Eventos
Grade de Eventos vs. Azure Monitor
A Grade de Eventos fornece uma solução de monitoramento por dispositivo de baixa latência que você pode usar para rastrear conexões de dispositivos para dispositivos e infraestrutura críticos. O Azure Monitor fornece uma métrica chamada Dispositivos conectados que você pode usar para monitorar o número de dispositivos conectados ao seu Hub IoT e disparar um alerta quando esse número cair abaixo de um limite estático.
Considere os seguintes problemas ao decidir se deseja usar a Grade de Eventos ou o Azure Monitor para um cenário específico:
Latência de alerta: os eventos de conexão do Hub IoT são entregues muito mais rapidamente por meio da Grade de Eventos. Este facto torna a Grelha de Eventos uma melhor escolha para cenários onde a notificação rápida é desejável.
Notificações por dispositivo: a Grade de Eventos oferece a capacidade de rastrear conexões e desconexões para dispositivos individuais. Esse fato torna a Grade de Eventos uma escolha melhor para cenários em que você precisa monitorar as conexões para dispositivos críticos.
Configuração leve: os alertas de métrica do Azure Monitor fornecem uma experiência de configuração leve que não requer integração com outros serviços para entregar notificações por email, SMS, voz e outras notificações. Com a Grade de Eventos, você precisa se integrar a outros serviços do Azure para entregar notificações. Ambos os serviços podem integrar-se com outros serviços para desencadear ações mais complexas.
Grade de eventos: monitorar eventos de conexão e desconexão
Para monitorar eventos de conexão e desconexão de dispositivos em produção, recomendamos assinar os eventos DeviceConnected e DeviceDisconnected na Grade de Eventos para disparar alertas e monitorar o estado da conexão do dispositivo. A Grade de Eventos fornece latência de evento menor do que o Azure Monitor e você pode monitorar por dispositivo. Esses fatores tornam a Grade de Eventos o método preferido para monitorar dispositivos e infraestrutura críticos.
Ao usar a Grade de Eventos para monitorar ou disparar alertas sobre desconexões de dispositivos, certifique-se de criar uma maneira de filtrar as desconexões periódicas devido à renovação do token SAS em dispositivos que usam os SDKs do Azure IoT. Para saber mais, consulte Comportamento de desconexão de dispositivo MQTT com SDKs do Azure IoT.
Explore os seguintes artigos para saber mais sobre como monitorar eventos de conexão de dispositivo com a Grade de Eventos:
Para obter uma visão geral do uso da Grade de Eventos com o Hub IoT, consulte Reagir a eventos do Hub IoT com a Grade de Eventos. Preste especial atenção à seção Limitações para eventos de estado de conexão do dispositivo.
Para obter um tutorial sobre como ordenar eventos de conexão de dispositivo, consulte Solicitar eventos de conexão de dispositivo do Hub IoT do Azure usando o Azure Cosmos DB.
Para obter um tutorial sobre como enviar notificações por email, consulte Enviar notificações por email sobre eventos do Hub IoT do Azure usando Grade de Eventos e Aplicativos Lógicos na documentação da Grade de Eventos.
Azure Monitor: Usar logs para resolver erros de conectividade
Ao detetar desconexões de dispositivos usando alertas de métricas do Azure Monitor ou Grade de Eventos, você pode usar logs para ajudar a solucionar o motivo. Esta seção descreve como procurar problemas comuns nos Logs do Azure Monitor. As etapas aqui pressupõem que você já criou uma configuração de diagnóstico para enviar logs do Hub IoT Connections para um espaço de trabalho do Log Analytics.
Depois de criar uma configuração de diagnóstico para rotear logs de recursos do Hub IoT para os Logs do Azure Monitor, siga estas etapas para exibir os logs no portal do Azure.
Navegue até seu hub IoT no portal do Azure.
Em Monitoramento , no painel esquerdo do hub IoT, selecione Logs.
Para isolar os logs de erro de conectividade do Hub IoT, insira a seguinte consulta no editor de consultas e selecione Executar:
AzureDiagnostics | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
Se houver resultados, procure
OperationName
,ResultType
(código de erro) eResultDescription
(mensagem de erro) para obter mais detalhes.
Use os seguintes guias de resolução de problemas para obter ajuda com os erros mais comuns:
Azure Monitor: usar logs para monitorar a conectividade de um dispositivo específico
Pode haver situações em que você queira usar o Azure Monitor para ver erros de conectividade e informações de um dispositivo específico. Para isolar eventos de conectividade para um dispositivo, você pode seguir as mesmas etapas da seção anterior, mas insira a consulta a seguir. Substitua test-device pelo nome do seu dispositivo.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "test-device"
A consulta retorna eventos de erro e informativos para o dispositivo de destino. O exemplo de saída a seguir mostra um evento deviceConnect informativo:
Comportamento de desconexão de dispositivo MQTT com SDKs do Azure IoT
Os SDKs de dispositivo IoT do Azure se desconectam do Hub IoT e se reconectam quando renovam tokens SAS pelo protocolo MQTT (e MQTT sobre WebSockets). Nos logs, isso aparece como eventos informativos de desconexão e conexão do dispositivo, às vezes acompanhados por eventos de erro.
Por padrão, a vida útil do token é de 60 minutos para todos os SDKs; no entanto, os desenvolvedores podem alterá-lo em alguns dos SDKs. A tabela a seguir resume a vida útil do token, a renovação do token e o comportamento de renovação do token para cada um dos SDKs:
SDK | Tempo de vida do token | Renovação de tokens | Comportamento de renovação |
---|---|---|---|
.NET | 60 minutos, configurável | 85% da vida útil, configurável | O SDK desconecta e reconecta com a vida útil do token mais um período de carência de 10 minutos. Eventos informativos e erros gerados em logs. |
Java | 60 minutos, configurável | 85% da vida útil, não configurável | O SDK desconecta e reconecta com a vida útil do token mais um período de carência de 10 minutos. Eventos informativos e erros gerados em logs. |
Node.js | 60 minutos, configurável | configurável | O SDK desconecta e reconecta na renovação do token. Somente eventos informativos são gerados em logs. |
Python | 60 minutos, configurável | 120 segundos antes da expiração | O SDK desconecta e reconecta na vida útil do token. |
As capturas de tela a seguir mostram o comportamento de renovação de token nos Logs do Azure Monitor para diferentes SDKs. A vida útil do token e o limite de renovação foram alterados de seus padrões, conforme observado.
SDK do dispositivo .NET com uma vida útil e renovação de token de 1200 segundos (20 minutos) definida para acontecer em 90% da vida útil. As desconexões acontecem a cada 30 minutos:
Java SDK com uma vida útil de token de 300 segundos (5 minutos) e 85% padrão de renovação de tempo de vida. As desconexões acontecem a cada 15 minutos:
SDK do nó com uma vida útil do token de 300 segundos (5 minutos) e renovação do token definida para acontecer em 3 minutos. As desconexões acontecem na renovação do token. Além disso, não há erros. Apenas eventos informativos de conexão/desconexão são emitidos:
A consulta a seguir foi usada para coletar os resultados. A consulta extrai o nome e a versão do SDK do pacote de propriedades. Para saber mais, consulte Versão do SDK nos logs do Hub IoT.
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend parsed_json = parse_json(properties_s)
| extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId) , Protocol = tostring(parsed_json.protocol)
| distinct TimeGenerated, OperationName, Level, ResultType, ResultDescription, DeviceId, Protocol, SDKVersion
Como desenvolvedor ou operador de soluções IoT, você precisa estar ciente desse comportamento para interpretar eventos de conexão/desconexão e erros relacionados em logs. Se você quiser alterar a vida útil do token ou o comportamento de renovação dos dispositivos, verifique se o dispositivo implementa uma configuração de dispositivo duplo ou um método de dispositivo que torne essa alteração possível.
Se você estiver monitorando conexões de dispositivo com Hubs de Eventos, certifique-se de criar uma maneira de filtrar as desconexões periódicas devido à renovação do token SAS. Por exemplo, não acione ações com base em desconexões desde que o evento de desconexão seja seguido por um evento de conexão dentro de um determinado período de tempo.
Nota
O Hub IoT suporta apenas uma conexão MQTT ativa por dispositivo. Qualquer nova conexão MQTT em nome do mesmo ID de dispositivo faz com que o Hub IoT descarte a conexão existente.
400027 ConnectionForcefullyClosedOnNewConnection será conectado aos logs do Hub IoT
Eu tentei os passos, mas eles não funcionaram
Se as etapas anteriores não ajudarem, tente:
Se você tiver acesso aos dispositivos problemáticos, física ou remotamente (como SSH), siga o guia de solução de problemas do lado do dispositivo para continuar a solução de problemas.
Verifique se seus dispositivos estão habilitados no portal > do Azure seus dispositivos IoT hub > IoT.
Se o seu dispositivo usa o protocolo MQTT, verifique se a porta 8883 está aberta. Para obter mais informações, consulte Conectando-se ao Hub IoT (MQTT).
Obtenha ajuda da página de perguntas e respostas da Microsoft para o suporte do Hub IoT do Azure, Estouro de Pilha ou Azure.
Próximos passos
Para saber mais sobre como resolver problemas transitórios, consulte Tratamento de falhas transitórias.
Para saber mais sobre os SDKs de dispositivo IoT do Azure e o gerenciamento de tentativas, consulte Repetir padrões.