Экспорт данных Интернета вещей в служба хранилища BLOB-объектов

В этой статье описывается настройка экспорта данных для отправки данных в службу служба хранилища BLOB-объектов.

Используйте эту возможность для непрерывного экспорта отфильтрованных и обогащенных данных IoT из приложения IoT Central. Экспорт данных позволяет отправлять изменения практически в реальном времени в другие компоненты облачного решения для получения когнитивных аналитических сведений по принципу "теплого пути", а также для хранения.

Например, доступны следующие возможности:

  • Непрерывно экспортируйте данные телеметрии, изменения свойств, подключение устройств, жизненный цикл устройства, жизненный цикл шаблона устройства и данные журнала аудита в формате JSON практически в реальном времени.
  • фильтровать потоки данных для экспорта данных, соответствующих пользовательским условиям;
  • обогащать потоки данных с помощью пользовательских значений и значений свойств с устройства;
  • Преобразуйте потоки данных для изменения их фигуры и содержимого.

Совет

При включении экспорта данных вы получаете данные только начиная с этого момента. Чтобы сохранить больше исторических данных, включайте экспорт непрерывных данных заранее. Чтобы вручную экспортировать данные из времени отключения экспорта данных, см. инструкции по использованию REST API IoT Central для запроса устройств.

Примечание.

В некоторых случаях для экспорта сообщений может потребоваться до 60 секунд. Это время измеряется, когда IoT Central получает сообщение от базового Центра Интернета вещей до момента доставки сообщения в конечную точку назначения.

Необходимые компоненты

Чтобы использовать функции экспорта данных, необходимо иметь разрешение на экспорт данных.

Чтобы узнать, как управлять экспортом данных с помощью REST API IoT Central, см. инструкции по управлению экспортом данных с помощью REST API IoT Central.

Настройка назначения экспорта больших двоичных объектов служба хранилища

IoT Central экспортирует данные один раз в минуту с каждым файлом, содержащим пакет изменений с момента предыдущего экспорта. Экспортированные данные сохраняются в формате JSON. Пути по умолчанию к экспортированным данным в вашей учетной записи хранения:

  • Телеметрия: {container}/{app-id}/{partition_id}/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • Изменения свойств: {container}/{app-id}/{partition_id}/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}

Чтобы просмотреть экспортированные файлы на портале Azure, перейдите к файлу и перейдите на вкладку Изменение BLOB-объекта.

Параметры подключения

Назначения больших двоичных объектов служба хранилища позволяют настроить подключение с строка подключения или управляемым удостоверением.

Совет

Если целевой объект служба хранилища большой двоичный объект защищен брандмауэром, необходимо использовать управляемое удостоверение для подключения к нему.

Управляемые удостоверения более безопасны, так как:

  • Учетные данные для ресурса не хранятся в строка подключения в приложении IoT Central.
  • Учетные данные автоматически привязаны к времени существования приложения IoT Central.
  • Управляемые удостоверения автоматически сменяют ключи безопасности.

IoT Central в настоящее время использует управляемые удостоверения, назначаемые системой.

При настройке управляемого удостоверения конфигурация включает область и роль:

  • В область определяется, где можно использовать управляемое удостоверение. Например, можно использовать группу ресурсов Azure в качестве область. В этом случае приложение IoT Central и назначение должны находиться в одной группе ресурсов.
  • Роль определяет разрешения, предоставляемые приложением IoT Central в целевой службе. Например, для приложения IoT Central для отправки данных в концентратор событий управляемому удостоверению требуется назначение роли отправителя данных Центры событий Azure.

В следующем видео содержатся дополнительные сведения о назначенных системой управляемых удостоверениях:

Внимание

Чтобы экспортировать в хранилище BLOB-объектов, не используйте участник учетной записи служба хранилища, как показано в видео. Вместо этого используйте роль участника данных большого двоичного объекта служба хранилища.

Создание назначения Хранилища BLOB-объектов Azure

В этой статье показано, как создать управляемое удостоверение с помощью Azure CLI. Вы также можете использовать портал Azure для создания удостоверений.

Если у вас нет существующей учетной записи хранения Azure для экспорта, выполните следующий сценарий в среде Azure Cloud Shell bash. Скрипт создает группу ресурсов, служба хранилища Azure учетную запись и контейнер BLOB-объектов. Затем скрипт включает управляемое удостоверение для приложения IoT Central и назначает роль, которую он должен получить для доступа к учетной записи хранения:

# 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"

Дополнительные сведения о создании новых учетных записей Хранилище BLOB-объектов Azure или azure Data Lake служба хранилища учетных записей хранения версии 2. Экспорт данных может записывать данные только в учетные записи хранения, поддерживающие блочные BLOB-объекты. В следующей таблице показаны известные типы совместимых учетных записей хранения:

Performance Tier Тип счета
Стандартные Общего назначения версии 2
Стандартные Общего назначения версии 1
Стандартные Хранилище BLOB-объектов
Premium Хранилище блочных BLOB-объектов

Чтобы защитить контейнер BLOB-объектов и разрешить доступ только из доверенных служб с помощью управляемых удостоверений, см. статью "Экспорт данных в безопасное место назначения" в виртуальная сеть Azure.

Чтобы создать назначение служба хранилища BLOB-объектов в IoT Central на странице экспорта данных:

  1. Нажмите кнопку + New destination (Создать назначение).

  2. Выберите Хранилище BLOB-объектов Azure в качестве типа назначения.

  3. Выберите управляемое удостоверение , назначаемое системой, в качестве типа авторизации.

  4. Введите URI конечной точки для учетной записи хранения и имя контейнера с учетом регистра. URI конечной точки выглядит следующим образом: https://contosowaste.blob.core.windows.net

  5. Выберите Сохранить.

Если данные, поступающие в целевую службу, не отображаются, см . статью "Устранение неполадок с экспортом данных из приложения Azure IoT Central".

Настройка экспорта данных

Теперь, когда у вас есть назначение для экспорта данных, настройте экспорт в приложении IoT Central:

  1. Войдите в приложение IoT Central.

  2. На панели слева выберите элемент Экспорт данных.

    Совет

    Если вы не видите элемент Экспорт данных на панели слева, у вас нет разрешений на настройку экспорта данных в приложении. Обратитесь к администратору, чтобы настроить экспорт данных.

  3. Выберите + Новый экспорт.

  4. Введите отображаемое имя для нового экспорта и убедитесь, что экспорт данных включен.

  5. Выберите тип данных для экспорта. В следующей таблице перечислены поддерживаемые типы данных.

    Тип данных Description Формат данных
    Телеметрия Экспорт сообщений телеметрии с устройств практически в реальном времени. Каждое экспортированное сообщение содержит полное содержимое исходного сообщения устройства в нормализованном виде. Формат сообщения телеметрии
    Изменения свойств Экспорт изменений в свойствах устройства и облака практически в реальном времени. Для свойств устройств, доступных только для чтения, экспортируются изменения в сообщаемых значениях. Для свойств, доступных для чтения и записи, экспортируются и сообщаемые, и требуемые значения. Формат сообщения об изменении свойства
    Взаимодействие устройств Экспорт подключенных и отключенных устройств. Формат сообщения о подключении устройства
    Жизненный цикл устройства Экспорт событий регистрации, удаления, подготовки, включения, отключения устройств, а также событий displayNameChanged и deviceTemplateChanged. Формат сообщения об изменениях жизненного цикла устройства
    Жизненный цикл шаблона устройства Экспорт опубликованных изменений шаблонов устройств, включая создание, обновление и удаление. Формат сообщения об изменениях жизненного цикла шаблона устройства
    Журналы аудита Журналы обновлений, инициированных пользователем, для сущностей в приложении. Дополнительные сведения см. в статье "Использование журналов аудита для отслеживания действий в приложении IoT Central" Формат сообщения журнала аудита
  6. При необходимости добавьте фильтры, чтобы уменьшить объем экспортируемых данных. Есть несколько типов фильтров, доступных для каждого типа экспорта данных:

    Тип данных Доступные фильтры
    Телеметрия
    • Фильтрация по имени, идентификатору и шаблону устройства, а также при имитации устройства.
    • Фильтрация потока, чтобы он содержал только данные телеметрии, соответствующие условиям фильтра.
    • Фильтрация потока, чтобы он содержал только данные телеметрии с устройств со свойствами, соответствующими условиям фильтра.
    • Фильтруйте поток, чтобы содержать только данные телеметрии с свойствами сообщения, которые соответствуют условию фильтра. Свойства сообщения (также известные как свойства приложения) отправляются в контейнер пар "ключ-значение" для каждого сообщения телеметрии. Чтобы создать фильтр свойств сообщения, введите искомый ключ свойства сообщения и укажите условие. Экспортируются только сообщения телеметрии со свойствами, соответствующими заданному условию фильтра. Дополнительные сведения о свойствах приложений из документов Центра Интернета вещей
    Изменения свойств
    • Фильтрация по имени, идентификатору и шаблону устройства, а также при имитации устройства.
    • Фильтрация потока, чтобы он содержал только изменения свойств, соответствующие условиям фильтра.
    Взаимодействие устройств
    • Фильтрация по имени устройства, идентификатору устройства, шаблону устройства, организациям и, если устройство имитируется
    • Фильтрация потока, чтобы он содержал только изменения с устройств со свойствами, соответствующими условиям фильтра.
    Жизненный цикл устройства
    • Фильтрация по имени, идентификатору и шаблону устройства, а также при имитации, включении и подготовке устройства.
    • Фильтрация потока, чтобы он содержал только изменения с устройств со свойствами, соответствующими условиям фильтра.
    Жизненный цикл шаблона устройства
    • Фильтрация по шаблону устройства
    Журналы аудита Н/П
  7. При необходимости обогатите экспортированные сообщения с дополнительными метаданными пары "ключ-значение". Следующие обогащения доступны для экспорта данных телеметрии, изменений свойств, подключений устройства и жизненного цикла устройства:

    • Пользовательская строка: добавляет пользовательскую статическую строку к каждому сообщению. Введите любой ключ и строковое значение.
    • Свойство, которое добавляется в каждое сообщение:
      • Метаданные устройства, такие как имя устройства, имя шаблона устройства, включено, организации, подготовленные и имитированные.
      • Текущее свойство сообщаемого устройства или значение облачного свойства для каждого сообщения. Если экспортированное сообщение отправлено с устройства, у которого нет указанного свойства, экспортированное сообщение не получает обогащения.

Настройте назначение экспорта:

  1. Выберите +Назначение , чтобы добавить место назначения, которое вы уже создали или нажмите кнопку "Создать новую".

  2. Чтобы преобразовать данные перед экспортом, нажмите кнопку +Преобразовать. Дополнительные сведения см. в статье "Преобразование данных в приложении IoT Central" для экспорта.

  3. Выберите +Назначение , чтобы добавить до пяти назначений в один экспорт.

  4. Завершив настройку экспорта, нажмите кнопку Сохранить. Через несколько минут ваши данные будут отображаться в выбранном назначении.

Мониторинг экспорта

На странице экспорта данных в IoT Central можно проверка состояние экспорта. Вы также можете использовать Azure Monitor , чтобы узнать, сколько данных вы экспортируете и какие-либо ошибки экспорта. Вы можете получить доступ к метрикам экспорта и работоспособности устройств в диаграммах в портал Azure с помощью REST API, запросов в PowerShell или Azure CLI. Сейчас в Azure Monitor можно отслеживать следующие метрики экспорта данных:

  • число сообщений, входящих в экспорт до применения фильтров;
  • число сообщений, прошедших через фильтры;
  • число сообщений, успешно экспортированных в назначения.
  • Количество обнаруженных ошибок.

Дополнительные сведения см. в статье Мониторинг работоспособности приложения.

Форматы данных

В следующих разделах описываются форматы экспортированных данных:

Формат телеметрии

Каждое экспортированное сообщение содержит нормализованную форму полного сообщения, отправленного устройством в тексте сообщения. Сообщение представлено в формате JSON и кодируется как UTF-8. В каждом сообщении содержатся следующие сведения:

  • applicationId: идентификатор приложения IoT Central.
  • messageSource: источник сообщения — telemetry.
  • deviceId: идентификатор устройства, с которого было отправлено сообщение телеметрии.
  • schema: имя и версия схемы полезных данных.
  • templateId: идентификатор шаблона устройства, назначенного устройству.
  • enqueuedTime: время, в течение которого IoT Central получил это сообщение.
  • enrichments: все обогащения, настроенные для экспорта.
  • module: модуль IoT Edge, который отправил это сообщение. Это поле отображается только в том случае, если сообщение поступило из модуля IoT Edge.
  • component: компонент, который отправил это сообщение. Это поле отображается только в том случае, если возможности, отправленные в сообщении, были смоделированы как компонент в шаблоне устройства.
  • messageProperties: другие свойства, отправляемые устройством с сообщением. Эти свойства иногда называют свойствами приложения. Дополнительные сведения см. в документах Центра Интернета вещей.

Для служба хранилища BLOB-объектов сообщения пакетируются и экспортируются один раз в минуту.

В следующем примере показано экспортированное сообщение телеметрии.


{
    "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"
    }
}

Свойства сообщения

Сообщения телеметрии имеют свойства для метаданных, а также полезные данные телеметрии. В предыдущем фрагменте показаны примеры системных сообщений, таких как deviceId и enqueuedTime. Дополнительные сведения о свойствах системных сообщений см. в разделе Системные свойства сообщений Центра Интернета вещей D2C.

Свойства можно добавить в сообщения телеметрии, если необходимо добавить пользовательские метаданные в сообщения телеметрии. Например, необходимо добавить отметку времени при создании сообщения устройством.

В следующем фрагменте кода показано, как добавить свойство iothub-creation-time-utc в сообщение при его создании на устройстве:

Внимание

Такая метка времени должна быть в формате UTC без сведений о часовом поясе. Например, 2021-04-21T11:30:16Z использовать можно, а 2021-04-21T11:30:16-07:00 — нет.

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

Формат изменения свойства

Каждое сообщение или запись представляет одно изменение в свойствах устройства или облака. В экспортированном сообщении содержатся следующие сведения:

  • applicationId: идентификатор приложения IoT Central.
  • messageSource: источник сообщения — properties.
  • messageType: cloudPropertyChange, devicePropertyDesiredChange или devicePropertyReportedChange.
  • deviceId: идентификатор устройства, с которого было отправлено сообщение телеметрии.
  • schema: имя и версия схемы полезных данных.
  • enqueuedTime: время, в течение которого IoT Central обнаружила это изменение.
  • templateId: идентификатор шаблона устройства, назначенного устройству.
  • properties: массив измененных свойств, включая имена измененных свойств и значений. Сведения о компоненте и модуле включаются в том случае, если свойство моделируется внутри компонента или модуля IoT Edge.
  • enrichments: все обогащения, настроенные для экспорта.

Для служба хранилища BLOB-объектов сообщения пакетируются и экспортируются один раз в минуту.

В следующем фрагменте кода показано сообщение об изменении свойства, экспортируемое в служба хранилища 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"
        }
    ]
}

Формат изменения подключения устройства

Каждое сообщение или запись представляет событие подключения с одного устройства. В экспортированном сообщении содержатся следующие сведения:

  • applicationId: идентификатор приложения IoT Central.
  • messageSource: источник сообщения — deviceConnectivity.
  • messageType: connected или disconnected.
  • deviceId: идентификатор измененного устройства.
  • schema: имя и версия схемы полезных данных.
  • templateId: идентификатор шаблона устройства, назначенного устройству.
  • enqueuedTime: время, когда это изменение произошло в IoT Central.
  • enrichments: все обогащения, настроенные для экспорта.

Для служба хранилища BLOB-объектов сообщения пакетируются и экспортируются один раз в минуту.

В следующем примере показано сообщение о подключении к экспортированному устройству, полученное в Хранилище 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"
  }
}

Формат изменения жизненного цикла устройства

Каждое сообщение или запись представляет одно изменение для одного устройства. В экспортированном сообщении содержатся следующие сведения:

  • applicationId: идентификатор приложения IoT Central.
  • messageSource: источник сообщения — deviceLifecycle.
  • messageType: тип произошедшего изменения. Одно из значений: registered, deleted, provisioned, enabled, disabled, displayNameChanged или deviceTemplateChanged.
  • deviceId: идентификатор измененного устройства.
  • schema: имя и версия схемы полезных данных.
  • templateId: идентификатор шаблона устройства, назначенного устройству.
  • enqueuedTime: время, когда это изменение произошло в IoT Central.
  • enrichments: все обогащения, настроенные для экспорта.

Для служба хранилища BLOB-объектов сообщения пакетируются и экспортируются один раз в минуту.

В следующем примере показано сообщение жизненного цикла экспортированного устройства, полученное в Хранилище 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"
  }
}

Формат изменения жизненного цикла шаблона устройства

Каждое сообщение или запись представляет одно изменение в одном опубликованном шаблоне устройства. В экспортированном сообщении содержатся следующие сведения:

  • applicationId: идентификатор приложения IoT Central.
  • messageSource: источник сообщения — deviceTemplateLifecycle.
  • messageType: created, updated или deleted.
  • schema: имя и версия схемы полезных данных.
  • templateId: идентификатор шаблона устройства, назначенного устройству.
  • enqueuedTime: время, когда это изменение произошло в IoT Central.
  • enrichments: все обогащения, настроенные для экспорта.

Для служба хранилища BLOB-объектов сообщения пакетируются и экспортируются один раз в минуту.

В следующем примере показано сообщение жизненного цикла экспортированного устройства, полученное в Хранилище 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"
  }
}

Формат журналов аудита

Каждое сообщение журнала аудита представляет собой изменение, инициированное пользователем, на сущность, доступную для аудита, в приложении IoT Central. В экспортированном сообщении содержатся следующие сведения:

  • actor: сведения о пользователе, который изменил сущность.
  • applicationId: идентификатор приложения IoT Central.
  • messageSource: источник сообщения — audit.
  • messageType: тип произошедшего изменения. Одно из: updated, created, deleted.
  • updated: имеется только в том updatedслучаеmessageType. Дополнительные сведения об обновлении.
  • resource: сведения об измененной сущности.
  • schema: имя и версия схемы полезных данных.
  • deviceId: идентификатор измененного устройства.
  • enqueuedTime: время, когда это изменение произошло в IoT Central.
  • enrichments: все обогащения, настроенные для экспорта.

В следующем примере показано экспортируемое сообщение журнала аудита, полученное в Хранилище 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"
}

Следующие шаги

Теперь, когда вы знаете, как экспортировать в большой двоичный объект служба хранилища, рекомендуемый следующий шаг — узнать, как экспортировать в служебная шина.