Surveillance d’Azure IoT Hub

Lorsque vous avez des applications critiques et des processus métier basés sur des ressources Azure, vous voulez superviser ces ressources pour connaître leur disponibilité, leurs performances et leur fonctionnement. Cet article décrit les données de supervision générées par Azure IoT Hub et comment vous pouvez utiliser les fonctionnalités d’Azure Monitor pour analyser ces données et créer des alertes.

Présentation de Monitor

La page Vue d’ensemble sur le portail Azure pour chaque hub IoT inclut des graphiques qui fournissent des métriques d’utilisation, telles que le nombre de messages utilisés et le nombre d’appareils connectés au hub IoT.

Graphiques des métriques par défaut sur la page récapitulative du hub IoT.

Une valeur de nombre de messages correcte peut être retardée de 1 minute. En raison de l'infrastructure de service IoT Hub, la valeur peut parfois osciller entre des valeurs supérieures et inférieures lors de l'actualisation. Ce compteur ne doit être incorrect que pour les valeurs accumulées au cours de la dernière minute.

Les informations présentées dans le volet Vue d’ensemble sont utiles, mais elles ne constituent qu’une petite quantité des données de supervision disponibles pour un hub IoT. Certaines données de surveillance sont collectées automatiquement et peuvent être analysées dès que vous créez le hub IoT. Vous pouvez activer d’autres types de collecte de données avec une certaine configuration.

Qu’est-ce qu’Azure Monitor ?

Azure IoT Hub surveille les données à l’aide d’Azure Monitor, un service de supervision de pile complet. Azure Monitor peut surveiller vos ressources Azure et d’autres ressources cloud ou locales.

Commencez avec l’article Supervision de ressources Azure avec Azure Monitor, qui décrit les concepts suivants :

  • Qu’est-ce qu’Azure Monitor ?
  • Analyse des données collectées dans Azure
  • Configuration de la collecte des données
  • Métriques et journaux
  • Outils standard dans Azure pour l’analyse et les insights
  • Alertes déclenchées lors de la surveillance des données

Pour obtenir des informations détaillées sur les métriques et les journaux créés par Azure IoT Hub, consultez Informations de référence sur les données de supervision d’Azure IoT Hub.

Important

Ni la fiabilité ni l’ordre des événements émis par le service IoT Hub à l’aide des journaux de ressources Azure Monitor ne sont garantis. Certains événements peuvent être perdus ou remis de manière désordonnée. Les journaux de ressources ne sont pas censés être en temps réel, et l’enregistrement des événements dans la destination de votre choix peut prendre plusieurs minutes.

Le reste de cet article s’appuie sur l’article Surveillance des ressources Azure avec Azure Monitor en décrivant les données spécifiques collectées pour Azure IoT Hub. Vous verrez des exemples de configuration de votre collecte de données et de la façon d’analyser ces données avec les outils Azure.

Collecte et routage

Les métriques de plateforme, le journal d’activité et les journaux de ressources ont des spécifications de collecte, de stockage et de routage uniques.

  • Les métriques de plateforme et le journal d’activité sont collectés et stockés automatiquement, mais ils peuvent être acheminés vers d’autres emplacements à l’aide d’un paramètre de diagnostic.

  • Les journaux de ressources ne sont pas collectés ni stockés tant que vous n’avez pas créé un paramètre de diagnostic et que vous ne les acheminez pas vers un ou plusieurs emplacements.

  • Les métriques et les journaux peuvent être acheminés vers plusieurs emplacements, notamment :

    • Le magasin Journaux Azure Monitor via un espace de travail Log Analytics associé. Ils peuvent y être analysés à l’aide de Log Analytics.
    • Stockage Azure pour l’archivage et l’analyse hors connexion
    • Un point de terminaison Event Hubs dans lequel ils peuvent être lus par des applications externes, par exemple des outils SIEM (Security Information and Event Management).

Sur le portail Azure depuis votre hub IoT sous Surveillance, vous pouvez sélectionner Paramètres de diagnostic suivi par Ajouter un paramètre de diagnostic pour créer des paramètres de diagnostic étendus aux métriques de journaux et de plateforme émises par votre hub IoT.

Capture d’écran montrant comment ajouter un paramètre de diagnostic dans votre hub IoT dans le portail Azure.

La capture d’écran suivante montre un paramètre de diagnostic pour le routage du type de journal de ressources Opérations de connexion et de toutes les métriques de plateforme vers un espace de travail Log Analytics.

Capture d’écran du formulaire Paramètres de diagnostic pour la surveillance d’un hub IoT.

Pour plus d’informations sur la création d’un paramètre de diagnostic à l’aide du portail Azure, de l’interface CLI ou de PowerShell, consultez Créer un paramètre de diagnostic pour collecter des journaux et métriques de plateforme dans Azure. Lorsque vous créez un paramètre de diagnostic, vous spécifiez les catégories de journaux à collecter. Les catégories pour Azure IoT Hub sont répertoriées sous Journaux des ressources dans les informations de référence des données de surveillance d’Azure IoT Hub. Des événements sont émis uniquement pour les erreurs de certaines catégories.

Lors du routage de la plateforme IoT Hub vers d’autres emplacements :

  • Ces métriques de plateforme ne sont pas exportables via les paramètres de diagnostic : Appareils connectés et Nombre total d’appareils.

  • Les métriques multidimensionnelles, par exemple certaines métriques de routage, sont actuellement exportées sous forme de métriques unidimensionnelles aplaties agrégées entre les valeurs de dimension. Pour plus d’informations, consultez Exportation des métriques de plateforme vers d’autres emplacements.

Analyse des métriques

Vous pouvez analyser les métriques pour Azure IoT Hub avec des métriques issues d’autres services Azure à l’aide de Metrics Explorer. Pour obtenir plus d’informations sur cet outil, consultez Analyser les métriques avec l’Explorateur de métriques Azure Monitor.

Pour ouvrir Metrics Explorer, accédez au portail Azure et ouvrez votre Hub IoT, puis sélectionnez Métriques sous Supervision. Cet explorateur est étendu, par défaut, aux métriques de plateforme émises par votre hub IoT.

Capture d’écran montrant la page Metrics Explorer pour un hub IoT.

Pour obtenir la liste des métriques de plateforme collectées pour Azure IoT Hub, consultez Métriques dans les informations de référence des données de surveillance Azure IoT Hub. Pour obtenir la liste des métriques de plateforme collectées pour tous les services Azure, consultez Métriques prises en charge avec Azure Monitor.

Pour les métriques de la plateforme IoT Hub qui sont collectées à l’unité, certaines agrégations peuvent ne pas être disponibles ou utilisables. Pour plus d’informations, consultez Agrégations prises en charge dans les informations de référence des données de surveillance Azure IoT Hub.

Certaines mesures IoT Hub, comme les métriques de routage, sont multidimensionnelles. Pour ces métriques, vous pouvez appliquer des filtres et un fractionnement sur vos graphiques en fonction d’une dimension.

Analyse des journaux d’activité

Les données des journaux Azure Monitor sont stockées dans des tables, chacune ayant son propre ensemble de propriétés uniques. Les données de ces tables sont associées à un espace de travail Log Analytics et peuvent être interrogées dans Log Analytics. Pour en savoir plus sur Azure Monitor Logs, consultez Vue d’ensemble d’Azure Monitor Logs dans la documentation Azure Monitor.

Pour router des données vers Azure Monitor Logs, vous devez créer un paramètre de diagnostic pour envoyer les journaux de ressources ou les métriques de plateforme à un espace de travail Log Analytics. Pour plus d’informations, consultez Collecte et routage.

Pour effectuer Log Analytics, accédez au portail Azure et ouvrez votre hub IoT, puis sélectionnez Journaux sous Surveillance. Ces requêtes Log Analytics sont étendues, par défaut, aux journaux et métriques collectés dans les journaux Azure Monitor pour votre hub IoT.

Page des journaux pour un hub IoT.

Pour obtenir la liste des tables utilisées par Azure Monitor Logs et interrogeables par Log Analytics, consultez Tableaux Azure Monitor Logs dans les informations de référence des données de surveillance Azure IoT Hub.

Tous les journaux de ressources dans Azure Monitor ont les mêmes champs suivis de champs spécifiques au service. Le schéma commun est décrit dans Schéma des journaux des ressources Azure Monitor. Vous pouvez trouver le schéma et les catégories de journaux de ressources collectés pour Azure IoT Hub dans Journaux des ressources dans les informations de référence des données de surveillance Azure IoT Hub. Des événements sont émis uniquement pour les erreurs de certaines catégories.

Le journal d’activité est un journal de plateforme dans Azure qui fournit des insights sur les événements de niveau abonnement. Vous pouvez l’afficher indépendamment ou le router vers Azure Monitor Logs, où vous pouvez effectuer des requêtes plus complexes à l’aide de Log Analytics.

Lors du routage de la plateforme IoT Hub vers Azure Monitor Logs :

  • Les métriques de plateforme suivants ne sont pas exportables via les paramètres de diagnostic : Appareils connectés et Nombre total d’appareils.

  • Les métriques multidimensionnelles, par exemple certaines métriques de routage, sont actuellement exportées sous forme de métriques unidimensionnelles aplaties agrégées entre les valeurs de dimension. Pour plus d’informations, consultez Exportation des métriques de plateforme vers d’autres emplacements.

Pour des requêtes courantes avec IoT Hub, consultez Exemples de requêtes Kusto. Pour des informations détaillées sur les requêtes Log Analytics, consultez Vue d’ensemble des requêtes de journal dans Azure Monitor.

Version du kit de développement logiciel dans les journaux IoT Hub

Certaines opérations dans les journaux de ressources IoT Hub retournent une propriété sdkVersion dans leur objet properties. Pour ces opérations, quand une application d’appareil ou back-end utilise l’un des kits SDK Azure IoT, cette propriété contient des informations sur le kit SDK utilisé, sa version et la plateforme sur laquelle il s’exécute.

Les exemples suivants montrent la propriété sdkVersion émise pour une opération deviceConnect à l’aide de :

  • Le kit SDK d’appareil Node.js : "azure-iot-device/1.17.1 (node v10.16.0; Windows_NT 10.0.18363; x64)"
  • Le kit SDK .NET (C#) : ".NET/1.21.2 (.NET Framework 4.8.4200.0; Microsoft Windows 10.0.17763 WindowsProduct:0x00000004; X86)".

Le tableau suivant indique le nom du kit SDK utilisé pour différents kits SDK Azure IoT :

Nom du kit SDK dans la propriété sdkVersion Langage
.NET .NET (C#)
microsoft.azure.devices Kit SDK de service .NET (C#)
microsoft.azure.devices.client Kit SDK d’appareil .NET (C#)
iothubclient Kit SDK d’appareil C ou Python v1 (obsolète)
iothubserviceclient Kit SDK de service C ou Python v1 (obsolète)
azure-iot-device-iothub-py Kit SDK d’appareil Python
azure-iot-device Kit SDK d’appareil Node.js
azure-iothub Kit SDK de service Node.js
com.microsoft.azure.iothub-java-client Kit SDK d’appareil Java
com.microsoft.azure.iothub.service.sdk Kit SDK de service Java
com.microsoft.azure.sdk.iot.iot-device-client Kit SDK d’appareil Java
com.microsoft.azure.sdk.iot.iot-service-client Kit SDK de service Java
C Embedded C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

Vous pouvez extraire la propriété de version du kit SDK lorsque vous exécutez des requêtes sur des journaux de ressources IoT Hub. À titre d’exemple, la requête suivante extrait la propriété de version du kit SDK (et l’ID de l’appareil) à partir des propriétés retournées par les opérations de connexion. Ces deux propriétés sont écrites dans les résultats avec l’heure de l’opération et l’ID de ressource du hub IoT auquel l’appareil se connecte.

// 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

Exemples de requêtes Kusto

Utilisez les requêtes Kusto suivantes pour vous aider à surveiller votre hub IoT.

Important

La sélection des journaux dans le menu Hub IoT ouvre Log Analytics et inclut uniquement les données de votre ressource IoT Hub. Pour les requêtes incluant des données d’autres hubs IoT ou services Azure, sélectionnez Journaux dans le menu Azure Monitor. Pour plus d’informations, consultez Étendue de requête de journal et intervalle de temps dans la fonctionnalité Log Analytics d’Azure Monitor.

  • Erreurs de connectivité : Identifiez les erreurs de connexion des appareils.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • Erreurs de limitation : Identifiez les appareils qui ont effectué le plus de requêtes et engendré des erreurs de limitation.

    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
    
  • Points de terminaison inactifs : Identifiez les points de terminaison inactifs ou non sains en fonction du nombre de fois où le problème a été signalé, ainsi que de la raison de celui-ci.

    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
    
  • Récapitulatif des erreurs : Nombre d’erreurs sur l’ensemble des opérations par type.

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • Appareils récemment connectés : Liste des appareils que IoT Hub a détectés comme connectés au cours de la période spécifiée.

    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
    
  • Événements de connexion pour un appareil spécifique : tous les événements de connexion journalisés pour un appareil spécifique (test-device).

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • Version du kit SDK des appareils : Liste des appareils et leurs versions de kit de développement logiciel (SDK) pour les connexions d’appareils ou les opérations jumelles de l’appareil vers le cloud.

    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
    

Lecture de journaux d’activité à partir d’Azure Event Hubs

Après avoir configuré la journalisation des événements via les paramètres de diagnostic, vous pouvez créer des applications qui lisent les journaux d’activité, pour vous permettre d’agir en fonction des informations qu’ils contiennent. L’exemple de code suivant extrait les journaux d’activité à partir d’un concentrateur d’événements.

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);
            }
        }
    }
}

Alertes

Azure Monitor vous avertit de façon proactive lorsque des conditions significatives sont détectées dans vos données de surveillance. Elles permettent d’identifier et de résoudre les problèmes affectant votre système avant que vos clients ne les remarquent. Vous pouvez définir des alertes sur des métriques, sur des journaux et sur le journal d’activité. Les différents types d’alertes présentent des avantages et des inconvénients.

Lorsque vous créez une règle d'alerte basée sur des métriques de la plateforme (collectées à l’unité), certaines agrégations peuvent ne pas être disponibles ou utilisables. Pour plus d’informations, consultez Agrégations prises en charge dans les informations de référence des données de surveillance Azure IoT Hub.

Superviser les déconnexions par appareil avec Event Grid

Azure Monitor propose une métrique, Appareils connectés, que vous pouvez utiliser pour superviser le nombre d’appareils connectés à votre hub IoT. Cette métrique déclenche une alerte dès que ce nombre descend en dessous d’une valeur seuil. Azure Monitor émet également des événements dans la catégorie connexions que vous pouvez utiliser pour surveiller les connexions, les déconnexions et les erreurs de connexion des appareils. Même si ces événements peuvent suffire pour certains scénarios, Azure Event Grid offre une solution de supervision par appareil à faible latence qui vous permet de suivre les connexions pour les appareils critiques et l’infrastructure.

Avec Event Grid, vous pouvez vous abonner aux événements IoT Hub DeviceConnected et DeviceDisconnected pour déclencher des alertes et superviser l’état de connexion des appareils. Event Grid offre une latence bien moindre à celle d’Azure Monitor, et vous pouvez assurer une supervision par appareil et non sur tous les appareils connectés. Ces aspects font d’Event Grid la méthode recommandée pour la supervision des connexions des appareils critiques et de l’infrastructure. Nous vous recommandons vivement d’utiliser Event Grid pour superviser les connexions d’appareils dans les environnements de production.

Pour plus d’informations sur la supervision de la connectivité des appareils avec Event Grid et Azure Monitor, consultez Analyser et résoudre les problèmes de connectivité des appareils avec Azure IoT Hub.

Étapes suivantes