Exportar dados de IoT para o Armazenamento de Blobs

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

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

Por exemplo, pode:

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

Gorjeta

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

Nota

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 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 do 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 para os dados exportados em sua conta de armazenamento são:

  • Telemetria: {container}/{app-id}/{partition_id}/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • Alterações de propriedade: {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 ligação

Os destinos de armazenamento de Blob permitem configurar a conexão com uma cadeia de conexão ou uma identidade gerenciada.

Gorjeta

Se o destino do Armazenamento de Blobs estiver protegido por um firewall, você deverá 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 automaticamente vinculadas ao tempo de vida do seu aplicativo IoT Central.
  • As identidades gerenciadas alternam automaticamente suas chaves de segurança regularmente.

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

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

  • O escopo define onde você pode usar a identidade gerenciada. Por exemplo, você pode usar um grupo de recursos do Azure como escopo. Nesse caso, o aplicativo IoT Central e o destino devem estar no mesmo grupo de recursos.
  • A função define quais permissões o aplicativo IoT Central recebe no serviço de destino. Por exemplo, para que um aplicativo do IoT Central envie 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 ao sistema:

Atenção

Para exportar para 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 de Blob de Armazenamento .

Criar um destino de Armazenamento de Blob 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 tiver uma conta de armazenamento do Azure existente para exportar, execute o seguinte script 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. Em seguida, 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 como criar novas contas de Armazenamento de Blob do Azure ou contas de armazenamento do Azure Data Lake Storage v2. A exportação de dados só pode gravar dados em contas de armazenamento que ofereçam suporte a blobs de bloco. A tabela a seguir mostra os tipos de conta de armazenamento compatíveis conhecidos:

Escalão de Desempenho Tipo de Conta
Standard Fins Gerais V2
Standard Fins Gerais V1
Standard Armazenamento de Blobs
Premium Armazenamento de Blob de bloco

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

Para criar o destino de Armazenamento de Blob 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 ao sistema como o tipo de autorização.

  4. Insira o URI do ponto de extremidade para sua conta de armazenamento e o nome do contêiner que diferencia maiúsculas de minúsculas. Um URI de ponto de extremidade tem a seguinte aparência: https://contosowaste.blob.core.windows.net.

  5. Selecione Guardar.

Se não vir os dados a chegar ao seu serviço de destino, consulte Resolução de problemas com exportações de dados da sua aplicação Azure IoT Central.

Configurar uma exportação de dados

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

  1. Faça login no seu aplicativo IoT Central.

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

    Gorjeta

    Se não vir Exportação de dados no painel esquerdo, não tem permissões para configurar a exportação de dados na sua aplicação. Fale com um administrador para configurar a exportação de dados.

  3. Selecione + Nova exportação.

  4. Introduza um nome para apresentação para a nova exportação e certifique-se de que a exportação de dados está Ativada.

  5. Escolha o tipo de dados a exportar. A tabela a seguir lista os tipos de exportação de dados suportados:

    Tipo de dados Description Formato dos dados
    Telemetria Exporte mensagens de telemetria de dispositivos quase em tempo real. Cada mensagem exportada contém o conteúdo completo da mensagem original do dispositivo, normalizada. Formato de mensagem de telemetria
    Alterações de propriedade Exporte alterações para propriedades de dispositivos e nuvem quase em tempo real. Para propriedades de dispositivo somente leitura, as alterações nos valores relatados são exportadas. Para propriedades de leitura-gravação, os valores relatados e desejados são exportados. Alterar formato de mensagem de propriedade
    Conectividade dos dispositivos Exporte eventos conectados e desconectados do dispositivo. Formato de mensagem de conectividade do dispositivo
    Ciclo de vida dos dispositivos Exporte eventos de dispositivo registrado, excluído, provisionado, habilitado, desabilitado, displayNameChanged e deviceTemplateChanged. O ciclo de vida do dispositivo altera o formato da mensagem
    Ciclo de vida do modelo de dispositivo Exporte alterações de modelo de dispositivo publicadas, incluindo criado, atualizado e excluído. O ciclo de vida do modelo de dispositivo altera o formato da mensagem
    Registos de auditoria Logs de atualizações iniciadas pelo usuário para entidades no aplicativo. Para saber mais, consulte Usar logs de auditoria para controlar a atividade em seu aplicativo IoT Central Formato de mensagem do log de auditoria
  6. Opcionalmente, adicione filtros para reduzir a quantidade de dados exportados. Existem 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 de dispositivo e se o dispositivo for simulado
    • Fluxo de filtro para conter apenas telemetria que atenda às condições de filtro
    • Fluxo de filtro para conter apenas telemetria de dispositivos com propriedades correspondentes às condições do filtro
    • Fluxo de filtro para conter apenas telemetria que tenha propriedades de mensagem que atendam à condição de filtro. As propriedades da mensagem (também conhecidas como propriedades do aplicativo) são enviadas em um pacote de pares chave-valor em cada mensagem de telemetria. Para criar um filtro de propriedade de mensagem, insira a chave de propriedade da mensagem que você está procurando e especifique uma condição. Somente 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 de dispositivo e se o dispositivo for simulado
    • Fluxo de filtro para conter apenas alterações de propriedade que atendam às condições de filtro
    Conectividade dos dispositivos
    • Filtrar por nome de dispositivo, ID do dispositivo, modelo de dispositivo, organizações e se o dispositivo é simulado
    • Fluxo de filtro para conter apenas alterações de dispositivos com propriedades correspondentes às condições do filtro
    Ciclo de vida dos dispositivos
    • Filtrar por nome de dispositivo, ID do dispositivo, modelo de dispositivo e se o dispositivo estiver provisionado, habilitado ou simulado
    • Fluxo de filtro para conter apenas alterações de dispositivos com propriedades correspondentes às condições do filtro
    Ciclo de vida do modelo de dispositivo
    • Filtrar por modelo de dispositivo
    Registos de auditoria N/A
  7. Opcionalmente, enriqueça as mensagens exportadas com metadados extras do par chave-valor. Os seguintes enriquecimentos estão disponíveis para os tipos de exportação de dados de telemetria, alterações de propriedade, conectividade de dispositivos e ciclo de vida do dispositivo:

    • Cadeia de caracteres personalizada: adiciona uma cadeia de caracteres estática personalizada a cada mensagem. Insira qualquer chave e insira 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 dispositivo atual relatou a propriedade ou o valor da propriedade de nuvem para cada mensagem. Se a mensagem exportada for de um dispositivo que não tem a propriedade especificada, a mensagem exportada não receberá o enriquecimento.

Configure o destino da exportação:

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

  2. Para transformar seus dados antes de serem exportados, selecione + Transformar. Para saber mais, consulte Transformar dados dentro do seu aplicativo 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 Guardar. Após alguns minutos, seus dados aparecem em seus destinos.

Monitorize a sua exportação

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

  • Número de mensagens recebidas para exportação antes que os filtros sejam aplicados.
  • Número de mensagens que passam por filtros.
  • Número de mensagens exportadas com êxito para destinos.
  • Número de erros encontrados.

Para saber mais, consulte Monitorar a integridade do aplicativo.

Formatos de dados

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

Formato de telemetria

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

  • applicationId: A ID do aplicativo IoT Central.
  • messageSource: A fonte da mensagem - telemetry.
  • deviceId: A ID do dispositivo que enviou a mensagem de telemetria.
  • schema: O nome e a versão do esquema de carga útil.
  • templateId: A ID do modelo de dispositivo atribuído ao dispositivo.
  • enqueuedTime: A hora em que o IoT Central recebeu esta mensagem.
  • enrichments: Eventuais enriquecimentos estabelecidos na exportação.
  • module: O módulo IoT Edge que enviou esta mensagem. Este campo só aparece se a mensagem tiver vindo de um módulo do IoT Edge.
  • component: O componente que enviou esta mensagem. Este campo só aparece se os recursos enviados na mensagem foram modelados como um componente no modelo de dispositivo
  • messageProperties: Outras propriedades que o dispositivo enviou com a mensagem. Essas propriedades às vezes são chamadas de propriedades do aplicativo. Saiba mais nos documentos do Hub IoT.

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

O exemplo a seguir 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, bem como para a carga útil de telemetria. O trecho anterior mostra exemplos de mensagens do sistema, como deviceId e enqueuedTime. Para saber mais sobre as propriedades das mensagens do sistema, consulte Propriedades do sistema das mensagens do Hub IoT D2C.

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

O trecho de código a seguir mostra como adicionar a iothub-creation-time-utc propriedade à mensagem quando você a cria 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, 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);
}

Alteração de formato de propriedade

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

  • applicationId: A ID do aplicativo IoT Central.
  • messageSource: A fonte da mensagem - properties.
  • messageType: Ou 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 carga útil.
  • enqueuedTime: O momento em que o IoT Central detetou essa alteração.
  • templateId: A ID do modelo de dispositivo atribuído ao dispositivo.
  • properties: Uma matriz de propriedades que foram alteradas, 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 dentro de um componente ou de um módulo IoT Edge.
  • enrichments: Eventuais enriquecimentos estabelecidos na exportação.

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

O trecho a seguir 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"
        }
    ]
}

Conectividade do dispositivo muda de formato

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 IoT Central.
  • messageSource: A fonte da mensagem - deviceConnectivity.
  • messageType: Ou connecteddisconnectedou .
  • deviceId: O ID do dispositivo que foi alterado.
  • schema: O nome e a versão do esquema de carga útil.
  • templateId: A ID do modelo de dispositivo atribuído ao dispositivo.
  • enqueuedTime: O momento em que essa alteração ocorreu no IoT Central.
  • enrichments: Eventuais enriquecimentos estabelecidos na exportação.

Para o Armazenamento de Blobs, as mensagens são enviadas 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 no ciclo de vida do dispositivo

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

  • applicationId: A ID do aplicativo IoT Central.
  • messageSource: A fonte da mensagem - deviceLifecycle.
  • messageType: O tipo de alteração que ocorreu. Um dos: registered, deleted, , provisioned, enabled, displayNameChangeddisabled, e deviceTemplateChanged.
  • deviceId: O ID do dispositivo que foi alterado.
  • schema: O nome e a versão do esquema de carga útil.
  • templateId: A ID do modelo de dispositivo atribuído ao dispositivo.
  • enqueuedTime: O momento em que essa alteração ocorreu no IoT Central.
  • enrichments: Eventuais enriquecimentos estabelecidos na exportação.

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

O exemplo a seguir mostra uma mensagem do ciclo de vida do dispositivo exportado 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"
  }
}

O ciclo de vida do modelo de dispositivo altera o formato

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

  • applicationId: A ID do aplicativo IoT Central.
  • messageSource: A fonte da mensagem - deviceTemplateLifecycle.
  • messageType: Ou created, updated, ou deleted.
  • schema: O nome e a versão do esquema de carga útil.
  • templateId: A ID do modelo de dispositivo atribuído ao dispositivo.
  • enqueuedTime: O momento em que essa alteração ocorreu no IoT Central.
  • enrichments: Eventuais enriquecimentos estabelecidos na exportação.

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

O exemplo a seguir mostra uma mensagem do ciclo de vida do dispositivo exportado 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 registo de auditoria

Cada mensagem de log de auditoria representa uma alteração iniciada pelo usuário em 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 IoT Central.
  • messageSource: A fonte da mensagem - audit.
  • messageType: O tipo de alteração que ocorreu. Um dos: updated, created, deleted.
  • updated: Só presente se messageType for updated. Fornece mais detalhes sobre a atualização.
  • resource: Detalhes da entidade modificada.
  • schema: O nome e a versão do esquema de carga útil.
  • deviceId: O ID do dispositivo que foi alterado.
  • enqueuedTime: O momento em que essa alteração ocorreu no IoT Central.
  • enrichments: Eventuais enriquecimentos estabelecidos na exportação.

O exemplo a seguir mostra uma mensagem de log de auditoria exportada recebida no Armazenamento de Blob 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óximos passos

Agora que você sabe como exportar para o Armazenamento de Blob, uma próxima etapa sugerida é aprender Exportar para o Service Bus.