Erstellen einer Event Grid-Datenverbindung für Azure Data Explorer mit SDKs

In diesem Artikel erfahren Sie, wie Blobs aus Ihrem Speicherkonto unter Verwendung einer Event Grid-Datenverbindung in Azure Data Explorer erfasst werden. Sie erstellen eine Event Grid-Datenverbindung, über die ein Azure Event Grid-Abonnement festgelegt wird. Das Event Grid-Abonnement leitet Ereignisse aus Ihrem Speicherkonto über Azure Event Hubs an Azure Data Explorer weiter.

Informationen zum Erstellen der Verbindung im Azure-Portal oder mit einer ARM-Vorlage finden Sie unter Erstellen einer Event Grid-Datenverbindung.

Allgemeine Informationen zur Erfassung in Azure Data Explorer aus Event Grid finden Sie unter Herstellen einer Verbindung mit Event Grid.

Hinweis

Um die beste Leistung mit der Event Grid-Verbindung zu erzielen, legen Sie die rawSizeBytes Erfassungseigenschaft über die Blobmetadaten fest. Weitere Informationen finden Sie unter Erfassungseigenschaften.

Codebeispiele, die auf früheren SDK-Versionen basieren, finden Sie im archivierten Artikel.

Voraussetzungen

Erstellen einer Event Grid-Datenverbindung

In diesem Abschnitt stellen Sie eine Verbindung zwischen Event Grid und Ihrer Azure Data Explorer-Tabelle her.

  1. Installieren Sie das NuGet-Paket Microsoft.Azure.Management.Kusto.

  2. Erstellen Sie einen Microsoft Entra Anwendungsprinzipal, der für die Authentifizierung verwendet werden soll. Sie benötigen die Verzeichnis-ID (Mandanten-ID), die Anwendungs-ID und den geheimen Clientschlüssel.

  3. Führen Sie den folgenden Code aus.

    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);
    
    Einstellung Empfohlener Wert Feldbeschreibung
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Ihre Mandanten-ID. Wird auch als Verzeichnis-ID bezeichnet.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Die Abonnement-ID, die Sie für die Ressourcenerstellung verwenden.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Die Client-ID der Anwendung, die auf Ressourcen in Ihrem Mandanten zugreifen kann.
    clientSecret PlaceholderClientSecret Das Clientgeheimnis der Anwendung, die auf Ressourcen in Ihrem Mandanten zugreifen kann.
    resourceGroupName testrg Der Name der Ressourcengruppe, die Ihren Cluster enthält.
    clusterName mykustocluster Der Name Ihres Clusters.
    databaseName mykustodatabase Der Name der Zieldatenbank in Ihrem Cluster.
    eventGridConnectionName myeventgridconnect Der gewünschte Name Ihrer Datenverbindung.
    tableName StormEvents Der Name der Zieltabelle in der Zieldatenbank.
    mappingRuleName StormEvents_CSV_Mapping Der Name der Spaltenzuordnung, die mit der Zieltabelle verknüpft ist.
    dataFormat csv Das Datenformat der Nachricht.
    eventHubResourceId Ressourcen-ID Die Ressourcen-ID Ihres Event Hubs, in dem Event Grid für das Senden von Ereignissen konfiguriert ist
    storageAccountResourceId Ressourcen-ID Die Ressourcen-ID Ihres Speicherkontos, das die Daten für die Erfassung enthält.
    consumerGroup $Default Die Consumergruppe Ihres Event Hubs.
    location USA, Mitte Der Speicherort der Datenverbindungsressource.
    blobStorageEventType Microsoft.Storage.BlobCreated Der Typ des Ereignisses, das die Erfassung auslöst Folgende Ereignisse werden unterstützt: „Microsoft.Storage.BlobCreated“ oder „Microsoft.Storage.BlobRenamed“. Das Umbenennen von Blobs wird nur für ADLSv2-Speicher unterstützt.
    databaseRouting Multi oder Single Das Datenbankrouting für die Verbindung. Wenn Sie den Wert auf Single festlegen, wird die Datenverbindung wie in der Einstellung databaseName angegeben an eine einzelne Datenbank im Cluster geroutet. Wenn Sie den Wert auf Multi festlegen, können Sie die Standardzieldatenbank mithilfe der ErfassungseigenschaftDatabase überschreiben. Weitere Informationen finden Sie unter Ereignisrouting.

Verwenden der Event Grid-Datenverbindung

In diesem Abschnitt wird gezeigt, wie Sie die Erfassung von Azure Blob Storage oder Azure Data Lake Gen 2 in Ihren Cluster nach der Bloberstellung oder Blobumbenennung auslösen.

Wählen Sie die relevante Registerkarte basierend auf dem Typ des Speicher-SDK aus, das zum Hochladen von Blobs verwendet wird.

Im folgenden Codebeispiel wird das Azure Blob Storage SDK verwendet, um eine Datei in Azure Blob Storage hochzuladen. Der Upload löst die Event Grid-Datenverbindung aus, die die Daten in Azure Data Explorer erfasst.

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

Hinweis

Azure Data Explorer löscht die Blobs nach der Erfassung nicht. Behalten Sie die Blobs für drei bis fünf Tage bei, indem Sie den Azure Blob Storage-Lebenszyklus zum Verwalten von Bloblöschungen verwenden.

Hinweis

Das Auslösen der Erfassung nach einem CopyBlob Vorgang wird für Speicherkonten nicht unterstützt, für die das Feature für hierarchische Namespaces aktiviert ist.

Entfernen einer Event Grid-Datenverbindung

Führen Sie den folgenden Befehl aus, um die Event Grid-Verbindung zu entfernen:

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