Compartilhar via


Criar uma conexão de dados da Grade de Eventos para o Azure Data Explorer com SDKs

Neste artigo, você aprende a incluir blobs de sua conta de armazenamento no Azure Data Explorer usando uma conexão de dados de grade de eventos. Você criará uma conexão de dados de grade de eventos que define uma assinatura da Grade de Eventos do Azure. A assinatura da Grade de Eventos roteia eventos de sua conta de armazenamento para o Azure Data Explorer por meio dos Hubs de Eventos do Azure.

Para saber como criar a conexão no portal do Azure ou com um modelo do ARM, consulte Criar uma conexão de dados da Grade de Eventos.

Para obter informações gerais sobre a ingestão no Azure Data Explorer da Grade de Eventos, confira Conectar-se à Grade de Eventos.

Observação

Para obter o melhor desempenho com a conexão da Grade de Eventos, defina a propriedade de ingestão rawSizeBytes por meio dos metadados do blob. Para obter mais informações, consulte propriedades de ingestão.

Para obter exemplo de código baseados em versões anteriores do SDK, consulte o artigo arquivado.

Pré-requisitos

Criar uma conexão de dados da Grade de Eventos

Nesta seção, você estabelecerá uma conexão entre a Grade de Eventos e sua tabela do Azure Data Explorer.

  1. Instale o pacote NuGet Microsoft.Azure.Management.Kusto.

  2. Crie uma entidade de aplicativo do Microsoft Entra para usar na autenticação. Você precisará da ID do diretório (locatário), da ID do aplicativo e do segredo do cliente.

  3. Execute o código a seguir.

    var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
    var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
    var clientSecret = "PlaceholderClientSecret"; //Client Secret
    var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
    var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
    var resourceManagementClient = new ArmClient(credentials, subscriptionId);
    var resourceGroupName = "testrg";
    //The cluster and database that are created as part of the Prerequisites
    var clusterName = "mykustocluster";
    var databaseName = "mykustodatabase";
    var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
    var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
    var cluster = (await resourceGroup.GetKustoClusterAsync(clusterName)).Value;
    var database = (await cluster.GetKustoDatabaseAsync(databaseName)).Value;
    var dataConnections = database.GetKustoDataConnections();
    var eventGridConnectionName = "myeventgridconnect";
    //The event hub and storage account that are created as part of the Prerequisites
    var eventHubResourceId = new ResourceIdentifier("/subscriptions/<storageAccountSubscriptionId>/resourceGroups/<storageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<storageAccountName>");
    var storageAccountResourceId = new ResourceIdentifier("/subscriptions/<eventHubSubscriptionId>/resourceGroups/<eventHubResourceGroupName>/providers/Microsoft.EventHub/namespaces/<eventHubNamespaceName>/eventhubs/<eventHubName>");
    var consumerGroup = "$Default";
    var location = AzureLocation.CentralUS;
    //The table and column mapping are created as part of the Prerequisites
    var tableName = "StormEvents";
    var mappingRuleName = "StormEvents_CSV_Mapping";
    var dataFormat = KustoEventGridDataFormat.Csv;
    var blobStorageEventType = BlobStorageEventType.MicrosoftStorageBlobCreated;
    var databaseRouting = KustoDatabaseRouting.Multi;
    var eventGridConnectionData = new KustoEventGridDataConnection
    {
        StorageAccountResourceId = storageAccountResourceId, EventHubResourceId = eventHubResourceId,
        ConsumerGroup = consumerGroup, TableName = tableName, Location = location, MappingRuleName = mappingRuleName,
        DataFormat = dataFormat, BlobStorageEventType = blobStorageEventType, DatabaseRouting = databaseRouting
    };
    await dataConnections.CreateOrUpdateAsync(WaitUntil.Completed, eventGridConnectionName, eventGridConnectionData);
    
    Configuração Valor sugerido Descrição do campo
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx ID do locatário. Também conhecida como ID do diretório.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx A ID da assinatura que você usa para a criação de recursos.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx A ID do cliente do aplicativo que pode acessar recursos em seu locatário.
    clientSecret PlaceholderClientSecret O segredo do cliente do aplicativo que pode acessar recursos em seu locatário.
    resourceGroupName testrg O nome do grupo de recursos que contém o seu cluster.
    clusterName mykustocluster O nome do seu cluster.
    databaseName mykustodatabase O nome do banco de dados de destino no cluster.
    eventGridConnectionName myeventgridconnect O nome desejado da conexão de dados.
    tableName StormEvents O nome da tabela de destino no banco de dados de destino.
    mappingRuleName StormEvents_CSV_Mapping O nome do mapeamento de coluna relacionado à tabela de destino.
    dataFormat csv O formato de dados da mensagem.
    eventHubResourceId ID de Recurso A ID do recurso do hub de eventos em que a Grade de Eventos foi configurada para enviar eventos.
    storageAccountResourceId ID de Recurso A ID do recurso da conta de armazenamento que contém os dados para ingestão.
    consumerGroup $Default O grupo de consumidores do hub de eventos.
    local Centro dos EUA A localização do recurso de conexão de dados.
    blobStorageEventType Microsoft.Storage.BlobCreated O tipo de evento que aciona a ingestão. Os eventos com suporte são: Microsoft.Storage.BlobCreated ou Microsoft.Storage.BlobRenamed. Há suporte para renomear blobs somente no armazenamento de ADLSv2.
    databaseRouting Multi ou Single O roteamento de banco de dados para a conexão. Se você definir o valor como Single, a conexão de dados será roteada para um banco de dados individual no cluster, conforme especificado na configuração databaseName. Se você definir o valor como Multi, poderá substituir o banco de dados de destino padrão usando Banco de dados ingestão propriedade. Para obter mais informações, confira Roteamento de evento.

Usar a conexão de dados da Grade de Eventos

Esta seção mostra como disparar a ingestão do Armazenamento de Blobs do Azure ou do Azure Data Lake Gen 2 para o seu cluster após a criação ou renomeação de blob.

Selecione a guia relevante com base no tipo de SDK de armazenamento usado para fazer upload de blobs.

O exemplo de código a seguir usa o Armazenamento de Blobs do Azure do SDK para carregar um arquivo no Armazenamento de Blobs do Azure. O upload dispara a conexão de dados da Grade de Eventos, que ingere os dados no Azure Data Explorer.

var azureStorageAccountConnectionString=<storage_account_connection_string>;
var containerName = <container_name>;
var blobName = <blob_name>;
var localFileName = <file_to_upload>;
var uncompressedSizeInBytes = <uncompressed_size_in_bytes>;
var mapping = <mappingReference>;
// Create a new container in your storage account.
var azureStorageAccount = CloudStorageAccount.Parse(azureStorageAccountConnectionString);
var blobClient = azureStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
// Set metadata and upload a file to the blob.
var blob = container.GetBlockBlobReference(blobName);
blob.Metadata.Add("rawSizeBytes", uncompressedSizeInBytes);
blob.Metadata.Add("kustoIngestionMappingReference", mapping);
blob.UploadFromFile(localFileName);
// Confirm success of the upload by listing the blobs in your container.
var blobs = container.ListBlobs();

Observação

O Azure Data Explorer não excluirá os blobs após a ingestão. Mantenha os blobs por três a cinco dias usando o ciclo de vida do Armazenamento de Blobs do Azure para gerenciar a exclusão de blobs.

Observação

O disparo da ingestão após uma operação CopyBlob não é compatível com contas de armazenamento que tenham o recurso de namespace hierárquico habilitado.

Importante

Não recomendamos fortemente gerar eventos de armazenamento a partir de código personalizado e enviá-los aos Hubs de Eventos do Azure. Se você optar por fazer isso, certifique-se de que os eventos produzidos sigam rigorosamente o esquema de eventos de armazenamento apropriado e as especificações de formato JSON.

Remover uma conexão de dados da Grade de Eventos

Para remover a conexão da Grade de Eventos, execute o seguinte comando:

kustoManagementClient.DataConnections.Delete(resourceGroupName, clusterName, databaseName, dataConnectionName);