Exporter des données d’IoT vers le stockage Blob

Cet article explique comment configurer l’exportation de données pour envoyer des données vers le service de Stockage Blob.

Utilisez cette fonctionnalité pour une exportation continue des données IoT filtrées et enrichies à partir de votre application IoT Central. La fonctionnalité d'exportation de données envoie (push) les modifications en quasi-temps réel vers d'autres parties de votre solution cloud pour vous fournir des insights, des analyses et un stockage à chaud.

Par exemple, vous pouvez :

  • Exportez en continu des données de télémétrie, de modifications des propriétés, de connectivité des appareils, de cycle de vie des appareils, de cycle de vie de modèle d’appareil et de journal d’audit au format JSON en quasi-temps réel.
  • filtrer les flux de données pour exporter des données qui remplissent des conditions personnalisées ;
  • enrichir les flux de données avec des valeurs personnalisées et des valeurs de propriété à partir de l'appareil ;
  • Transformer les flux de données pour modifier leur forme et leur contenu.

Conseil

Quand vous activez l’exportation de données, vous obtenez seulement les données à partir de ce moment. Pour conserver un historique des données plus étendu, activez l’exportation de données au plus tôt. Pour exporter manuellement des données générées lorsque l’exportation des données était désactivée, consultez Comment utiliser l’API REST IoT Central pour interroger des appareils.

Remarque

Dans certains cas, l’exportation des messages peut prendre jusqu’à 60 secondes. Cette durée est mesurée à partir du moment où IoT Central reçoit le message du hub IoT sous-jacent jusqu’au moment où le message est remis au point de terminaison de destination.

Prérequis

Pour utiliser les fonctionnalités d’exportation de données, vous devez disposer d’une autorisation d’exportation de données.

Pour savoir comment gérer l'exportation de données à l'aide de l'API REST d'IoT Central, voir Comment utiliser l'API REST d'IoT Central pour gérer les exportations de données.

Configurer une destination d’exportation d’objets Stockage Blob

IoT Central exporte les données une fois par minute, et chaque fichier contient le lot de modifications apportées depuis l’exportation précédente. Les données exportées sont enregistrées au format JSON. Par défaut, les chemins d'accès aux données exportées vers votre compte de stockage sont les suivants :

  • Données de télémétrie : {container}/{app-id}/{partition_id}/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • Modifications apportées aux propriétés : {container}/{app-id}/{partition_id}/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}

Pour parcourir les fichiers exportés sur le portail Azure, accédez à un fichier et sélectionnez Modifier le blob.

Options de connexion

Les destinations Stockage Blob vous permettent de configurer la connexion avec une chaîne de connexion ou une identité managée.

Conseil

Si la destination du Stockage Blob est protégée par un pare-feu, vous devez utiliser une identité managée pour vous y connecter.

Les identités managées sont plus sécurisées, car :

  • Vous ne stockez pas les informations d’identification de votre ressource dans une chaîne de connexion de votre application IoT Central.
  • Les informations d’identification sont automatiquement liées à la durée de vie de votre application IoT Central.
  • Les identités managées effectuent automatiquement une rotation régulière de leurs clés de sécurité.

IoT Central utilise actuellement des identités managées affectées par le système.

Quand vous configurez une identité managée, la configuration comprend une étendue et un rôle :

  • L’étendue définit l’emplacement où vous pouvez utiliser l’identité managée. Par exemple, vous pouvez utiliser un groupe de ressources Azure comme étendue. Dans ce cas, l’application IoT Central et la destination doivent être dans le même groupe de ressources.
  • Le rôle définit les autorisations qui sont accordées à l’application IoT Central dans le service de destination. Par exemple, pour qu’une application IoT Central envoie des données à un Event Hub, l’identité managée a besoin de l’attribution de rôle Expéditeur de données Azure Event Hubs.

La vidéo suivante fournit plus d’informations sur les identités managées affectées par le système :

Attention

Pour exporter vers un stockage Blob, n’utilisez pas le Contributeur de compte de stockage, comme illustré dans la vidéo. Utilisez plutôt le rôle Contributeur aux données d’objets blob du stockage.

Créer une destination de stockage Blob Azure

Cet article explique comment créer une identité managée à l’aide d’Azure CLI. Vous pouvez également utiliser le portail Azure pour créer une identité managée.

Si vous n’avez pas de compte de stockage Azure existant vers lequel exporter, exécutez le script suivant dans l’environnement Bash Azure Cloud Shell. Le script crée un groupe de ressources, un compte Stockage Azure et un conteneur d’objets blob. Le script active ensuite l’identité managée pour votre application IoT Central et attribue le rôle nécessaire pour accéder à votre compte de stockage :

# Replace the storage account name with your own unique value.
SA=yourstorageaccount$RANDOM

# Replace the IoT Central app name with the name of your
# IoT Central application.
CA=your-iot-central-app

CN=exportdata
RG=centralexportresources
LOCATION=eastus

az group create -n $RG --location $LOCATION
SAID=$(az storage account create --name $SA --resource-group $RG --location $LOCATION --sku Standard_LRS --query "id" --output tsv)
az storage container create --account-name $SA --resource-group $RG --name $CN

# This assumes your IoT Central application is in the 
# default `IOTC` resource group.
az iot central app identity assign --name $CA --resource-group IOTC --system-assigned
PI=$(az iot central app identity show --name $CA --resource-group IOTC --query "principalId" --output tsv)

az role assignment create --assignee $PI --role "Storage Blob Data Contributor" --scope $SAID

az role assignment list --assignee $PI --all -o table

echo "Endpoint URI: https://$SA.blob.core.windows.net/"
echo "Container: $CN"

Découvrez comment créer des comptes de stockage Blob Azure ou des comptes de stockage Azure Data Lake Storage v2. L’exportation de données peut uniquement écrire des données dans des comptes de stockage qui prennent en charge les objets blob de blocs. La table suivante répertorie les types de compte de stockage compatibles connus :

Niveau de performances Type de compte
Standard Usage général v2
Standard Usage général v1
Standard Stockage Blob
Premium Stockage d’objets blob de blocs

Pour sécuriser encore votre conteneur d’objets blob et autoriser uniquement l’accès à partir de services approuvés avec des identités managées, consultez Exporter des données vers une destination sécurisée sur un réseau virtuel Azure.

Pour créer la destination Stockage Blob dans IoT Central sur la page Exportation de données :

  1. Sélectionnez + Nouvelle destination.

  2. Sélectionnez Stockage Blob Azure comme type de destination.

  3. Sélectionnez Identité managée affectée par le système comme type d’autorisation.

  4. Entrez l’URI du point de terminaison de votre compte de stockage et le nom du conteneur en respectant la casse. Un URI de point de terminaison ressemble à ceci : https://contosowaste.blob.core.windows.net.

  5. Sélectionnez Enregistrer.

Si vous ne voyez pas de données arriver dans votre service de destination, consultez Résoudre les problèmes liés aux exportations de données à partir de votre application Azure IoT Central.

Configurer une exportation de données

Maintenant que vous disposez d'une destination vers laquelle exporter vos données, configurez la fonctionnalité d'exportation de données dans votre application IoT Central :

  1. Connectez-vous à votre application IoT Central.

  2. Dans le volet gauche, sélectionnez Exportation de données.

    Conseil

    Si vous ne voyez pas Exportation de données dans le volet gauche, cela signifie que vous n’avez pas les autorisations nécessaires pour configurer l’exportation de données dans votre application. Contactez un administrateur pour configurer l’exportation de données.

  3. Sélectionnez + Nouvelle exportation.

  4. Entrez un nom d'affichage pour votre nouvelle exportation et assurez-vous que l'exportation de données est activée.

  5. Choisissez le type de données à exporter. Le tableau suivant répertorie les types d'exportation de données pris en charge :

    Type de données Description Format de données
    Télémétrie Exportez des messages de télémétrie à partir d’appareils en quasi-temps réel. Chaque message exporté contient le contenu complet du message d'origine de l'appareil, normalisé. Format du message de télémétrie
    Modifications de la propriété Exportez les modifications apportées aux propriétés de l’appareil et du cloud en quasi-temps réel. Pour les propriétés en lecture seule de l'appareil, les modifications apportées aux valeurs signalées sont exportées. Pour les propriétés en lecture-écriture, les valeurs signalées et souhaitées sont exportées. Format du message de modification de la propriété
    Connectivité des appareils Exportez les événements connectés et déconnectés des appareils. Format de message de connectivité des appareils
    Cycle de vie des appareils Exportez les événements enregistrés, supprimés, approvisionnés, activés, désactivés, displayNameChanged et deviceTemplateChanged de l’appareil. Format du message relatif aux changements de cycle de vie d’appareil
    Cycle de vie de modèle d’appareil Exportez les changements de modèle d’appareil publiés, dont les créations, les mises à jour et les suppressions. Format de message relatif aux changements de cycle de vie d’appareil
    Journaux d’audit Journaux des mises à jour lancées par l’utilisateur et apportées à des entités dans l’application. Pour plus d’informations, consultez Utiliser des journaux d’audit pour suivre l’activité dans votre application IoT Central Format de message de journal d’audit
  6. Vous pouvez également ajouter des filtres pour réduire la quantité de données exportées. Différents types de filtres sont disponibles pour chaque type d’exportation de données :

    Type de données Filtres disponibles
    Télémétrie
    • Filtrer par nom d’appareil, identité d'appareil et modèle d’appareil et indiquez si l’appareil est simulé
    • Filtrer le flux de façon à ce qu’il contienne uniquement la télémétrie correspondant aux conditions de filtre
    • Filtrer le flux de façon à ce qu’il contienne uniquement la télémétrie des appareils dont les propriétés correspondent aux conditions de filtre
    • Filtrer le flux de façon à ce qu’il contienne uniquement la télémétrie avec des propriétés de message correspondant à la condition de filtre. Les propriétés de message (également appelées propriétés d’application) sont envoyées dans un ensemble de paires clé-valeur sur chaque message de télémétrie. Pour créer un filtre de propriété de message, entrez la clé de la propriété de message que vous recherchez, et spécifiez une condition. Seuls les messages de télémétrie dont les propriétés correspondent à la condition de filtre spécifiée sont exportés. En savoir plus sur les propriétés d’application dans des documents IoT Hub
    Modifications de la propriété
    • Filtrer par nom d’appareil, identité d'appareil et modèle d’appareil et indiquez si l’appareil est simulé
    • Filtrer le flux de façon à ce qu’il contienne uniquement les changements de propriété correspondant aux conditions de filtre
    Connectivité des appareils
    • Filtrer par nom d’appareil, ID d’appareil, modèle d’appareil, organisations et indiquer si l’appareil est simulé
    • Filtrer le flux de façon à ce qu’il contienne uniquement les changements des appareils dont les propriétés correspondent aux conditions de filtre
    Cycle de vie des appareils
    • Filtrer par nom d’appareil, identité d’appareil, modèle d’appareil et indiquez si l’appareil est approvisionné, activé ou simulé
    • Filtrer le flux de façon à ce qu’il contienne uniquement les changements des appareils dont les propriétés correspondent aux conditions de filtre
    Cycle de vie de modèle d’appareil
    • Filtrer par modèle d’appareil
    Journaux d’audit S/O
  7. Si vous le souhaitez, vous pouvez également enrichir les messages exportés avec des métadonnées supplémentaires dans les paires clé-valeur. Les enrichissements suivants sont disponibles pour les types d’exportation de données de télémétrie, de modification des propriétés, de connectivité des appareils et de cycle de vie des appareils :

    • Chaîne personnalisée : ajoute une chaîne statique personnalisée à chaque message. Entrez n’importe quelle clé, puis entrez une valeur de chaîne.
    • Propriété, qui ajoute à chaque message ce qui suit :
      • Métadonnées d’appareil, par exemple nom de l’appareil, nom du modèle d’appareil, informations relatives à l’activation, aux organisations, au provisionnement et à la simulation.
      • Valeur actuelle de la propriété rapportée d’appareil ou de la propriété de cloud à chaque message. Si le message exporté provient d'un appareil qui ne dispose pas de la propriété spécifiée, l'enrichissement ne s'applique pas à ce message.

Configurez la destination de l’exportation :

  1. Sélectionnez + Destination pour ajouter une destination que vous avez déjà créée ou sélectionnez Créer nouveau.

  2. Pour transformer vos données avant leur exportation, sélectionnez + Transformer. Pour plus d’informations, consultez Transformer des données dans votre application IoT Central pour les exporter.

  3. Sélectionnez + Destination pour ajouter jusqu’à cinq destinations à une même exportation.

  4. Une fois la configuration de votre exportation terminée, sélectionnez Enregistrer. Au bout de quelques minutes, vos données apparaissent dans vos destinations.

Superviser votre exportation

Dans IoT Central, la page Exportation de données vous permet de vérifier l’état de vos exportations. Vous pouvez également utiliser Azure Monitor pour connaître la quantité de données que vous exportez et voir les erreurs d’exportation. Vous pouvez accéder aux métriques d’intégrité des appareils et des exportations dans les graphiques du portail Azure en utilisant l’API REST, des requêtes dans PowerShell ou Azure CLI. Vous pouvez superviser les métriques d’exportation de données suivantes dans Azure Monitor :

  • Nombre de messages entrants à exporter avant l’application de filtres.
  • Nombre de messages qui passent par des filtres.
  • Nombre de messages correctement exportés vers les destinations.
  • Nombre d’erreurs trouvées.

Pour en savoir plus, consultez Superviser l’intégrité de l’application.

Formats de données

Les sections suivantes décrivent les formats des données exportées :

Format des données de télémétrie.

Chaque message exporté contient un formulaire normalisé du message complet que l'appareil a envoyé dans le corps du message. Le message est au format JSON et encodé en UTF-8. Chaque message contient les informations suivantes :

  • applicationId : ID de l’application IoT Central.
  • messageSource : source du message - telemetry.
  • deviceId : ID de l’appareil qui a envoyé le message de télémétrie.
  • schema : nom et version du schéma de charge utile.
  • templateId : ID du modèle d’appareil affecté à l’appareil.
  • enqueuedTime : heure à laquelle IoT Central a reçu ce message.
  • enrichments : enrichissements configurés lors de l’exportation.
  • module : module IoT Edge qui a envoyé ce message. Ce champ apparaît uniquement si le message provient d’un module IoT Edge.
  • component : composant qui a envoyé ce message. Ce champ apparaît uniquement si les capacités envoyées dans le message ont été modélisées en tant que composant dans le modèle d’appareil.
  • messageProperties : autres propriétés envoyées par l’appareil avec le message. Ces propriétés sont parfois appelées propriétés d'application. Pour en savoir plus, consultez la documentation d'IoT Hub.

Pour le Stockage Blob, les messages sont regroupés par lot et exportés une fois par minute.

L’exemple suivant montre un message de télémétrie exporté :


{
    "applicationId": "1dffa667-9bee-4f16-b243-25ad4151475e",
    "messageSource": "telemetry",
    "deviceId": "1vzb5ghlsg1",
    "schema": "default@v1",
    "templateId": "urn:qugj6vbw5:___qbj_27r",
    "enqueuedTime": "2020-08-05T22:26:55.455Z",
    "telemetry": {
        "Activity": "running",
        "BloodPressure": {
            "Diastolic": 7,
            "Systolic": 71
        },
        "BodyTemperature": 98.73447010562934,
        "HeartRate": 88,
        "HeartRateVariability": 17,
        "RespiratoryRate": 13
    },
    "enrichments": {
      "userSpecifiedKey": "sampleValue"
    },
    "module": "VitalsModule",
    "component": "DeviceComponent",
    "messageProperties": {
      "messageProp": "value"
    }
}

Propriétés de message

Les messages de télémétrie ont des propriétés pour les métadonnées ainsi que pour la charge utile de télémétrie. L’extrait de code précédent montre des exemples de messages système tels que deviceId et enqueuedTime. Pour en savoir plus sur les propriétés des messages système, consultez Propriétés système des messages IoT Hub D2C.

Vous pouvez ajouter des propriétés aux messages de télémétrie si vous devez ajouter des métadonnées personnalisées à ces derniers. Par exemple, vous devez ajouter un horodatage quand l’appareil crée le message.

L’extrait de code suivant montre comment ajouter la propriété iothub-creation-time-utc au message quand vous le créez sur l’appareil :

Important

Le format de cet horodatage doit être UTC sans informations de fuseau horaire. Par exemple, 2021-04-21T11:30:16Z est valide, 2021-04-21T11:30:16-07:00 non.

async function sendTelemetry(deviceClient, index) {
  console.log('Sending telemetry message %d...', index);
  const msg = new Message(
    JSON.stringify(
      deviceTemperatureSensor.updateSensor().getCurrentTemperatureObject()
    )
  );
  msg.properties.add("iothub-creation-time-utc", new Date().toISOString());
  msg.contentType = 'application/json';
  msg.contentEncoding = 'utf-8';
  await deviceClient.sendEvent(msg);
}

Format des modifications de propriétés

Chaque message ou enregistrement représente les modifications apportées aux propriétés de l’appareil et du cloud. Les informations incluses dans le message exporté sont les suivantes :

  • applicationId : ID de l’application IoT Central.
  • messageSource : source du message - properties.
  • messageType : cloudPropertyChange, devicePropertyDesiredChange ou devicePropertyReportedChange.
  • deviceId : ID de l’appareil qui a envoyé le message de télémétrie.
  • schema : nom et version du schéma de charge utile.
  • enqueuedTime : heure à laquelle IoT Central a détecté cette modification.
  • templateId : ID du modèle d’appareil affecté à l’appareil.
  • properties : Tableau des propriétés qui ont été modifiées, y compris les noms des propriétés et les valeurs qui ont été modifiés. Les informations sur le composant et le module sont incluses si la propriété est modélisée dans un composant ou un module IoT Edge.
  • enrichments : enrichissements configurés lors de l’exportation.

Pour le Stockage Blob, les messages sont regroupés par lot et exportés une fois par minute.

L’extrait de code suivant montre un message de changement de propriété exporté vers le Stockage Blob :

{
    "applicationId": "fb74969c-8682-4708-af01-33499a7f7d98",
    "messageSource": "properties",
    "deviceId": "Pepjmh1Hcc",
    "enqueuedTime": "2023-03-02T10:35:39.281Z",
    "enrichments": {},
    "messageType": "devicePropertyReportedChange",
    "schema": "default@v1",
    "templateId": "dtmi:azureiot:ddzig4ascxz",
    "properties": [
        {
            "component": "device_info",
            "name": "swVersion",
            "value": "12"
        },
        {
            "component": "device_info",
            "name": "osName",
            "value": "Android"
        },
        {
            "component": "device_info",
            "name": "processorArchitecture",
            "value": "arm64-v8a"
        },
        {
            "component": "device_info",
            "name": "processorManufacturer",
            "value": "unknown"
        }
    ]
}

Format des modifications de la connectivité des appareils

Chaque message ou enregistrement représente un événement de connectivité provenant d’un seul appareil. Les informations incluses dans le message exporté sont les suivantes :

  • applicationId : ID de l’application IoT Central.
  • messageSource : source du message - deviceConnectivity.
  • messageType : connected ou disconnected.
  • deviceId : ID de l’appareil modifié.
  • schema : nom et version du schéma de charge utile.
  • templateId : ID du modèle d’appareil affecté à l’appareil.
  • enqueuedTime : Heure à laquelle cette modification est intervenue dans IoT Central.
  • enrichments : enrichissements configurés lors de l’exportation.

Pour le Stockage Blob, les messages sont regroupés par lot et exportés une fois par minute.

L’exemple suivant présente un message de connectivité d’appareil exporté reçu dans le service Stockage Blob Azure.

{
  "applicationId": "1dffa667-9bee-4f16-b243-25ad4151475e",
  "messageSource": "deviceConnectivity",
  "messageType": "connected",
  "deviceId": "1vzb5ghlsg1",
  "schema": "default@v1",
  "templateId": "urn:qugj6vbw5:___qbj_27r",
  "enqueuedTime": "2021-04-05T22:26:55.455Z",
  "enrichments": {
    "userSpecifiedKey": "sampleValue"
  }
}

Format des changements du cycle de vie d’appareil

Chaque message ou enregistrement représente une modification apportée à un appareil. Les informations incluses dans le message exporté sont les suivantes :

  • applicationId : ID de l’application IoT Central.
  • messageSource : source du message - deviceLifecycle.
  • messageType : type de la modification effectuée. Il s’agit de l’un des éléments suivants : registered, deleted, provisioned, enabled, disabled, displayNameChanged et deviceTemplateChanged.
  • deviceId : ID de l’appareil modifié.
  • schema : nom et version du schéma de charge utile.
  • templateId : ID du modèle d’appareil affecté à l’appareil.
  • enqueuedTime : Heure à laquelle cette modification est intervenue dans IoT Central.
  • enrichments : enrichissements configurés lors de l’exportation.

Pour le Stockage Blob, les messages sont regroupés par lot et exportés une fois par minute.

L’exemple suivant présente un message de cycle de vie d’appareil exporté reçu dans le service Stockage Blob Azure.

{
  "applicationId": "1dffa667-9bee-4f16-b243-25ad4151475e",
  "messageSource": "deviceLifecycle",
  "messageType": "registered",
  "deviceId": "1vzb5ghlsg1",
  "schema": "default@v1",
  "templateId": "urn:qugj6vbw5:___qbj_27r",
  "enqueuedTime": "2021-01-01T22:26:55.455Z",
  "enrichments": {
    "userSpecifiedKey": "sampleValue"
  }
}

Format des changements de cycle de vie d’appareil

Chaque message ou enregistrement représente une modification apportée à un modèle d’appareil publié. Les informations incluses dans le message exporté sont les suivantes :

  • applicationId : ID de l’application IoT Central.
  • messageSource : source du message - deviceTemplateLifecycle.
  • messageType : created, updated ou deleted.
  • schema : nom et version du schéma de charge utile.
  • templateId : ID du modèle d’appareil affecté à l’appareil.
  • enqueuedTime : Heure à laquelle cette modification est intervenue dans IoT Central.
  • enrichments : enrichissements configurés lors de l’exportation.

Pour le Stockage Blob, les messages sont regroupés par lot et exportés une fois par minute.

L’exemple suivant présente un message de cycle de vie d’appareil exporté reçu dans le service Stockage Blob Azure.

{
  "applicationId": "1dffa667-9bee-4f16-b243-25ad4151475e",
  "messageSource": "deviceTemplateLifecycle",
  "messageType": "created",
  "schema": "default@v1",
  "templateId": "urn:qugj6vbw5:___qbj_27r",
  "enqueuedTime": "2021-01-01T22:26:55.455Z",
  "enrichments": {
    "userSpecifiedKey": "sampleValue"
  }
}

Format du journal d’audit

Chaque message de journal d’audit représente un changement à l’initiative de l’utilisateur apporté à une entité pouvant être auditée dans l’application IoT Central. Les informations incluses dans le message exporté sont les suivantes :

  • actor : informations sur l’utilisateur qui a modifié l’entité.
  • applicationId : ID de l’application IoT Central.
  • messageSource : source du message - audit.
  • messageType : type de la modification effectuée. Valeurs possibles : updated, created, deleted.
  • updated : présent uniquement si messageType a la valeur updated. Fournit plus de détails sur la mise à jour.
  • resource : détails de l’entité modifiée.
  • schema : nom et version du schéma de charge utile.
  • deviceId : ID de l’appareil modifié.
  • enqueuedTime : Heure à laquelle cette modification est intervenue dans IoT Central.
  • enrichments : enrichissements configurés lors de l’exportation.

L’exemple suivant présente un message de journal d’audit exporté reçu dans le Stockage Blob Azure :

{
  "actor": {
    "id": "test-audit",
    "type": "apiToken"
    },
  "applicationId": "570c2d7b-1111-2222-abcd-000000000000",
  "enqueuedTime": "2022-07-25T21:54:40.000Z",
  "enrichments": {},
  "messageSource": "audit",
  "messageType": "created",
  "resource": {
    "displayName": "Sensor 1",
    "id": "sensor",
    "type": "device"    
  },
  "schema": "default@v1"
}

Étapes suivantes

Maintenant que vous savez comment exporter vers Stockage Blob, une étape suivante suggérée consiste à apprendre à exporter vers Service Bus.