다음을 통해 공유


Azure Storage 계정을 사용하여 Apache Spark 애플리케이션 로그 및 메트릭 수집(프리뷰)

Fabric Apache Spark 진단 내보내기 확장은 Apache Spark 애플리케이션에서 로그, 이벤트 로그 및 메트릭을 Azure Log Analytics, Azure Storage 및 Azure Event Hubs를 포함한 여러 대상으로 내보낼 수 있도록 하는 라이브러리입니다.

이 자습서에서는 Fabric Apache Spark 진단 내보내기 확장을 사용하여 Apache Spark 애플리케이션의 로그, 이벤트 로그 및 메트릭을 Azure 스토리지 계정으로 보내는 방법에 대해 알아봅니다.

스토리지 계정에 로그 및 메트릭 수집

1 단계: 스토리지 계정 만들기

진단 로그 및 메트릭을 수집하려면 기존 Azure Storage 계정을 사용할 수 있습니다. 계정이 없는 경우 Azure Blob Storage 계정을 만들거나 Azure Data Lake Storage Gen2에서 사용할 스토리지 계정을 만들 수 있습니다.

2단계: Apache Spark 구성을 사용하여 Fabric 환경 아티팩트 만들기

옵션 1: Azure Storage URI 및 액세스 키를 사용하여 구성

  1. Fabric에서 Fabric 환경 아티팩트 만들기

  2. 환경 아티팩트에 적절한 값을 가진 다음 Spark 속성을 추가하거나 리본 메뉴의 .yml 추가를 선택하여 다음 속성이 이미 포함된 샘플 yaml 파일을 다운로드합니다.

    spark.synapse.diagnostic.emitters: MyStorageBlob
    spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage"
    spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyStorageBlob.uri:  "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>"
    spark.synapse.diagnostic.emitter.MyDestination1.auth: "AccessKey"
    spark.synapse.diagnostic.emitter.MyDestination1.secret: <storage-access-key>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    구성 파일에서 <my-blob-storage>, <container-name>, <folder-name>, <storage-access-key>의 매개 변수를 입력합니다. 이러한 매개 변수에 대한 자세한 내용은 Azure Storage 구성을 참조하세요.

옵션 2: Azure Key Vault로 구성

참고 항목

알려진 문제: 옵션 2를 임시로 사용하여 세션을 시작할 수 없습니다. 현재 Key Vault에 비밀을 저장하면 Spark 세션이 시작되지 않습니다. 옵션 1에 설명된 메서드를 사용하여 구성의 우선 순위를 지정하세요.

Apache Spark 애플리케이션을 제출하는 사용자에게 비밀 읽기 권한을 부여해야 합니다. 자세한 내용은 Azure 역할 기반 액세스 제어를 사용하여 Key Vault 키, 인증서 및 비밀에 대한 액세스 제공을 참조하세요.

작업 영역 키를 저장하도록 Azure Key Vault를 구성하려면 다음 단계를 수행합니다.

  1. Azure Portal에서 키 자격 증명 모음을 만들고 해당 키 자격 증명 모음으로 이동합니다.

  2. 키 자격 증명 모음의 설정 페이지에서 비밀을 선택한 다음 생성/가져오기를 선택합니다.

  3. 비밀 만들기 화면에서 다음 값을 선택합니다.

    • 이름: 비밀의 이름을 입력합니다.
    • : 비밀의 <storage-access-key>를 입력합니다.
    • 다른 값은 기본값으로 그대로 둡니다. 그런 다음 만들기를 선택합니다.
  4. Fabric에서 Fabric 환경 아티팩트를 만듭니다.

  5. 다음 Spark 속성을 추가합니다. 또는 리본 메뉴의 .yml에서 추가를 선택하여 다음 Spark 속성을 포함하는 샘플 yaml 파일을 업로드합니다.

    spark.synapse.diagnostic.emitters: <MyStorageBlob>
    spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage"
    spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyStorageBlob.uri:  "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>"
    spark.synapse.diagnostic.emitter.MyStorageBlob.auth: "AccessKey"
    spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    구성 파일에서 <my-blob-storage>, <container-name>, <folder-name>, <AZURE_KEY_VAULT_NAME>, <AZURE_KEY_VAULT_SECRET_KEY_NAME> 매개 변수를 입력합니다. 이러한 매개 변수에 대한 자세한 내용은 Azure Storage 구성을 참조하세요.

  6. 변경 사항을 저장하고 게시합니다.

3단계: 환경 아티팩트를 Notebook 또는 Spark 작업 정의에 연결하거나 작업 영역 기본값으로 설정

환경을 Notebook 또는 Spark 작업 정의에 연결하려면 다음을 수행합니다.

  1. Fabric에서 특정 Notebook 또는 Spark 작업 정의로 이동합니다.
  2. 홈 탭에서 환경 메뉴를 선택하고 진단 Spark 속성이 구성된 환경을 선택합니다.
  3. 구성은 Spark 세션을 시작할 때 적용됩니다.

이 환경을 작업 영역 기본값으로 설정하려면 다음 작업을 수행합니다.

  1. Fabric에서 작업 영역 설정으로 이동합니다.
  2. 작업 영역 설정에서 Spark 설정을 찾습니다(작업 영역 설정 -> 데이터 엔지니어링/데이터 과학 -> Spark 설정).
  3. 환경 탭을 선택하고 진단 Spark 속성이 구성된 환경을 선택하고 저장을 클릭합니다.

참고 항목

작업 영역 관리자만 작업 영역 구성을 관리할 수 있습니다. 여기에서 변경한 내용은 작업 영역 설정에 연결된 모든 Notebook 및 Spark 작업 정의에 적용됩니다. 자세한 내용은 Fabric 작업 영역 설정을 참조하세요.

4단계: Azure 스토리지 계정에서 로그 파일 보기

작업을 구성된 Spark 세션에 제출하면 대상 스토리지 계정의 로그 및 메트릭 파일을 볼 수 있습니다. 로그는 서로 다른 애플리케이션에 따라 해당 경로에 저장되며 <workspaceId>.<fabricLivyId>로 식별됩니다. 모든 로그 파일은 JSON 줄 형식(줄 바꿈으로 구분된 JSON, 즉 ndjson이라고도 함)으로 되어 있어 데이터 처리가 편리합니다.

사용 가능한 구성

구성 설명
spark.synapse.diagnostic.emitters 필수입니다. 쉼표로 구분된 진단 내보내기의 대상 이름입니다. 예를 들어 MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type 필수입니다. 기본 제공 대상 유형입니다. Azure 스토리지 대상을 사용하도록 설정하려면 이 필드에서 AzureStorage를 포함해야 합니다.
spark.synapse.diagnostic.emitter.<destination>.categories 선택 사항. 쉼표로 구분된 선택한 로그 범주입니다. 사용 가능한 값은 DriverLog, ExecutorLog, EventLog, Metrics입니다. 설정되지 않으면 기본값은 모두 범주입니다.
spark.synapse.diagnostic.emitter.<destination>.auth 필수입니다. AccessKey는 스토리지 계정 액세스 키 권한 부여를 사용하기 위한 것이며, SAS는 스토리지 계정 공유 액세스 서명키 권한 부여를 사용하기 위한 것입니다.
spark.synapse.diagnostic.emitter.<destination>.uri 필수입니다. 대상 Blob 컨테이너 폴더 URI입니다. https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name> 패턴과 일치해야 합니다.
spark.synapse.diagnostic.emitter.<destination>.secret 선택 사항. 비밀(AccessKey 또는 SAS) 콘텐츠입니다.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault .secret을 지정하지 않은 경우 필요합니다. 비밀(AccessKey 또는 SAS)이 저장되는 Azure Key Vault 이름입니다.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName .secret.keyVault를 지정하는 경우 필요합니다. 비밀(AccessKey 또는 SAS)이 저장되는 Azure Key Vault 비밀입니다.
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match 선택 사항. 쉼표로 구분된 Spark 이벤트 이름이며, 수집할 이벤트를 지정할 수 있습니다. 예: SparkListenerApplicationStart,SparkListenerApplicationEnd
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match 선택 사항. 쉼표로 구분된 Log4j 로거 이름이며, 수집할 이벤트를 지정할 수 있습니다. 예: org.apache.spark.SparkContext,org.example.Logger
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match 선택 사항. 쉼표로 구분된 Spark 메트릭 이름 접미사이며, 수집할 메트릭을 지정할 수 있습니다. 예: jvm.heap.used
spark.fabric.pools.skipStarterPools 필수입니다. 이 Spark 속성은 주문형 Spark 세션을 강제 적용하는 데 사용됩니다. 로그 및 메트릭을 내보내는 라이브러리를 트리거하려면 기본 풀을 사용할 때 값을 True로 설정해야 합니다.

로그 데이터 샘플

JSON 형식의 샘플 로그 레코드는 다음과 같습니다.

{
  "timestamp": "2024-09-06T03:09:37.235Z",
  "category": "Log|EventLog|Metrics",
  "fabricLivyId": "<fabric-livy-id>",
  "applicationId": "<application-id>",
  "applicationName": "<application-name>",
  "executorId": "<driver-or-executor-id>",
  "fabricTenantId": "<my-fabric-tenant-id>",
  "capacityId": "<my-fabric-capacity-id>",
  "artifactType": "SynapseNotebook|SparkJobDefinition",
  "artifactId": "<my-fabric-artifact-id>",
  "fabricWorkspaceId": "<my-fabric-workspace-id>",
  "fabricEnvId": "<my-fabric-environment-id>",
  "executorMin": "<executor-min>",
  "executorMax": "<executor-max>",
  "isHighConcurrencyEnabled": "true|false",
  "properties": {
    // The message properties of logs, events and metrics.
    "timestamp": "2024-09-06T03:09:37.235Z",
    "message": "Initialized BlockManager: BlockManagerId(1, vm-04b22223, 34319, None)",
    "logger_name": "org.apache.spark.storage.BlockManager",
    "level": "INFO",
    "thread_name": "dispatcher-Executor"
    //...
  }
}

관리형 가상 네트워크를 사용한 Fabric 작업 영역

대상 Azure Blob Storage에 대한 관리형 프라이빗 엔드포인트 만들기 자세한 지침은 Microsoft Fabric - Microsoft Fabric에서 관리형 프라이빗 엔드포인트 만들기 및 사용을 참조 하세요.

관리형 프라이빗 엔드포인트가 승인되면 사용자는 대상 Azure Blob Storage에 로그 및 메트릭을 내보낼 수 있습니다.

다음 단계