Compartilhar via


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. 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 podem ser usados para descobrir as condições que causaram as 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 os seguintes problemas ao decidir se deve 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. Esse fato faz com que a Grade de Eventos seja a melhor opção para cenários em que é desejável uma notificação rápida.

  • Notificações por dispositivo: a Grade de Eventos permite controlar conexões e desconexões em dispositivos individuais. Esse fato faz com que a Grade de Eventos seja a melhor opção 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: 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 aqui assumem que você já criou uma configuração de diagnóstico para enviar logs de Conexões do Hub IoT para um Workspace do Log Analytics.

Depois de criar uma configuração de diagnóstico para rotear os 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 os 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, a vida útil do token é de 60 minutos para todos os SDKs; no entanto, os desenvolvedores podem alterá-la 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 duração do token de 1200 segundos (20 minutos) e renovação definida para ocorrer em 90% da duração. 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 um tempo de vida útil de token de 300 segundos (5 minutos) e 85% de renovação de tempo de vida padrão. 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 um tempo de vida de token de 300 segundos (5 minutos) e renovação do token definida para ocorrer em 3 minutos. As desconexões acontecem na renovação do token. Além disso, não há erros. Somente eventos informativos de conexão/desconexão 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ê deseja alterar a duração do token ou o comportamento de renovação para dispositivos, verifique se o dispositivo implementa uma configuração de gêmeo do dispositivo ou um método de dispositivo que permita essa alteração.

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