Supervisión, diagnóstico y solución de problemas de conectividad de dispositivos con Azure IoT Hub

Los problemas de conectividad de los dispositivos IoT pueden ser difíciles de solucionar porque existen varios puntos de error posibles. La lógica de aplicación, las redes físicas, los protocolos, el hardware, IoT Hub y otros servicio en la nube pueden causar problemas. La capacidad de detectar e identificar el origen de un problema es fundamental. Sin embargo, una solución de IoT a gran escala puede tener miles de dispositivos, por lo que no es práctico comprobar manualmente cada dispositivo. IoT Hub se integra con dos servicios de Azure para ayudarle:

  • Azure Monitor Azure Monitor permite recopilar, analizar y actuar sobre los datos de telemetría de IoT Hub. Para que le sea más fácil detectar, diagnosticar y solucionar estos problemas a gran escala, use las funcionalidades de supervisión que IoT Hub proporciona mediante Azure Monitor. Esto incluye la configuración de alertas para desencadenar notificaciones y acciones cuando se producen desconexiones y la configuración de los registros, que puede usar para detectar las condiciones que provocaron las desconexiones.

  • Azure Event Grid Para la infraestructura crítica y las desconexiones por dispositivo, use Azure Event Grid para suscribirse a los eventos de conexión y desconexión de dispositivos emitidos por IoT Hub. Azure Event Grid permite usar cualquiera de los siguientes controladores de eventos:

    • Azure Functions
    • Logic Apps
    • Azure Automation
    • WebHooks
    • Queue Storage
    • conexiones híbridas
    • Event Hubs

Event Grid frente a Azure Monitor

Event Grid proporciona una solución de supervisión por dispositivo de baja latencia que puede usar para realizar un seguimiento de las conexiones de los dispositivos para la infraestructura y los dispositivos críticos. Azure Monitor proporciona una métrica denominada Dispositivos conectados, que puede usar para supervisar el número de dispositivos conectados a IoT Hub y desencadenar una alerta cuando ese número caiga por debajo de un umbral estático.

Tenga en cuenta lo siguiente a la hora de decidir si usar Event Grid o Azure Monitor para un escenario determinado:

  • Latencia de las alertas: los eventos de conexión de IoT Hub se entregan mucho más rápidamente mediante Event Grid. Esto hace que Event Grid sea mejor opción para los escenarios en los que es deseable una notificación rápida.

  • Notificaciones por dispositivo: Event Grid proporciona la capacidad de realizar un seguimiento de las conexiones y desconexiones para dispositivos individuales. Esto hace que Event Grid sea mejor opción para los escenarios en los que es necesario supervisar las conexiones de los dispositivos críticos.

  • Configuración ligera: las alertas de métricas de Azure Monitor proporcionan una experiencia de configuración ligera que no requiere la integración con otros servicios para ofrecer notificaciones por correo electrónico, SMS, voz y otras notificaciones. Con Event Grid, debe realizar una integración con otros servicios de Azure para entregar notificaciones. Ambos servicios se pueden integrar con otros servicios para desencadenar acciones más complejas.

Event Grid: supervisión de los eventos de conexión y desconexión

Para supervisar los eventos de conexión y desconexión en producción, se recomienda suscribirse a los eventos DeviceConnected y DeviceDisconnected en Event Grid para desencadenar alertas y supervisar el estado de conexión de los dispositivos. Event Grid proporciona una latencia de eventos menor que Azure Monitor y se puede supervisar dispositivo a dispositivo. Estos factores hacen de Event Grid el método preferido para supervisar la infraestructura y los dispositivos críticos.

Al usar Event Grid para supervisar o desencadenar alertas en las desconexiones de dispositivos, asegúrese de que crea una manera de filtrar las desconexiones periódicas debido a la renovación de tokens de SAS en los dispositivos que usan los SDK de Azure IoT. Para más información, consulte Comportamiento de desconexión de los dispositivos MQTT con los SDK de Azure IoT.

Explore los artículos siguientes para obtener más información sobre la supervisión de eventos de conexión de los dispositivos con Event Grid:

Azure Monitor: enrutamiento de los eventos de conexión a los registros

IoT Hub emite continuamente registros de recursos para varias categorías de operaciones. Sin embargo, para recopilar estos datos de registro debe crear una configuración de diagnóstico para enrutarla a un destino en el que se puedan analizar o archivar. Uno de estos destinos son los registros de Azure Monitor mediante un área de trabajo de Log Analytics (consulte los precios), donde puede analizar los datos mediante consultas de Kusto.

La categoría conexiones de registros de recursos de IoT Hub emite operaciones y errores relacionados con las conexiones de los dispositivos. En la captura de pantalla siguiente se muestra una configuración de diagnóstico para enrutar estos registros a un área de trabajo de Log Analytics:

Configuración recomendada para enviar los registros de conectividad al área de trabajo de Log Analytics.

Se recomienda crear una configuración de diagnóstico tan pronto como sea posible después de crear la instancia de IoT Hub, porque, aunque IoT Hub siempre emite registros de recursos, Azure Monitor no los recopila hasta que se enrutan a un destino.

Para más información sobre el enrutamiento de los registros a un destino, consulte Recopilación y enrutamiento. Para obtener instrucciones detalladas para crear una configuración de diagnóstico, consulte Tutorial: Configuración y uso de métricas y registros de diagnóstico con una instancia de IoT Hub.

Azure Monitor: configuración de alertas de métricas para la desconexión de dispositivos

Puede configurar alertas basadas en las métricas de la plataforma emitidas por IoT Hub. Con las alertas de métricas, puede notificar a los usuarios que se ha producido una condición de interés y también desencadenar acciones que pueden responder a esa condición automáticamente.

La métrica Dispositivos conectados (versión preliminar) indica cuántos dispositivos están conectados a IoT Hub. Puede crear alertas que se desencadenarán si esta métrica cae por debajo de un valor de umbral:

Configuración de la lógica de alertas para la métrica de dispositivos conectados.

Puede usar reglas de alertas de métricas para supervisar las anomalías de desconexión de los dispositivo a gran escala. Es decir, use alertas para determinar cuando se desconecta inesperadamente un número significativo de dispositivos. Cuando se detecta, puede examinar los registros para ayudar a solucionar el problema. Sin embargo, para supervisar las desconexiones por dispositivo y las desconexiones de dispositivos críticos casi en tiempo real, debe usar Event Grid.

Para más información sobre las alertas con IoT Hub, consulte la sección Alertas de Supervisión de Azure IoT Hub. Para ver un tutorial sobre la creación de alertas en IoT Hub, consulte Tutorial: Configuración y uso de métricas y registros de diagnóstico con una instancia de IoT Hub. Para obtener información general más detallada sobre las alertas, consulte Información general sobre las alertas en Microsoft Azure en la documentación de Azure Monitor.

Azure Monitor: uso de los registros para resolver errores de conectividad

Cuando se detectan desconexiones de dispositivos mediante alertas de métricas de Azure Monitor o Event Grid, puede usar los registros para ayudar a solucionar el motivo. En esta sección se describe cómo buscar problemas comunes en los registros de Azure Monitor. En los pasos siguientes se supone que ya ha creado una configuración de diagnóstico para enviar los registros de conexiones de IoT Hub a un área de trabajo de Log Analytics.

Después de crear una configuración de diagnóstico para enrutar los registros de recursos de IoT Hub a los registros de Azure Monitor, siga estos pasos para ver los registros en Azure Portal.

  1. Vaya al centro de IoT en Azure Portal.

  2. En Supervisión, en el panel izquierdo del centro de IoT, seleccione Registros.

  3. Para aislar los registros de errores de conectividad de IoT Hub, escriba la consulta siguiente en el editor de consultas y, a continuación, seleccione Ejecutar:

    AzureDiagnostics
    | where ( ResourceType == "IOTHUBS" and Category == "Connections" and Level == "Error")
    
  4. Si hay resultados, busque OperationName, ResultType (código de error) y ResultDescription (mensaje de error) para obtener más detalles.

    Ejemplo de registro de errores

Use las siguientes guías de resolución de problemas para lograr ayuda con los errores más comunes:

Azure Monitor: Uso de registros para supervisar la conectividad de un dispositivo concreto

Puede haber situaciones en las que desee usar Azure Monitor para ver tanto la información sobre la conectividad de un dispositivo como sus errores de conectividad. Para aislar los eventos de conectividad de un dispositivo, puede seguir los mismos pasos que en la sección anterior, pero escriba la siguiente consulta. Reemplace test-device por el nombre del dispositivo.

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend DeviceId = tostring(parse_json(properties_s).deviceId)
| where DeviceId == "test-device"

La consulta devuelve eventos informativos y de error para el dispositivo de destino. En la salida de ejemplo siguiente se muestra un evento deviceConnect informativo:

Captura de pantalla del evento deviceConnect en los registros.

Comportamiento de desconexión de los dispositivos MQTT con los SDK de Azure IoT

Los SDK de dispositivo IoT de Azure se desconectan de IoT Hub y luego se vuelven a conectar cuando renuevan los tokens de SAS mediante el protocolo MQTT (y MQTT sobre WebSockets). En los registros, esto se muestra como eventos informativos de conexión y desconexión de dispositivos, a veces acompañados por eventos de error.

De forma predeterminada, la duración del token es de 60 minutos para todos los SDK; sin embargo, los desarrolladores pueden cambiarla en algunos de los SDK. En la tabla siguiente se resume la duración de los tokens, la renovación de tokens y el comportamiento de renovación de tokens para cada uno de los SDK:

SDK Duración del token Renovación del token Comportamiento de renovación
.NET 60 minutos, configurable 85 % de la duración, configurable El SDK se desconecta y se vuelve a conectar cuando se agota la duración del token, más un período de gracia de 10 minutos. Se generan eventos informativos y errores en los registros.
Java 60 minutos, configurable 85 % de la duración, no configurable El SDK se desconecta y se vuelve a conectar cuando se agota la duración del token, más un período de gracia de 10 minutos. Se generan eventos informativos y errores en los registros.
Node.js 60 minutos, configurable Configurable El SDK se desconecta y vuelve a conectar al renovar el token. Solo se generan eventos informativos en los registros.
Python 60 minutos, configurable 120 segundos antes de la expiración El SDK se desconecta y vuelve a conectar en la duración del token.

Las capturas de pantallas siguientes muestran el comportamiento de renovación de tokens en los registros de Azure Monitor para los diferentes SDK. La duración del token y el umbral de renovación se han cambiado con respecto a sus valores predeterminados, tal como se indicó.

  • SDK de dispositivo para .NET con un tiempo de duración del token de 1200 segundos (20 minutos) y la renovación establecida para que se produzca en el 90 % de la duración. Las desconexiones se producen cada 30 minutos:

    Comportamiento de error para la renovación de tokens sobre MQTT en los registros de Azure Monitor con el SDK para .NET.

  • SDK para Java con un tiempo de duración del token de 300 segundos (5 minutos) y la renovación establecida para que se produzca en el 85 % de la duración. Las desconexiones se producen cada 15 minutos:

    Comportamiento de error para la renovación de tokens sobre MQTT en los registros de Azure Monitor con el SDK para Java.

  • SDK para Node con un tiempo de duración del token de 300 segundos (5 minutos) y la renovación del token establecida para que se produzca a los 3 minutos. Las desconexiones se producen al renovar el token. Además, no hay ningún error, solo se emiten eventos informativos de conexión y desconexión:

    Comportamiento de error para la renovación de tokens sobre MQTT en los registros de Azure Monitor con el SDK para Node.

Se ha utilizado la consulta siguiente para recopilar los resultados. La consulta extrae el nombre y la versión del SDK del contenedor de propiedades. Para más información, consulte Versión del SDK en los registros de IoT Hub.

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 desarrollador u operador de soluciones IoT, debe tener en cuenta este comportamiento con el fin de interpretar los eventos de conexión y desconexión y los errores relacionados en los registros. Si desea cambiar la duración del token o el comportamiento de renovación de los dispositivos, compruebe si el dispositivo implementa una configuración de dispositivo gemelo o un método de dispositivo que lo haga posible.

Si va a supervisar conexiones de dispositivos con Event Hubs, asegúrese de que crea una forma de filtrar las desconexiones periódicas debido a la renovación de tokens de SAS. Por ejemplo, no desencadene acciones basadas en desconexiones, siempre que al evento de desconexión lo siga un evento de conexión dentro de un intervalo de tiempo determinado.

Nota:

IoT Hub solo admite una conexión MQTT activa por dispositivo. Todas las conexiones MQTT nuevas en nombre del mismo identificador de dispositivo provocarán que IoT Hub cierre la existente.

Se registrará el error 400027 ConnectionForcefullyClosedOnNewConnection en los registros de IoT Hub.

He intentado estos pasos, pero no funcionan

Si los pasos anteriores no le son de utilidad, intente lo siguiente:

Pasos siguientes