Экспорт данных Интернета вещей в Azure Data Explorer

В этой статье описывается, как настроить экспорт данных для отправки данных в Azure Data Explorer.

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

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

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

Совет

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

Примечание.

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

Предварительные условия

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

Настройка назначения экспорта Azure Data Explorer

Вы можете использовать кластер Azure Data Explorer или пул Azure Synapse Data Explorer. Дополнительные сведения см. в статье о различиях между Azure Synapse Data Explorer и Azure Data Explorer?

IoT Central экспортирует данные практически в режиме реального времени в таблицу базы данных в кластере Azure Data Explorer. Данные находятся в тексте сообщения и имеют формат JSON, закодированный как UTF-8. Вы можете добавить преобразование в IoT Central для экспорта данных, соответствующих схеме таблицы.

Чтобы запросить экспортированные данные на портале Azure Data Explorer, перейдите к базе данных и выберите "Запрос".

В следующем видео показано, как экспортировать данные в Azure Data Explorer:

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

Назначения Azure Data Explorer позволяют настроить подключение к сервисному принципалу или управляемому удостоверению.

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

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

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

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

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

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

Внимание

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

Создание места назначения Azure Data Explorer

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

Если у вас нет существующей базы данных Azure Data Explorer для экспорта, выполните следующие действия. У вас есть два варианта создания базы данных Azure Data Explorer:

  • Создайте новый кластер и базу данных Azure Data Explorer. Дополнительные сведения см. в кратком руководстве по Azure Data Explorer. Запишите URI кластера и имя создаваемой базы данных, эти значения необходимо выполнить в следующих шагах.
  • Создайте пул и базу данных Azure Synapse Data Explorer. Дополнительные сведения см. в кратком руководстве по Azure Data Explorer. Запишите URI пула и имя создаваемой базы данных, эти значения необходимо выполнить в следующих шагах.

Чтобы настроить управляемое удостоверение, которое позволяет приложению IoT Central безопасно экспортировать данные в ресурс Azure:

  1. Создайте управляемое удостоверение для приложения IoT Central для подключения к базе данных. Используйте Azure Cloud Shell для выполнения следующей команды:

    az iot central app identity assign --name {your IoT Central app name} \
        --resource-group {resource group name} \
        --system-assigned
    

    Запишите результаты, выводимые командой principalId и tenantId. Эти значения используются на следующем шаге.

  2. Настройте разрешения базы данных, чтобы разрешить подключения из приложения IoT Central. Используйте Azure Cloud Shell для выполнения следующей команды:

    az kusto database-principal-assignment create --cluster-name {name of your cluster} \
        --database-name {name of your database}    \
        --resource-group {resource group name} \
        --principal-assignment-name {name of your IoT Central application} \
        --principal-id {principal id from the previous step} \
        --principal-type App --role Admin \
        --tenant-id {tenant id from the previous step}
    

    Совет

    Если вы используете Azure Synapse, см. раздел az synapse kusto database-principal-assignment.

  3. Создайте таблицу в базе данных с подходящей схемой для экспортируемых данных. В следующем примере запроса создается таблица с именем smartvitalspatch. Дополнительные сведения см. в статье "Преобразование данных в приложении IoT Central" для экспорта:

    .create table smartvitalspatch (
      EnqueuedTime:datetime,
      Message:string,
      Application:string,
      Device:string,
      Simulated:boolean,
      Template:string,
      Module:string,
      Component:string,
      Capability:string,
      Value:dynamic
    )
    
  4. (Необязательно) Чтобы ускорить прием данных в базу данных Azure Data Explorer, выполните приведенные действия.

    1. Перейдите на страницу "Конфигурации" для кластера Azure Data Explorer. Затем включите параметр приема потоковой передачи .

    2. Выполните следующий запрос, чтобы изменить политику таблицы, чтобы включить прием потоковой передачи:

      .alter table smartvitalspatch policy streamingingestion enable
      

Чтобы создать назначение Azure Data Explorer в IoT Central на странице экспорта данных:

  1. Нажмите + New destination.

  2. В качестве типа места назначения выберите Azure Data Explorer.

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

    Совет

    URL-адрес кластера для автономного обозревателя данных Azure выглядит следующим https://<ClusterName>.<AzureRegion>.kusto.windows.netобразом. URL-адрес кластера для пула Azure Synapse Data Explorer выглядит следующим образом https://<DataExplorerPoolName>.<SynapseWorkspaceName>.kusto.azuresynapse.net.

    Снимок экрана назначения экспорта Azure Data Explorer, использующего управляемое удостоверение.

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

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

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

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

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

    Совет

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

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

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

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

    Тип данных Описание Формат данных
    Телеметрия Экспорт сообщений телеметрии с устройств практически в реальном времени. Каждое экспортированное сообщение содержит полное содержимое исходного сообщения устройства в нормализованном виде. Формат телеметрии
    Изменения свойств Экспорт изменений в свойствах устройства и облака практически в реальном времени. Для свойств устройств, доступных только для чтения, экспортируются изменения в сообщаемых значениях. Для свойств, доступных для чтения и записи, экспортируются и сообщаемые, и требуемые значения. Формат изменений свойств
    Взаимодействие устройств Экспорт событий подключения и отключения устройств. Изменения в формате подключения устройства
    Жизненный цикл устройства Экспорт событий регистрации, удаления, подготовки, включения, отключения устройств, а также событий 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: другие свойства, отправляемые устройством с сообщением. Эти свойства иногда называют свойствами приложения. Дополнительные сведения см. в документации по Центру Интернета вещей.

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

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

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

В следующем фрагменте кода показано, как добавить свойство 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: все обогащения, настроенные для экспорта.

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

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

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

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

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

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

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

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

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

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

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

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

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

Теперь, когда вы знаете, как экспортировать данные в Azure Data Explorer, рекомендуемый следующий шаг — узнать, как экспортировать IoT данные в Webhook.