Supervisión de Azure IoT Hub

Si tiene aplicaciones y procesos empresariales críticos que dependen de recursos de Azure, querrá supervisar esos recursos para su disponibilidad, rendimiento y funcionamiento. En este artículo se describen los datos de supervisión generados por Azure IoT Hub y cómo puede usar las características de Azure Monitor para analizar y alertar sobre estos datos.

Información general de supervisión

En la página Información general de Azure Portal de cada centro de IoT se incluyen gráficos que proporcionan algunas métricas de uso, como el número de mensajes usados y el número de dispositivos conectados al centro de IoT.

Gráficos de métricas predeterminados en la página Información general del centro de IoT.

Un valor de recuento de mensajes correcto podría retrasarse en 1 minuto. Debido a la infraestructura de servicio de IoT Hub, a veces el valor puede oscilar entre valores superiores e inferiores al actualizarse. Este contador solo debería ser incorrecto en el caso de los valores acumulados durante el último minuto.

La información que se muestra en el panel Información general es útil, pero solo representa una pequeña cantidad de los datos de supervisión disponibles sobre un centro de IoT. Algunos datos de supervisión se recopilan de forma automática y están disponibles para su análisis en cuanto se crea el centro de IoT. Puede habilitar otros tipos de recopilación de datos con cierta configuración adicional.

¿Qué es Azure Monitor?

Azure IoT Hub supervisa los datos mediante Azure Monitor, un servicio de supervisión de pila completo. Azure Monitor puede supervisar los recursos de Azure y otros recursos locales o en la nube.

Comience leyendo el artículo Supervisión de recursos de Azure con Azure Monitor, en el que se describen los conceptos siguientes:

  • ¿Qué es Azure Monitor?
  • Datos de supervisión recopilados en Azure
  • Configuración de la recolección de datos
  • Métricas y registros
  • Herramientas estándar de Azure para el análisis y la información
  • Alertas desencadenadas al supervisar datos

Para obtener más información sobre las métricas y registros que crea Azure IoT Hub, consulte Referencia de supervisión de datos de Azure IoT Hub.

Importante

No se garantiza que los eventos que emite el servicio IoT Hub mediante registros de recursos de Azure Monitor sean confiables o estén ordenados. Algunos eventos podrían perderse o entregarse fuera del pedido. Los registros de recursos tampoco están diseñados para que tengan lugar en tiempo real y los eventos pueden tardar varios minutos en registrarse en el destino elegido.

El resto de este artículo se basa en el artículo Supervisión de recursos de Azure con Azure Monitor mediante la descripción de los datos específicos recopilados para Azure IoT Hub. Verá ejemplos para configurar la recopilación de datos y cómo analizar estos datos con las herramientas de Azure.

Recopilación y enrutamiento

Las métricas de la plataforma, el registro de actividad y los registros de recursos tienen especificaciones únicas de recopilación, almacenamiento y enrutamiento.

  • Las métricas de la plataforma y el registro de actividad se recopilan y almacenan de forma automática, pero se pueden enrutar a otras ubicaciones mediante una configuración de diagnóstico.

  • Los registros de recursos no se recopilan ni almacenan hasta que se crea una configuración de diagnóstico y se enrutan a una o varias ubicaciones.

  • Las métricas y los registros se pueden enrutar a varias ubicaciones, que incluyen:

    • El almacén de registros de Azure Monitor a través de un área de trabajo de Log Analytics asociada. Allí se pueden analizar mediante Log Analytics.
    • Azure Storage para el archivado y el análisis sin conexión.
    • Un punto de conexión de Event Hubs en el que pueden ser leídos por aplicaciones externas como, por ejemplo, herramientas de Administración de eventos e información de seguridad (SIEM) de terceros.

En Azure Portal, en el apartado Supervisión del centro de IoT, puede seleccionar Configuración de diagnóstico y después Agregar configuración de diagnóstico para crear la configuración de diagnóstico en el ámbito de los registros y las métricas de plataforma que emite el centro de IoT.

Captura de pantalla en la que se muestra cómo agregar una configuración de diagnóstico en el centro de IoT en Azure Portal.

En la captura de pantalla siguiente se muestra una configuración de diagnóstico para enrutar el tipo de registro de recursos Operaciones de conexión y todas las métricas de plataforma a un área de trabajo de Log Analytics.

Captura de pantalla del formulario Configuración de diagnóstico para supervisar un centro de IoT.

Para obtener más información sobre la creación de una configuración de diagnóstico mediante Azure Portal, la CLI o PowerShell, consulte Creación de una configuración de diagnóstico para recopilar registros y métricas de una plataforma en Azure. Cuando se crea una configuración de diagnóstico, se especifican las categorías de registros que se van a recopilar. Las categorías de Azure IoT Hub se enumeran en la sección Registros del recurso de Supervisión de la referencia a datos de Azure IoT Hub. Los eventos solo se emiten para los errores de algunas de las categorías.

Al enrutar métricas de la plataforma de IoT Hub a otras ubicaciones:

  • Estas métricas de plataforma no se pueden exportar mediante la configuración de diagnóstico: Dispositivos conectados y Dispositivos totales.

  • Las métricas multidimensionales, por ejemplo algunas métricas de enrutamiento, se exportan en la actualidad como métricas planas de una sola dimensión que se agregan a través de valores de dimensión. Para obtener más información, consulte Exportación de métricas de plataforma a otras ubicaciones.

Análisis de métricas

Puede analizar las métricas de Azure IoT Hub con métricas de otros servicios de Azure con el Explorador de métricas. Para obtener más información sobre esta herramienta, consulte Análisis de métricas con el explorador de métricas de Azure Monitor.

Para abrir el Explorador de métricas, vaya a Azure Portal, abra el centro de IoT y, a continuación, seleccione Métricas en Supervisión. De manera predeterminada, este explorador tiene como ámbito las métricas de plataforma que emite el centro de IoT.

Captura de pantalla que muestra la página del explorador de métricas de un centro de IoT.

Para obtener una lista de las métricas de plataforma recopiladas para Azure IoT Hub, vea Métricas en la referencia de supervisión de datos de Azure IoT Hub. Para obtener una lista de las métricas de plataforma recopiladas para todos los servicios de Azure, vea Métricas compatibles con Azure Monitor.

Para las métricas de plataforma de IoT Hub que se recopilan en unidades de recuento, es posible que algunas agregaciones no estén disponibles o se puedan usar. Para obtener más información, vea Agregaciones admitidas en la referencia de supervisión de datos de Azure IoT Hub.

Algunas métricas de IoT Hub, como las métricas de enrutamiento, son multidimensionales. Para estas métricas, puede aplicar filtros y divisiones en los gráficos en función de una dimensión.

Análisis de datos

Los datos de los registros de Azure Monitor se almacenan en tablas, cada una con un conjunto propio de propiedades únicas. Los datos de estas tablas están asociados a un área de trabajo de Log Analytics y se pueden consultar en Log Analytics. Para obtener más información sobre los registros de Azure Monitor, vea Información general sobre los registros Azure Monitor en la documentación de Azure Monitor.

Para enrutar los datos a registros de Azure Monitor, debe crear una configuración de diagnóstico para enviar los registros de recursos o las métricas de plataforma a un área de trabajo de Log Analytics. Para obtener más información, vea Recopilación y enrutamiento.

Para realizar el análisis de registros, vaya a Azure Portal, abra el centro de IoT y, a continuación, seleccione Registros en Supervisión. De manera predeterminada, estas consultas de Log Analytics tienen como ámbito los registros y las métricas recopilados en los registros de Azure Monitor para el centro de IoT.

Página de registros de un centro de IoT.

Para obtener una lista de las tablas que usan los registros de Azure Monitor y que Log Analytics puede consultar, vea Tablas de registros de Azure Monitor en la referencia de supervisión de datos de Azure IoT Hub.

Todos los registros de recursos de Azure Monitor tienen los mismos campos seguidos de campos específicos del servicio. El esquema común se describe en Esquema de registros de recursos de Azure Monitor. Puede encontrar el esquema y las categorías de registros de recursos recopilados para Azure IoT Hub en Registros de recursos en la referencia de supervisión de datos de Azure IoT Hub. Los eventos solo se emiten para los errores de algunas de las categorías.

El registro de actividad es un registro de plataforma de Azure que proporciona conclusiones sobre los eventos del nivel de suscripción. Puede verlo de forma independiente o enrutarlo a registros de Azure Monitor, donde puede realizar consultas más complejas mediante Log Analytics.

Al enrutar métricas de plataforma de IoT Hub a registros de Azure Monitor:

  • Las métricas de plataforma siguientes no se pueden exportar mediante la configuración de diagnóstico: Dispositivos conectados y Dispositivos totales.

  • Las métricas multidimensionales, por ejemplo algunas métricas de enrutamiento, se exportan en la actualidad como métricas planas de una sola dimensión que se agregan a través de valores de dimensión. Para obtener más información, vea Exportación de métricas de plataforma a otras ubicaciones.

Para obtener consultas comunes con IoT Hub, vea Consultas de Kusto de ejemplo. Para obtener más información sobre el uso de consultas de Log Analytics, vea Introducción a las consultas de registro en Azure Monitor.

Versión del SDK en registros de IoT Hub

Algunas operaciones en los registros de recursos de IoT Hub devuelven una propiedad sdkVersion en su objeto properties. En estas operaciones, cuando una aplicación de back-end o de dispositivo usa uno de los SDK de Azure IoT, esta propiedad contiene información sobre el SDK que se usa, la versión del SDK y la plataforma donde se ejecuta el SDK.

En los ejemplos siguientes se muestra la propiedad sdkVersion emitida para una operación deviceConnect mediante:

  • El SDK de dispositivo para Node.js: "azure-iot-device/1.17.1 (node v10.16.0; Windows_NT 10.0.18363; x64)"
  • El SDK de .NET (C#): ".NET/1.21.2 (.NET Framework 4.8.4200.0; Microsoft Windows 10.0.17763 WindowsProduct:0x00000004; X86)".

En la tabla siguiente muestra el nombre del SDK que se usa para los distintos SDK de Azure IoT:

Nombre del SDK en la propiedad sdkVersion Lenguaje
.NET .NET (C#)
microsoft.azure.devices SDK de servicio de .NET (C#)
microsoft.azure.devices.client SDK de dispositivo de .NET (C#)
iothubclient SDK de dispositivo de C o Python v1 (en desuso)
iothubserviceclient SDK de servicio de C o Python v1 (en desuso)
azure-iot-device-iothub-py SDK de dispositivo de Python
azure-iot-device SDK de dispositivo de Node.js
azure-iothub SDK de servicio de Node.js
com.microsoft.azure.iothub-java-client SDK de dispositivo de Java
com.microsoft.azure.iothub.service.sdk SDK de servicio de Java
com.microsoft.azure.sdk.iot.iot-device-client SDK de dispositivo de Java
com.microsoft.azure.sdk.iot.iot-service-client SDK de servicio de Java
C C insertado
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

Puede extraer la propiedad de la versión del SDK al realizar consultas en los registros de recursos de IoT Hub. Por ejemplo, la consulta siguiente extrae la propiedad de la versión del SDK (y el id. del dispositivo) de las propiedades devueltas por las operaciones de conexiones. Estas dos propiedades se escriben en los resultados junto con la hora de la operación y el id. de recurso del centro de IoT al que se conecta el dispositivo.

// SDK version of devices
// List of devices and their SDK versions that connect to 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)
| distinct DeviceId, SDKVersion, TimeGenerated, _ResourceId

Ejemplos de consultas de Kusto

Use las siguientes consultas de Kusto para supervisar el centro de IoT.

Importante

Al seleccionar Registros en el menú IoT Hub, se abre Log Analytics, que incluye datos únicamente del recurso de IoT Hub. Si quiere ejecutar una consulta que incluya datos de otros centros de IoT o de otros servicios de Azure, seleccione Registros en el menú Azure Monitor. Para obtener más información, consulte Ámbito e intervalo de tiempo de una consulta de registro en Log Analytics de Azure Monitor.

  • Errores de conectividad: se identifican los errores de conexión del dispositivo.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Errores de limitación: se identifican los dispositivos que han realizado la mayoría de las solicitudes que han provocado errores de limitación.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where ResultType == "429001"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | summarize count() by DeviceId, Category, _ResourceId
    | order by count_ desc
    
  • Puntos de conexión inactivos: se identifican los puntos de conexión inactivos o incorrectos en función de cuántas veces se ha notificado el problema, así como el motivo.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Routes" and OperationName in ("endpointDead", "endpointUnhealthy")
    | extend parsed_json = parse_json(properties_s)
    | extend Endpoint = tostring(parsed_json.endpointName), Reason = tostring(parsed_json.details) 
    | summarize count() by Endpoint, OperationName, Reason, _ResourceId
    | order by count_ desc
    
  • Resumen de errores: recuento de los errores en todas las operaciones por tipo.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Dispositivos conectados recientemente: lista de los dispositivos que IoT Hub ha visto conectarse en el período de tiempo especificado.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and OperationName == "deviceConnect"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | summarize max(TimeGenerated) by DeviceId, _ResourceId
    
  • Eventos de conexión para un dispositivo específico: todos los eventos de conexión registrados para un dispositivo específico (dispositivo de prueba).

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • Versión del SDK de los dispositivos: lista de dispositivos y sus versiones de SDK para conexiones de dispositivos u operaciones gemelas de dispositivo en la nube.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" or Category == "D2CTwinOperations"
    | extend parsed_json = parse_json(properties_s)
    | extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId)
    | distinct DeviceId, SDKVersion, TimeGenerated, _ResourceId
    

Lectura de registros de Azure Event Hubs

Una vez configurados los registros mediante la configuración de diagnóstico, puede crear aplicaciones que lean los registros, a fin de poder actuar en función de la información que contienen. El código de ejemplo siguiente recupera los registros de un centro de eventos.

class Program
{ 
    static string connectionString = "{your AMS eventhub endpoint connection string}";
    static string monitoringEndpointName = "{your AMS event hub endpoint name}";
    static EventHubClient eventHubClient;
    //This is the Diagnostic Settings schema
    class AzureMonitorDiagnosticLog
    {
        string time { get; set; }
        string resourceId { get; set; }
        string operationName { get; set; }
        string category { get; set; }
        string level { get; set; }
        string resultType { get; set; }
        string resultDescription { get; set; }
        string durationMs { get; set; }
        string callerIpAddress { get; set; }
        string correlationId { get; set; }
        string identity { get; set; }
        string location { get; set; }
        Dictionary<string, string> properties { get; set; }
    };

    static void Main(string[] args)
    {
        Console.WriteLine("Monitoring. Press Enter key to exit.\n");
        eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, monitoringEndpointName);
        var d2cPartitions = eventHubClient.GetRuntimeInformationAsync().PartitionIds;
        CancellationTokenSource cts = new CancellationTokenSource();
        var tasks = new List<Task>();
        foreach (string partition in d2cPartitions)
        {
            tasks.Add(ReceiveMessagesFromDeviceAsync(partition, cts.Token));
        }
        Console.ReadLine();
        Console.WriteLine("Exiting...");
        cts.Cancel();
        Task.WaitAll(tasks.ToArray());
    }

    private static async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
    {
        var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow);
        while (true)
        {
            if (ct.IsCancellationRequested)
            {
                await eventHubReceiver.CloseAsync();
                break;
            }
            EventData eventData = await eventHubReceiver.ReceiveAsync(new TimeSpan(0,0,10));
            if (eventData != null)
            {
                string data = Encoding.UTF8.GetString(eventData.GetBytes());
                Console.WriteLine("Message received. Partition: {0} Data: '{1}'", partition, data);
                var deserializer = new JavaScriptSerializer();
                //deserialize json data to azure monitor object
                AzureMonitorDiagnosticLog message = new JavaScriptSerializer().Deserialize<AzureMonitorDiagnosticLog>(result);
            }
        }
    }
}

Alertas

Las alertas de Azure Monitor le informan de forma proactiva cuando se detectan condiciones importantes en los datos que se supervisan. Permiten identificar y solucionar las incidencias en el sistema antes de que los clientes puedan verlos. Puede establecer alertas en métricas, registros y el registro de actividad. Cada tipo de alerta tiene sus ventajas y desventajas.

Al crear una regla de alertas basada en métricas de plataforma (recopiladas en unidades de recuento), puede que algunas agregaciones no estén disponibles o no se puedan usar. Para obtener más información, vea Agregaciones admitidas en la Referencia de supervisión de datos de Azure IoT Hub.

Supervisión de las desconexiones por dispositivo con Event Grid

Azure Monitor proporciona una métrica, Dispositivos conectados, que puede usar para supervisar el número de dispositivos conectados a IoT Hub. Esta métrica desencadena una alerta cuando el número de dispositivos conectados cae por debajo de un valor de umbral. Azure Monitor también emite eventos en la categoría de conexiones que puede usar para supervisar las conexiones, las desconexiones y los errores de conexión del dispositivo. Si bien estos eventos pueden ser suficientes para algunos escenarios, Azure 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.

Con Event Grid, puede suscribirse a los eventos DeviceConnected y DeviceDisconnected de IoT Hub para desencadenar alertas y supervisar el estado de conexión del dispositivo. Event Grid proporciona una latencia de eventos mucho menor que la de Azure Monitor, por lo que puede supervisar por dispositivo, en lugar de supervisar para todos los dispositivos conectados. Estos factores hacen de Event Grid el método preferido para supervisar las conexiones de los dispositivos críticos y la infraestructura. Se recomienda encarecidamente usar Event Grid para supervisar las conexiones de dispositivos en entornos de producción.

Para obtener más información sobre la supervisión de la conectividad de dispositivos con Event Grid y Azure Monitor, consulte Supervisión, diagnóstico y solución de problemas de conectividad de dispositivos con Azure IoT Hub.

Pasos siguientes