다음을 통해 공유


SDK를 사용하여 Azure Data Explorer에 대한 Event Grid 데이터 연결 만들기

이 문서에서는 Event Grid 데이터 연결을 사용하여 스토리지 계정의 Blob을 Azure Data Explorer로 수집하는 방법을 알아봅니다. Azure Event Grid 구독을 설정하는 Event Grid 데이터 연결을 만듭니다. Event Grid 구독은 Azure Event Hubs를 통해 스토리지 계정에서 Azure Data Explorer로 이벤트를 라우팅합니다.

Azure Portal 또는 ARM 템플릿을 사용하여 연결을 만드는 방법을 알아보려면 Event Grid 데이터 연결 만들기를 참조하세요.

Event Grid에서 Azure Data Explorer에 수집하는 방법에 대한 일반적인 내용은 Event Grid에 연결을 참조하세요.

참고 항목

Event Grid 연결을 사용하여 최상의 성능을 얻으려면 Blob 메타데이터를 rawSizeBytes 통해 수집 속성을 설정합니다. 자세한 내용은 수집 속성을 참조 하세요.

이전 SDK 버전을 기반으로 하는 코드 샘플은 보관된 문서를 참조하세요.

필수 구성 요소

Event Grid 데이터 연결 만들기

이 섹션에서는 Event Grid와 Azure Data Explorer 테이블 간에 연결을 설정합니다.

  1. Microsoft.Azure.Management.Kusto NuGet 패키지를 설치합니다.

  2. 인증에 사용할 Microsoft Entra 애플리케이션 주체 를 만듭니다. 디렉터리(테넌트) ID, 애플리케이션 ID 및 클라이언트 암호가 필요합니다.

  3. 다음 코드를 실행합니다.

    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);
    
    설정 제안 값 필드 설명
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx 테넌트 ID 디렉터리 ID라고도 합니다.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx 리소스를 만드는 데 사용하는 구독 ID입니다.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx 테넌트의 리소스에 액세스할 수 있는 애플리케이션의 클라이언트 ID입니다.
    clientSecret PlaceholderClientSecret 테넌트의 리소스에 액세스할 수 있는 애플리케이션의 클라이언트 암호입니다.
    resourceGroupName testrg 클러스터가 포함된 리소스 그룹의 이름입니다.
    clusterName mykustocluster 클러스터의 이름입니다.
    databaseName mykustodatabase 클러스터에 있는 대상 데이터베이스의 이름입니다.
    eventGridConnectionName myeventgridconnect 원하는 데이터 연결 이름입니다.
    tableName StormEvents 대상 데이터베이스의 대상 테이블 이름입니다.
    mappingRuleName StormEvents_CSV_Mapping 대상 테이블과 관련된 열 매핑의 이름입니다.
    dataFormat csv 메시지의 데이터 형식입니다.
    eventHubResourceId 리소스 ID Event Grid가 이벤트를 보내도록 구성된 이벤트 허브의 리소스 ID입니다.
    storageAccountResourceId 리소스 ID 수집할 데이터를 보유하는 스토리지 계정의 리소스 ID입니다.
    consumerGroup $Default 이벤트 허브의 소비자 그룹입니다.
    위치 미국 중부 데이터 연결 리소스의 위치입니다.
    blobStorageEventType Microsoft.Storage.BlobCreated 수집을 트리거하는 이벤트 유형입니다. 지원되는 이벤트는 Microsoft.Storage.BlobCreated 또는 Microsoft.Storage.BlobRenamed입니다. Blob 이름 바꾸기는 ADLSv2 스토리지에 대해서만 지원됩니다.
    databaseRouting Multi 또는 Single 연결에 대한 데이터베이스 라우팅입니다. 값을 Single로 설정하면 databaseName 설정에 지정된 대로 데이터 연결이 클러스터의 단일 데이터베이스로 라우팅됩니다. 값을 Multi로 설정하면 데이터베이스 수집 속성을 사용하여 기본 대상 데이터베이스를 재정의할 있습니다. 자세한 내용은 이벤트 라우팅을 참조하세요.

Event Grid 데이터 연결 사용

이 섹션에서는 Blob 만들기 또는 Blob 이름 바꾸기 후 Azure Blob Storage 또는 Azure Data Lake Gen 2에서 클러스터로 수집을 트리거하는 방법을 보여 줍니다.

Blob을 업로드하는 데 사용되는 스토리지 SDK 유형에 따라 관련 탭을 선택합니다.

다음 코드 샘플에서는 Azure Blob Storage SDK를 사용하여 Azure Blob Storage에 파일을 업로드합니다. 업로드는 Event Grid 데이터 연결을 트리거하여 데이터를 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();

참고 항목

Azure Data Explorer는 수집 후 Blob을 삭제하지 않습니다. Azure Blob Storage 수명 주기를 통해 Blob 삭제를 관리하여 3~5일 동안 Blob을 보관합니다.

참고 항목

작업 후 CopyBlob 수집 트리거는 계층 구조 네임스페이스 기능을 사용하도록 설정된 스토리지 계정에 대해서는 지원되지 않습니다.

Important

사용자 지정 코드에서 스토리지 이벤트를 생성하고 Event Hubs로 보내는 것은 매우 권장되지 않습니다. 이렇게 하려면 생성된 이벤트가 적절한 스토리지 이벤트 스키마 및 JSON 형식 사양을 엄격하게 준수하는지 확인합니다.

Event Grid 데이터 연결 제거

Event Grid 연결을 제거하려면 다음 명령을 실행합니다.

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