Event Grid 데이터 연결

Event Grid 수집은 Azure 스토리지를 수신 대기하고 구독됨 이벤트가 발생하면 정보를 끌어오도록 Azure Data Explorer를 업데이트하는 파이프라인입니다. Azure Data Explorer는 만들어진 Blob 및 이름이 변경된 Blob 알림에 대한 Azure Event Grid 구독을 통해 Azure Storage(Blob 스토리지 및 ADLSv2)로부터의 지속적인 수집을 제공하고, Azure Event Hubs를 통해 이러한 알림을 Azure Data Explorer로 스트리밍합니다.

Event Grid 수집 파이프라인은 여러 단계를 거칩니다. Azure Data Explorer에서 특정 형식의 데이터가 수집되는 대상 테이블을 만듭니다. 그런 다음, Azure Data Explorer에서 Event Grid 데이터 연결을 만듭니다. Event Grid 데이터 연결에는 데이터를 보낼 테이블 및 테이블 매핑과 같은 이벤트 라우팅 정보가 필요합니다. 수집할 데이터, 대상 테이블 및 매핑을 설명하는 수집 속성도 지정합니다. 샘플 데이터를 생성하고, Blob을 업로드하거나 Blob 이름을 변경하여 연결을 테스트할 수 있습니다. 수집 후에는 Blob을 삭제합니다.

Event Grid 수집은 수집 마법사를 사용하거나, 프로그래밍 방식으로 C# 또는 Python을 사용하거나, Azure Resource Manager 템플릿을 사용하여 Azure Portal을 통해 관리할 수 있습니다.

Azure Data Explorer의 데이터 수집에 대한 일반적인 정보는 Azure Data Explorer 데이터 수집 개요를 참조하세요.

Azure Data Explorer 데이터 연결 인증 메커니즘

  • 관리 ID 기반 데이터 연결(권장): 관리 ID 기반 데이터 연결을 사용하는 것이 데이터 원본에 연결하는 가장 안전한 방법입니다. 이는 데이터 원본에서 데이터를 가져오는 기능을 완전히 제어합니다. 관리 ID를 사용하여 데이터 연결을 설정하려면 다음 단계가 필요합니다.
    1. 클러스터에 관리 ID를 추가합니다.
    2. 데이터 원본의 관리 ID에 권한을 부여합니다.
    3. 대상 데이터베이스에서 관리 ID 정책을 설정합니다.
    4. 관리 ID 인증을 사용하여 데이터 연결을 만들어 데이터를 가져옵니다.

주의

관리 ID 권한이 데이터 원본에서 제거되면 데이터 연결이 비활성화되고 데이터 원본에서 데이터를 가져올 수 없습니다.

  • 키 기반 데이터 연결: 데이터 연결에 관리 ID가 지정되지 않은 경우 연결이 자동으로 키 기반 인증으로 기본 설정됩니다. 키 기반 연결은 Azure Event Hubs 연결 문자열과 같은 리소스 연결 문자열을 사용하여 데이터를 가져옵니다. Azure Data Explorer는 지정된 리소스에 대한 리소스 연결 문자열을 생성하고 데이터 연결에 안전하게 저장합니다. 그런 다음, 연결 문자열을 사용하여 데이터 원본에서 데이터를 가져옵니다.

주의

키가 회전되면 데이터 연결이 비활성화되고 데이터 원본에서 데이터를 가져올 수 없습니다. 이 문제를 해결하려면 데이터 연결을 업데이트하거나 다시 만듭니다.

데이터 형식

  • 지원되는 형식을 참조하세요.
  • 지원되는 압축을 참조하세요.
    • 압축되지 않은 원래 데이터 크기는 Blob 메타데이터의 일부여야 합니다. 그렇지 않으면 Azure Data Explorer가 이를 추정합니다. 파일당 압축되지 않은 수집 크기 제한은 6GB입니다.

참고

Event Grid 알림 구독은 BlobStorage, StorageV2 또는 BlobStorage용 Azure Storage 계정에서 설정할 수 있습니다.

수집 속성

Blob 메타데이터를 통해 Blob 수집의 수집 속성을 지정할 수 있습니다. 다음 속성을 설정할 수 있습니다.

속성 Description
rawSizeBytes 원시(압축되지 않은) 데이터의 크기입니다. Avro/ORC/Parquet의 경우 형식별 압축이 적용되기 전의 크기입니다. 이 속성을 압축되지 않은 데이터 크기(바이트)로 설정하여 원래 데이터 크기를 제공합니다.
kustoDatabase 대상 데이터베이스의 대/소문자 구분 이름입니다. 기본적으로 데이터는 데이터 연결과 관련된 대상 데이터베이스에 수집됩니다. 기본 데이터베이스를 재정의하고 다른 데이터베이스로 데이터를 보내려면 이 속성을 사용합니다. 이렇게 하려면 먼저 연결을 다중 데이터베이스 연결로 설정해야 합니다.
kustoTable 기존 대상 테이블의 대/소문자 구분 이름입니다. Data Connection 창에 설정된 Table을 재정의합니다.
kustoDataFormat 데이터 형식 Data Connection 창에 설정된 Data format을 재정의합니다.
kustoIngestionMappingReference 사용할 기존 수집 매핑의 이름입니다. Data Connection 창에 설정된 Column mapping을 재정의합니다.
kustoIgnoreFirstRecord true로 설정하면 Kusto는 Blob의 첫 번째 행을 무시합니다. 테이블 형식 데이터(CSV, TSV 등)에서 헤더를 무시하는 데 사용합니다.
kustoExtentTags 결과 익스텐트에 연결할 태그를 나타내는 문자열입니다.
kustoCreationTime ISO 8601 문자열로 형식이 지정된 Blob에 대한 익스텐트 만들기 시간을 재정의합니다. 백필에 사용합니다.

이벤트 라우팅

클러스터에 대한 데이터 연결을 만들 때 수집된 데이터를 보낼 위치에 대한 라우팅을 지정합니다. 기본 라우팅은 대상 데이터베이스와 연결된 연결 문자열에 지정된 대상 테이블로 라우팅하는 것입니다. 데이터의 기본 라우팅을 정적 라우팅이라고도 합니다. 이벤트 데이터 속성을 사용하여 데이터에 대한 대체 라우팅을 지정할 수 있습니다.

대체 데이터베이스로 이벤트 데이터 라우팅

대체 데이터베이스로 데이터 라우팅은 기본적으로 꺼져 있습니다. 데이터를 다른 데이터베이스로 보내려면 먼저 연결을 다중 데이터베이스 연결로 설정해야 합니다. Azure Portal, C#, Python 또는 ARM 템플릿에서 이 작업을 수행할 수 있습니다. 데이터베이스 라우팅을 허용하는 데 사용되는 사용자, 그룹, 서비스 주체 또는 관리 ID에는 적어도 클러스터에 대한 기여자 역할 및 쓰기 권한이 있어야 합니다. 자세한 내용은 Azure Data Explorer 대한 Event Grid 데이터 연결 만들기를 참조하세요.

대체 데이터베이스를 지정하려면 Database수집 속성을 설정합니다.

경고

연결을 다중 데이터베이스 데이터 연결로 설정하지 않고 대체 데이터베이스를 지정하면 수집이 실패합니다.

대체 테이블로 이벤트 데이터 라우팅

Azure Data Explorer 클러스터에 대한 Blob 스토리지 연결을 설정하는 경우 대상 테이블 속성을 지정합니다.

  • 테이블 이름
  • 데이터 형식
  • 매핑

또한 Blob 메타데이터를 사용하여 각 Blob에 대한 대상 테이블 속성을 지정할 수 있습니다. 데이터는 수집 속성에서 지정한 대로 동적으로 라우팅됩니다.

아래 예제에서는 업로드하기 전에 Blob 메타데이터에 대한 수집 속성을 설정하는 방법을 보여 줍니다. Blob은 다른 테이블로 라우팅됩니다.

또한 대상 데이터베이스를 지정할 수 있습니다. Event Grid 데이터 연결은 특정 데이터베이스의 컨텍스트 내에서 만들어집니다. 따라서 이 데이터베이스는 데이터 연결의 기본 데이터베이스 라우팅입니다. 데이터를 다른 데이터베이스로 보내려면 "KustoDatabase" 수집 속성을 설정하고 데이터 연결을 다중 데이터베이스 데이터 연결로 설정합니다. 다른 데이터베이스로 데이터를 라우팅하는 것은 기본적으로 사용되지 않습니다(허용되지 않음). 다중 데이터베이스로의 데이터 라우팅을 허용(연결을 다중 데이터베이스 데이터 연결로 설정)하지 않고 데이터 연결의 데이터베이스와 다른 데이터베이스 수집 속성을 설정하면 수집이 실패합니다.

자세한 내용은 Blob 업로드를 참조하세요.

var container = new BlobContainerClient("<storageAccountConnectionString>", "<containerName>");
await container.CreateIfNotExistsAsync();
var blob = container.GetBlobClient("<blobName>");
// Blob is dynamically routed to table `Events`, ingested using `EventsMapping` data mapping
await blob.SetMetadataAsync(
    new Dictionary<string, string>
    {
        { "rawSizeBytes", "4096" }, // the uncompressed size is 4096 bytes
        { "kustoTable", "Events" },
        { "kustoDataFormat", "json" },
        { "kustoIngestionMappingReference", "EventsMapping" },
        { "kustoDatabase", "AnotherDB" }
    }
);
await blob.UploadAsync(BinaryData.FromString(File.ReadAllText("<filePath>")));

Blob 업로드

로컬 파일에서 Blob을 만들고, 수집 속성을 Blob 메타데이터로 설정하고, 이를 업로드할 수 있습니다. 예제는 Event Grid 데이터 연결 사용을 참조하세요.

참고

  • 를 사용하면 BlockBlob 예기치 않은 동작이 발생할 수 있으므로 를 사용하여 AppendBlob 데이터를 생성하는 것이 좋습니다.
  • Azure Data Lake Gen2 스토리지 SDK를 사용하려면 파일을 Flush 업로드하는 데 를 사용하고 CreateFile 끝에 close 매개 변수를 로 설정해야 합니다true. Data Lake Gen2 SDK 올바른 사용의 자세한 예제는 Event Grid 데이터 연결 사용을 참조하세요.
  • 작업 후 CopyBlob 수집 트리거는 계층 구조 네임스페이스 기능이 사용하도록 설정된 스토리지 계정에 대해 지원되지 않습니다.
  • 이벤트 허브 엔드포인트에서 이벤트 수신을 승인하지 않으면 Azure Event Grid에서 다시 시도 메커니즘을 활성화합니다. 이 다시 시도 배달이 실패하면 Event Grid에서 배달 못 한 편지 프로세스를 사용하여 배달 안 됨 이벤트를 스토리지 계정에 배달할 수 있습니다. 자세한 내용은 Event Grid 메시지 배달 및 재시도를 참조하세요.

Blob 이름 바꾸기

ADLSv2를 사용하는 경우 Blob 이름을 바꿔 Blob 수집을 Azure Data Explorer에 트리거할 수 있습니다. 예를 들어 Blob 이름 바꾸기를 참조하세요.

참고

  • ADLSv2에서는 디렉터리 이름을 변경할 수 있지만 디렉터리 내에서 Blob 이름 변경 이벤트 및 Blob 수집을 트리거하지 않습니다. 이름을 바꾼 후 Blob을 수집하려면 원하는 Blob의 이름을 직접 바꿉니다.
  • 데이터 연결을 만들거나Event Grid 리소스를 수동으로 만드는 동안 특정 주제를 추적하도록 필터를 정의한 경우 이러한 필터는 대상 파일 경로에 적용됩니다.

스토리지 수명 주기를 사용하여 Blob 삭제

Azure Data Explorer는 수집 후에 Blob을 삭제하지 않습니다. Azure Blob 스토리지 수명 주기를 사용하여 Blob 삭제를 관리합니다. Blob은 3~5일 동안 유지하는 것이 좋습니다.

알려진 Event Grid 문제

  • Azure Data Explorer를 사용하여 Event Grid 수집에 사용되는 파일을 내보내는 경우 다음을 참고하세요.
    • 내보내기 명령에 제공된 연결 문자열 또는 외부 테이블에 제공된 연결 문자열이 ADLS Gen2 형식의 연결 문자열(예: )이지만 스토리지 계정이 계층 구조 네임스페이스에 사용하도록 설정되지 않은 경우 Event Grid 알림이 트리거되지 않습니다.
    • 계정이 계층 구조 네임스페이스에 사용하도록 설정되지 않은 경우 연결 문자열에서 Blob Storage 형식(예: )을 사용해야 합니다. 내보내기는 ADLS Gen2 연결 문자열을 사용하는 경우에도 예상대로 작동하지만, 알림이 트리거되지 않고 Event Grid 수집이 작동하지 않습니다.