Monitorar, diagnosticar e solucionar problemas de conectividade do dispositivo do Hub IoT do Azure

Problemas de conectividade para dispositivos IoT podem ser difíceis de solucionar porque há muitos possíveis pontos de falha. A lógica do aplicativo, as redes físicas, os protocolos, o hardware, o Hub IoT e outros serviços de nuvem podem causar problemas. Poder detectar e identificar a origem de um problema é crucial. No entanto, uma solução de IoT em escala pode ter milhares de dispositivos, portanto, não é viável verificar dispositivos individuais manualmente. O Hub IoT integra-se a dois serviços do Azure para:

  • Azure Monitor: permite coletar e analisar a telemetria do Hub IoT e executar ações de acordo com elas. Para ajudar a detectar, diagnosticar e solucionar esses problemas em escala, use os recursos de monitoramento que o Hub IoT oferece pelo Azure Monitor. Isso inclui a configuração de alertas para disparar notificações e ações quando as desconexões ocorrem e configurar logs que podem ser usados para descobrir as condições que causaram A desconexões.

  • Grade de Eventos do Azure Em relação à infraestrutura crítica e às 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 os seguintes manipuladores de eventos:

    • Azure Functions
    • Aplicativos Lógicos
    • Automação do Azure
    • WebHooks
    • Armazenamento de Filas
    • Conexões Híbridas
    • Hubs de Eventos

Grade de Eventos X Azure Monitor

A Grade de Eventos fornece uma solução de monitoramento de baixa latência por dispositivo que você pode usar para rastrear conexões de dispositivo em dispositivos e infraestruturas 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 o seguinte ao decidir se deseja usar a Grade de Eventos ou Azure Monitor em determinado cenário:

  • Latência de alerta: os eventos de conexão do Hub IoT são entregues muito mais rapidamente por meio da Grade de Eventos. Isso torna a Grade de Eventos uma opção melhor para cenários em que é melhor ter notificação rápida.

  • Notificações por dispositivo: a Grade de Eventos permite controlar conexões e desconexões em dispositivos individuais. Isso torna a Grade de Eventos uma opção melhor para cenários em que você precisa monitorar as conexões de dispositivos críticos.

  • Configuração leve: os alertas de métrica do Azure Monitor oferecem uma experiência de configuração leve que não exige integração com outros serviços para fornecer notificações por email, SMS, voz e outras notificações. Com a Grade de Eventos, você precisa fazer a integração com outros serviços do Azure para entregar notificações. Ambos os serviços podem se integrar a outros serviços para disparar ações mais complexas.

Grade de Eventos: monitorar eventos de conexão e desconexão

Para monitorar eventos de conexão e desconexão do dispositivo na 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 oferece menor latência de eventos do que o Azure Monitor, e você pode fazer o monitoramento por dispositivo. Esses fatores tornam a Grade de Eventos o método preferencial para monitorar dispositivos e infraestruturas críticos.

Quando você usa a Grade de Eventos para monitorar ou disparar alertas sobre desconexões de dispositivo, não se esqueça de criar uma maneira de filtrar as desconexões periódicas devido à renovação de token SAS em dispositivos que usam os SDKs do IoT do Azure. Para saber mais, confira Comportamento de desconexão de dispositivo MQTT com SDKs do IoT do Azure.

Explore os artigos a seguir para saber mais sobre o monitoramento de eventos de conexão de dispositivo com a Grade de Eventos:

Azure Monitor: encaminhar eventos de conexão para logs

O Hub IoT emite continuamente logs de recursos para várias categorias de operações. No entanto, para coletar esses dados de log, você precisará criar uma configuração de diagnóstico a fim de encaminhá-lo para um destino no qual ele possa ser analisado ou arquivado. Um desses destinos é os Logs do Azure Monitor por meio de um workspace do Log Analytics (confira preços), onde você pode analisar os dados usando consultas Kusto.

A categoria de conexões de logs de recursos do Hub IoT emite operações e erros que tenham a ver com conexões de dispositivo. A captura de tela abaixo mostra uma configuração de diagnóstico para encaminhar esses logs para um workspace do Log Analytics:

Configuração recomendada para enviar logs de conectividade ao workspace do Log Analytics.

Recomendamos criar uma configuração de diagnóstico o mais cedo possível depois de criar o Hub IoT porque, embora o Hub IoT sempre emita logs de recursos, eles não são coletados pelo Azure Monitor até que você os encaminhe para um destino.

Para saber mais sobre como encaminhar logs para um destino, confira Coleta e roteamento. Para obter instruções detalhadas sobre como criar uma configuração de diagnóstico, confira o tutorial Usar métricas e logs.

Azure Monitor: configurar alertas de métrica para desconexões de dispositivo

Você pode configurar alertas com base nas métricas de plataforma emitidas pelo Hub IoT. Com os alertas de métricas, você pode notificar as pessoas de que uma condição de interesse ocorreu e também disparar ações que podem responder a essa condição automaticamente.

A métrica Dispositivos conectados (versão prévia) informa quantos dispositivos estão conectados ao Hub IoT. Você pode criar alertas para serem disparados se essa métrica cair abaixo de um valor limite:

Configurações de lógica de alerta para métrica de dispositivos conectados.

Você pode usar as regras de alerta de métrica para monitorar anomalias de desconexão de dispositivo em escala. Ou seja, use alertas para determinar quando um número significativo de dispositivos é desconectado inesperadamente. Quando isso é detectado, você pode examinar os logs como ajuda para solucionar o problema. No entanto, para monitorar desconexões por dispositivo e desconexões de dispositivos críticos quase em tempo real, você precisa usar a Grade de Eventos.

Para saber mais sobre alertas com o Hub IoT, confira Alertas no monitoramento do Hub IoT. Para obter um passo a passo de criação de alertas no Hub IoT, confira o tutorial Usar métricas e logs. Para obter uma visão geral mais detalhada dos alertas, confira Visão geral dos alertas no Microsoft Azure na documentação sobre o Azure Monitor.

Azure Monitor: usar logs para resolver erros de conectividade

Ao detectar desconexões de dispositivo usando os alertas de métrica do Azure Monitor ou a Grade de Eventos, você pode usar os logs para entender o motivo. Esta seção descreve como procurar problemas comuns nos Logs do Azure Monitor. As etapas a seguir pressupõem que você já criou uma configuração de diagnóstico para enviar logs das Conexões do Hub IoT a um workspace do Log Analytics.

Depois de criar uma configuração de diagnóstico para encaminhar logs de recursos do Hub IoT para os Logs do Azure Monitor, siga estas etapas para exibir os logs no portal do Azure.

  1. Navegue até o Hub IoT no portal do Azure.

  2. Selecione Logs em Monitoramento no painel esquerdo do hub IoT.

  3. Para isolar logs de erros de conectividade do Hub IoT, insira a consulta a seguir no editor de consulta e selecione Executar:

    AzureDiagnostics
    | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
    
  4. Se houver resultados, procure OperationName, ResultType (código de erro) e ResultDescription (mensagem de erro) para obter mais detalhes.

    Exemplo de log de erros

Use os seguintes guias de resolução de problemas como ajuda para solucionar 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 de um dispositivo, siga 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. A saída de exemplo a seguir mostra um evento deviceConnect informativo:

Captura de tela do evento deviceConnect nos logs.

Comportamento de desconexão de dispositivo MQTT com SDKs do IoT do Azure

Os SDKs do dispositivo IoT do Azure se desconectam do Hub IoT e, em seguida, se reconectam quando renovam tokens SAS no protocolo MQTT (e MQTT sobre WebSockets). Nos logs, isso aparece como eventos informacionais de conexão e desconexão de dispositivo, às vezes acompanhados por eventos de erro.

Por padrão, o tempo de vida do token é de 60 minutos para todos os SDKs; no entanto, ele pode ser alterado por desenvolvedores em alguns dos SDKs. A tabela a seguir resume a vida útil do token, a renovação de token e o comportamento de renovação de token para cada um dos SDKs:

. Tempo de vida do token Renovação de token Comportamento de renovação
.NET 60 minutos, configurável 85% de vida útil, configurável O SDK se desconecta e reconecta após decorrido o tempo de vida do token mais dez minutos. Eventos informativos e erros gerados em logs.
Java 60 minutos, configurável 85% de vida útil, não configurável O SDK se desconecta e reconecta após decorrido o tempo de vida do token mais dez minutos. Eventos informativos e erros gerados em logs.
Node.js 60 minutos, configurável configurável O SDK se conecta e se desconecta após a 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 se desconecta e se reconecta após o tempo de vida 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 duração de token de 1200 segundos (20 minutos) e renovação definida para acontecer em 90% da vida útil. As desconexões acontecem a cada 30 minutos:

    Comportamento de erro em renovação de token sobre MQTT nos Logs do Azure Monitor com o SDK do .NET.

  • SDK do Java com uma duração de token de 300 segundos (5 minutos) e padrão de 85% da renovação da vida útil. As desconexões acontecem a cada 15 minutos:

    Comportamento de erro em renovação de token sobre MQTT nos Logs do Azure Monitor com o SDK do Java.

  • SDK do Node com uma duração de token de 300 segundos (5 minutos) e renovação de token definida para acontecem em 3 minutos. As desconexões acontecem na renovação do token. Além disso, não há erros; somente eventos de conexão/desconexão informativos são emitidos:

    Comportamento de erro em renovação de token sobre MQTT nos Logs do Azure Monitor com o SDK do Node.

A consulta a seguir foi usada para coletar os resultados. A consulta extrai o nome e a versão do SDK do recipiente de propriedades. Para saber mais, confira 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 de 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 gêmeo ou um método de dispositivo que torne isso possível.

Se você está monitorando conexões de dispositivo com os Hubs de Eventos, remova do filtro as desconexões periódicas devido à renovação do token SAS. Por exemplo, não dispare 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 intervalo de tempo.

Observação

O Hub IoT oferece suporte apenas a uma conexão MQTT ativa por dispositivo. Qualquer nova conexão MQTT em nome da mesma ID de dispositivo faz com que o Hub IoT descarte a conexão existente.

400027 ConnectionForcefullyClosedOnNewConnection será registrado nos Logs do Hub IoT

Tentei as etapas, mas elas não funcionaram

Se as etapas anteriores não ajudarem, tente:

Próximas etapas