Exportar dados da IoT para o Armazenamento de Blobs

Este artigo descreve como configurar a exportação de dados para enviar dados ao serviço de Armazenamento de Blobs.

Use esse recurso para exportar continuamente dados de IoT filtrados e aprimorados do aplicativo IoT Central. A exportação de dados envia as alterações quase em tempo real para outras partes da solução de nuvem para percepções, análises e armazenamento de caminho quente.

Por exemplo, você pode:

  • Exportar continuamente dados de telemetria, de alterações de propriedade, de conectividade do dispositivo, de ciclo de vida de dispositivos, de ciclo de vida de modelos de dispositivos e de log de auditoria no formato JSON quase em tempo real.
  • Filtrar os fluxos de dados para exportar dados que correspondam às condições personalizadas.
  • Enriquecer os fluxos de dados com valores personalizados e valores de propriedade do dispositivo.
  • Transforme os fluxos de dados para modificar a forma e o conteúdo.

Dica

Ao ativar a exportação de dados, você obtém apenas os dados desse momento em diante. Para reter dados mais históricos, ative a exportação de dados no início. Para exportar manualmente dados de momentos em que a exportação de dados foi desativada, consulte Como usar a API REST do IoT Central para consultar dispositivos.

Observação

Em algumas circunstâncias, pode levar até 60 segundos para que as mensagens sejam exportadas. Esse tempo é medido desde quando o IoT Central recebe a mensagem do hub IoT subjacente até quando a mensagem é entregue ao ponto de extremidade de destino.

Pré-requisitos

Para usar os recursos de exportação de dados, você deve ter um ter a permissão de Exportação de dados.

Para saber como gerenciar a exportação de dados usando a API REST do IoT Central, consulte Como usar a API REST do IoT Central para gerenciar exportações de dados.

Configurar um destino de exportação de Armazenamento de Blobs

O IoT Central exporta dados uma vez por minuto, com cada arquivo contendo o lote de alterações desde a exportação anterior. Os dados exportados são salvos no formato JSON. Os caminhos padrão dos dados exportados em sua conta de armazenamento são:

  • Telemetria: {container}/{app-id}/{partition_id}/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • Alterações de propriedades: {container}/{app-id}/{partition_id}/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}

Para procurar os arquivos exportados no portal do Azure, navegue até o arquivo e selecione Editar blob.

Opções de conexão

Os destinos do Armazenamento de Blobs permite a configuração da conexão com uma cadeia de conexão ou uma identidade gerenciada.

Dica

Se o destino de Armazenamento de Blobs estiver protegido por um firewall, será necessário usar uma identidade gerenciada para se conectar a ele.

As identidades gerenciadas são mais seguras porque:

  • Você não armazena as credenciais do recurso em uma cadeia de conexão no aplicativo IoT Central.
  • As credenciais são vinculadas automaticamente ao tempo de vida do aplicativo IoT Central.
  • As identidades gerenciadas giram automaticamente suas chaves de segurança de forma regular.

Atualmente o IoT Central usa identidades gerenciadas atribuídas pelo sistema.

Quando você configura uma identidade gerenciada, a configuração inclui um escopo e uma função:

  • O escopo define o local em que você pode usar a identidade gerenciada. Por exemplo, você pode usar um grupo de recursos do Azure como o escopo. Nesse caso, o aplicativo do IoT Central e o destino devem estar no mesmo grupo de recursos.
  • A função define quais permissões foram concedidas ao aplicativo do IoT Central no serviço de destino. Por exemplo, para um aplicativo do IoT Central enviar dados para um hub de eventos, a identidade gerenciada precisa da atribuição de função Remetente de Dados dos Hubs de Eventos do Azure.

O vídeo a seguir fornece mais informações sobre identidades gerenciadas atribuídas pelo sistema:

Cuidado

Para exportar para o armazenamento de blobs, não use o Colaborador da Conta de Armazenamento, conforme mostrado no vídeo. Em vez disso, use a função Colaborador de Dados do Blob de Armazenamento.

Criar um destino do Armazenamento de Blobs do Azure

Este artigo mostra como criar uma identidade gerenciada usando a CLI do Azure. Você também pode usar o portal do Azure para criar uma identidade gerenciada.

Se você não tem uma conta de armazenamento do Azure existente para exportar, execute o script a seguir no ambiente bash do Azure Cloud Shell. O script cria um grupo de recursos, uma conta de Armazenamento do Azure e um contêiner de blob. O script habilita a identidade gerenciada para seu aplicativo IoT Central e atribui a função necessária para acessar sua conta de armazenamento:

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

Você pode saber mais sobre a criação de novas contas do Armazenamento de Blobs do Azure ou de novas contas de armazenamento do Azure Data Lake Storage v2. A exportação de dados só pode gravar dados em contas de armazenamento que dão suporte para blobs de blocos. A seguinte tabela mostra os tipos de conta de armazenamento compatíveis conhecidos:

Nível de desempenho Tipo de Conta
Standard Uso Geral V2
Standard Uso Geral V1
Standard Armazenamento de Blobs
Premium Armazenamento de Blobs de blocos

Para proteger ainda mais seu contêiner de blob e permitir o acesso apenas de serviços confiáveis com identidades gerenciadas, confira Exportar dados para um destino seguro em uma Rede Virtual do Azure.

Para criar o destino do Armazenamento de Blobs no IoT Central na página Exportação de dados:

  1. Selecione + Novo destino.

  2. Selecione Armazenamento de Blobs do Azure como o tipo de destino.

  3. Selecione Identidade gerenciada atribuída pelo sistema como o tipo de autorização.

  4. Insira o URI do ponto de extremidade da sua conta de armazenamento e o nome do contêiner diferenciando maiúsculas de minúsculas. Um URI de ponto de extremidade é parecido com: https://contosowaste.blob.core.windows.net.

  5. Selecione Salvar.

Caso não visualize dados chegando no serviço de destino, confira Solucionar problemas com exportações de dados do aplicativo do Azure IoT Central.

Configurar uma exportação de dados

Agora que você tem um destino para o qual exportar os dados, configure a exportação em seu aplicativo do IoT Central:

  1. Entre no aplicativo IoT Central.

  2. No painel esquerdo, selecione Exportação de dados.

    Dica

    Caso a opção Exportação de dados não apareça no painel esquerdo, você não tem permissões para configurar a exportação de dados no aplicativo. Contate o administrador para configurar a exportação de dados.

  3. Selecione + Nova exportação.

  4. Insira um nome de exibição para a nova exportação e verifique se a exportação de dados está Habilitada.

  5. Escolha o tipo de dados a serem exportados. A seguinte tabela lista os tipos de exportação de dados compatíveis:

    Tipo de dados Descrição Formato de dados
    Telemetria Exporte mensagens de telemetria de dispositivos quase em tempo real. Cada mensagem exportada contém o conteúdo completo da mensagem do dispositivo original, normalizado. Formato de mensagem de telemetria
    Alterações de propriedade Exporte as alterações em propriedades de dispositivo e de nuvem quase em tempo real. No caso de propriedades de dispositivo somente leitura, são exportadas as alterações nos valores relatados. No caso de propriedades de leitura/gravação, são exportados tanto o valor relatado quanto o desejado. Formato de mensagem de alteração de propriedade
    Conectividade do dispositivo Exportar eventos conectados e desconectados do dispositivo. Formato de mensagem de conectividade do dispositivo
    Ciclo de vida do dispositivo Exportar eventos dispositivos registrados, excluídos, provisionados, habilitados, desabilitados, displayNamechanged e deviceTemplateChanged. Formato de mensagem de alterações de ciclo de vida de dispositivo
    Ciclo de vida de modelos de dispositivos Exportar alterações em modelos de dispositivos publicadas, incluindo criação, atualização e exclusão. Formato de mensagem de alterações de ciclo de vida de modelo de dispositivo
    Logs de auditoria Logs de atualizações iniciadas pelo usuário para entidades no aplicativo. Para saber mais, confira Usar logs de auditoria para rastrear a atividade no aplicativo IoT Central Formato da mensagem do log de auditoria
  6. Opcionalmente, adicione filtros para reduzir a quantidade de dados exportados. Há diferentes tipos de filtro disponíveis para cada tipo de exportação de dados:

    Tipo de dados Filtros disponíveis
    Telemetria
    • Filtrar por nome do dispositivo, ID do dispositivo, modelo do dispositivo e se o dispositivo é simulado
    • Filtrar o fluxo para conter apenas telemetria que atenda às condições de filtro
    • Filtrar o fluxo para conter somente telemetria de dispositivos com propriedades que correspondem às condições de filtro
    • Filtre o fluxo para conter somente a telemetria com propriedades de mensagem que correspondem às condições de filtro. As propriedades da mensagem (também conhecidas como propriedades do aplicativo) são enviadas em um recipiente de pares chave-valor em cada mensagem de telemetria. Para criar um filtro de propriedade de mensagem, insira a chave de propriedade de mensagem que você está procurando e especifique uma condição. Somente as mensagens de telemetria com propriedades que correspondem à condição de filtro especificada são exportadas. Saiba mais sobre as propriedades do aplicativo nos documentos do Hub IoT
    Alterações de propriedade
    • Filtrar por nome do dispositivo, ID do dispositivo, modelo do dispositivo e se o dispositivo é simulado
    • Filtrar o fluxo para conter apenas alterações de propriedade que atendam às condições de filtro
    Conectividade do dispositivo
    • Filtrar por nome do dispositivo, ID do dispositivo, modelo do dispositivo, organizações e se o dispositivo é simulado
    • Filtrar o fluxo para conter somente alterações de dispositivos com propriedades que correspondem às condições de filtro
    Ciclo de vida do dispositivo
    • Filtrar por nome do dispositivo, ID do dispositivo, modelo do dispositivo e se o dispositivo é provisionado, habilitado ou simulado
    • Filtrar o fluxo para conter somente alterações de dispositivos com propriedades que correspondem às condições de filtro
    Ciclo de vida de modelos de dispositivos
    • Filtrar por modelo de dispositivo
    Logs de auditoria N/D
  7. Opcionalmente, enriqueça as mensagens exportadas com metadados de pares chave-valor adicionais. Os aprimoramentos a seguir estão disponíveis para a telemetria, as alterações de propriedade, a conectividade do dispositivo e os tipos de exportação de dados do ciclo de vida do dispositivo:

    • Cadeia de caracteres personalizada: adiciona uma cadeia de caracteres estática personalizada a cada mensagem. Insira qualquer chave e qualquer valor de cadeia de caracteres.
    • Propriedade, que adiciona a cada mensagem:
      • Metadados do dispositivo, como nome do dispositivo, nome do modelo de dispositivo, habilitado, organizações, provisionado e simulado.
      • O valor atual da propriedade relatada do dispositivo ou da propriedade de nuvem a cada mensagem. Se a mensagem exportada for de um dispositivo que não tem a propriedade especificada, ela não obterá o enriquecimento.

Configurar o destino de exportação:

  1. Selecione + Destino para adicionar um destino que você já tenha criado, ou selecione Criar um novo.

  2. Para transformar os dados antes de exportá-los, selecione + Transformar. Para saber mais, confira Transformar dados dentro do aplicativo do IoT Central para exportação.

  3. Selecione +Destino para adicionar até cinco destinos a uma única exportação.

  4. Quando terminar de configurar a exportação, selecione Salvar. Depois de alguns minutos, os dados aparecem nos destinos.

Monitorar a exportação

No IoT Central, a página Exportação de dados permite verificar o status de suas exportações. Você também pode usar o Azure Monitor para ver a quantidade de dados que está exportando e os erros de exportação. É possível acessar as métricas de exportação e de integridade do dispositivo em gráficos no portal do Azure usando a API REST, as consultas no PowerShell ou a CLI do Azure. No momento, você pode monitorar as seguintes métricas de exportação de dados no Azure Monitor:

  • O número de mensagens recebidas para exportação antes da aplicação dos filtros.
  • O número de mensagens que passam pelos filtros.
  • O número de mensagens exportadas para os destinos.
  • Número de erros encontrados.

Para saber mais, confira Monitorar a integridade do aplicativo.

Formatos de dados

As seções a seguir descrevem os formatos dos dados exportados:

Formato da telemetria

Cada mensagem exportada contém uma forma normalizada da mensagem completa que o dispositivo enviou no corpo. A mensagem está no formato JSON e codificada como UTF-8. As informações em cada mensagem incluem:

  • applicationId: a ID do aplicativo do IoT Central.
  • messageSource: a origem da mensagem – telemetry.
  • deviceId: a ID do dispositivo que enviou a mensagem de telemetria.
  • schema: o nome e a versão do esquema de conteúdo.
  • templateId: : a ID do modelo de dispositivo atribuída ao dispositivo.
  • enqueuedTime: a hora em que o IoT Central recebeu essa mensagem.
  • enrichments: os aprimoramentos configurados na exportação.
  • module: O módulo do IoT Edge que enviou esta mensagem. Esse campo só aparecerá se a mensagem vier de um módulo do IoT Edge.
  • component: O componente que enviou esta mensagem. Esse campo só aparecerá se os recursos enviados na mensagem forem modeladas como um componente no modelo de dispositivo
  • messageProperties: outras propriedades que o dispositivo enviou com a mensagem. Essas propriedades também são chamadas de propriedades do aplicativo. Saiba mais na documentação do Hub IoT.

Para o Armazenamento de Blobs, as mensagens são agrupadas em lote e exportadas uma vez por minuto.

O seguinte exemplo mostra uma mensagem de telemetria exportada:


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

Propriedades da mensagem

As mensagens de telemetria têm propriedades para metadados além do conteúdo. O snippet anterior mostra exemplos de mensagens do sistema, como deviceId e enqueuedTime. Para saber mais sobre as propriedades de mensagem do sistema, confira Propriedades do sistema de mensagens do Hub IoT do D2C.

Você pode adicionar propriedades às mensagens de telemetria para incluir metadados personalizados. Por exemplo, você precisa adicionar um carimbo de data/hora quando o dispositivo cria a mensagem.

O seguinte snippet de código mostra como adicionar a propriedade iothub-creation-time-utc à mensagem ao criá-la no dispositivo:

Importante

O formato deste carimbo de data/hora deve ser UTC sem informações de fuso horário. Por exemplo, 2021-04-21T11:30:16Z é válido e 2021-04-21T11:30:16-07:00 é inválido.

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

Formato das alterações de propriedades

Cada mensagem ou registro representa alterações em propriedades de dispositivo e de nuvem. As informações na mensagem exportada incluem:

  • applicationId: a ID do aplicativo do IoT Central.
  • messageSource: a origem da mensagem – properties.
  • messageType: cloudPropertyChange, devicePropertyDesiredChange ou devicePropertyReportedChange.
  • deviceId: a ID do dispositivo que enviou a mensagem de telemetria.
  • schema: o nome e a versão do esquema de conteúdo.
  • enqueuedTime: a hora em que o IoT Central detectou essa alteração.
  • templateId: : a ID do modelo de dispositivo atribuída ao dispositivo.
  • properties: uma matriz de propriedades que foi alterada, incluindo os nomes das propriedades e valores que foram alterados. As informações do componente e do módulo serão incluídas se a propriedade for modelada em um componente ou em um módulo do IoT Edge.
  • enrichments: os aprimoramentos configurados na exportação.

Para o Armazenamento de Blobs, as mensagens são agrupadas em lote e exportadas uma vez por minuto.

O seguinte snippet mostra uma mensagem de alteração de propriedade exportada para o Armazenamento de Blobs:

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

Formato das alterações de conectividade do dispositivo

Cada mensagem ou registro representa um evento de conectividade de um único dispositivo. As informações na mensagem exportada incluem:

  • applicationId: a ID do aplicativo do IoT Central.
  • messageSource: a origem da mensagem – deviceConnectivity.
  • messageType: connected ou disconnected.
  • deviceId: a ID do dispositivo que foi alterado.
  • schema: o nome e a versão do esquema de conteúdo.
  • templateId: : a ID do modelo de dispositivo atribuída ao dispositivo.
  • enqueuedTime: a hora em que a alteração ocorreu no IoT Central.
  • enrichments: os aprimoramentos configurados na exportação.

Para o Armazenamento de Blobs, as mensagens são agrupadas em lote e exportadas uma vez por minuto.

O exemplo a seguir mostra uma mensagem de conectividade de dispositivo exportada recebida no Armazenamento de Blobs do 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"
  }
}

Formato das alterações de ciclo de vida de dispositivo

Cada mensagem ou registro representa uma alteração em um dispositivo. As informações na mensagem exportada incluem:

  • applicationId: a ID do aplicativo do IoT Central.
  • messageSource: a origem da mensagem – deviceLifecycle.
  • messageType: O tipo de alteração que ocorreu. Um destes: registered, deleted, provisioned, enabled, disabled, displayNameChanged e deviceTemplateChanged.
  • deviceId: a ID do dispositivo que foi alterado.
  • schema: o nome e a versão do esquema de conteúdo.
  • templateId: : a ID do modelo de dispositivo atribuída ao dispositivo.
  • enqueuedTime: a hora em que a alteração ocorreu no IoT Central.
  • enrichments: os aprimoramentos configurados na exportação.

Para o Armazenamento de Blobs, as mensagens são agrupadas em lote e exportadas uma vez por minuto.

O exemplo a seguir mostra uma mensagem de ciclo de vida de dispositivo exportada recebida no Armazenamento de Blobs do 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"
  }
}

Formato de alterações de ciclo de vida de modelo de dispositivo

Cada mensagem ou registro representa uma alteração em um modelo de dispositivo publicado. As informações na mensagem exportada incluem:

  • applicationId: a ID do aplicativo do IoT Central.
  • messageSource: a origem da mensagem – deviceTemplateLifecycle.
  • messageType: created, updated ou deleted.
  • schema: o nome e a versão do esquema de conteúdo.
  • templateId: : a ID do modelo de dispositivo atribuída ao dispositivo.
  • enqueuedTime: a hora em que a alteração ocorreu no IoT Central.
  • enrichments: os aprimoramentos configurados na exportação.

Para o Armazenamento de Blobs, as mensagens são agrupadas em lote e exportadas uma vez por minuto.

O exemplo a seguir mostra uma mensagem de ciclo de vida de dispositivo exportada recebida no Armazenamento de Blobs do 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"
  }
}

Formato do log de auditoria

Cada mensagem do log de auditoria representa uma alteração iniciada pelo usuário para uma entidade auditável dentro do aplicativo IoT Central. As informações na mensagem exportada incluem:

  • actor: informações sobre o usuário que modificou a entidade.
  • applicationId: a ID do aplicativo do IoT Central.
  • messageSource: a origem da mensagem – audit.
  • messageType: O tipo de alteração que ocorreu. Uma opção entre updated, created e deleted.
  • updated: presente somente quando messageType é updated. Fornece mais detalhes sobre a atualização.
  • resource: detalhes da entidade modificada.
  • schema: o nome e a versão do esquema de conteúdo.
  • deviceId: a ID do dispositivo que foi alterado.
  • enqueuedTime: a hora em que a alteração ocorreu no IoT Central.
  • enrichments: os aprimoramentos configurados na exportação.

O seguinte exemplo mostra uma mensagem do log de auditoria exportado recebida no Armazenamento de Blobs do 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"
}

Próximas etapas

Agora que você sabe como fazer a exportação para o Armazenamento de Blobs, a próxima etapa sugerida é aprender como Exportar para Barramento de Serviço.