Partilhar via


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:

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.

  1. Navegue até seu hub IoT no portal do Azure.

  2. Em Monitoramento , no painel esquerdo do hub IoT, selecione Logs.

  3. 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")
    
  4. Se houver resultados, procure OperationName, ResultType (código de erro) e ResultDescription (mensagem de erro) para obter mais detalhes.

    Exemplo de registo de erros

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:

Captura de ecrã do evento deviceConnect nos registos.

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:

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

  • 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:

    Comportamento de erro para renovação de token sobre MQTT no Azure Monitor Logs com Java SDK.

  • 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:

    Comportamento de erro para renovação de token sobre MQTT em Logs do Azure Monitor com SDK de Nó.

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:

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.