다음을 통해 공유


Azure Log Analytics를 사용하여 Apache Spark 애플리케이션 모니터링(프리뷰)

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

이 자습서에서는 Spark 로그 및 메트릭을 구성하고 Fabric의 Log Analytics로 내보내는 방법을 알아봅니다. 구성한 다음, Log Analytics 작업 영역에서 Apache Spark 애플리케이션 메트릭 및 로그를 수집 및 분석할 수 있습니다.

작업 영역 정보 구성

다음 단계에 따라 Fabric에서 필요한 정보를 구성합니다.

1단계: Log Analytics 작업 영역 만들기

다음 리소스 중 하나를 참조하여 이 작업 영역을 만듭니다.

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

Spark를 구성하려면 Fabric 환경 아티팩트를 만들고 다음 옵션 중 하나를 선택합니다.

옵션 1: Azure Log Analytics 작업 영역 ID 및 키를 사용하여 구성

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

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

    • <LOG_ANALYTICS_WORKSPACE_ID>: Log Analytics 작업 영역 ID입니다.
    • <LOG_ANALYTICS_WORKSPACE_KEY>: Log Analytics 키입니다. Azure Portal에서 Azure Log Analytics 작업 영역>에이전트>기본 키로 이동하여 찾을 수 있습니다.
    spark.synapse.diagnostic.emitters: LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    또는 Azure Synapse와 동일한 구성을 적용하려면 다음 속성을 사용하거나 리본의 .yml 추가를 선택하여 샘플 yaml 파일을 다운로드합니다.

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    
  3. 변경 사항을 저장하고 게시합니다.

옵션 2: Azure Key Vault로 구성

참고 항목

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

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

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

  1. Azure Portal에서 키 자격 증명 모음으로 이동합니다.

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

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

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

  5. 환경 아티팩트에서 해당 값을 사용하여 다음 Spark 속성을 추가하거나 환경 아티팩트에서 리본의 .yml 추가를 선택하여 다음 Spark 속성을 포함하는 샘플 yaml 파일을 다운로드합니다.

    • <LOG_ANALYTICS_WORKSPACE_ID>: Log Analytics 작업 영역 ID입니다.
    • <AZURE_KEY_VAULT_NAME>: 구성한 키 자격 증명 모음 이름입니다.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME>(선택 사항): 작업 영역 키에 대한 키 자격 증명 모음의 비밀 이름입니다. 기본값은 SparkLogAnalyticsSecret입니다.
    // Spark properties for LA
    spark.synapse.diagnostic.emitters LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    또는 Azure Synapse와 동일한 구성을 적용하려면 다음 속성을 사용하거나 리본의 .yml 추가를 선택하여 샘플 yaml 파일을 다운로드합니다.

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.keyVault.name: <AZURE_KEY_VAULT_NAME>
    spark.synapse.logAnalytics.keyVault.key.secret: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    참고 항목

    작업 영역 ID를 Key Vault에 저장할 수도 있습니다. 비밀 이름을 SparkLogAnalyticsWorkspaceId로 설정하거나 spark.synapse.logAnalytics.keyVault.key.workspaceId 구성을 사용하여 작업 영역 ID 비밀 이름을 지정합니다.

    Apache Spark 구성 목록은 사용 가능한 Apache Spark 구성을 참조하세요.

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

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

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

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

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

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

참고 항목

작업 영역 관리자만 구성을 관리할 수 있습니다. 값은 작업 영역 설정에 연결하는 Notebook 및 Spark 작업 정의에 적용됩니다. 자세한 내용은 Fabric 작업 영역 설정을 참조하세요.

Apache Spark 애플리케이션을 제출하고 로그 및 메트릭 보기

Apache Spark 애플리케이션을 제출하려면 다음을 수행합니다.

  1. 이전 단계에서 구성한 연결된 환경과 함께 Apache Spark 애플리케이션을 제출합니다. 다음 방법 중 하나를 사용하여 제출할 수 있습니다.

    • Fabric에서 Notebook을 실행합니다.
    • Apache Spark 작업 정의를 통해 Apache Spark 일괄 작업을 제출합니다.
    • 파이프라인에서 Spark 활동을 실행합니다.
  2. 지정된 Log Analytics 작업 영역으로 이동한 다음, Apache Spark 애플리케이션이 실행되기 시작할 때 애플리케이션 메트릭 및 로그를 확인합니다.

사용자 지정 애플리케이션 로그 작성

Apache Log4j 라이브러리를 사용하여 사용자 지정 로그를 작성할 수 있습니다. Scala 및 Python의 예는 다음과 같습니다.

Scala 예제:

%%spark
val logger = org.apache.log4j.LogManager.getLogger("com.contoso.LoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
//log exception
try {
      1/0
 } catch {
      case e:Exception =>logger.warn("Exception", e)
}
// run job for task level metrics
val data = sc.parallelize(Seq(1,2,3,4)).toDF().count()

PySpark 예제:

%%pyspark
logger = sc._jvm.org.apache.log4j.LogManager.getLogger("com.contoso.PythonLoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")

Kusto를 사용하여 데이터 쿼리

Apache Spark 이벤트를 쿼리하려면 다음을 수행합니다.

SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

Spark 애플리케이션 드라이버 및 실행기 로그를 쿼리하려면 다음을 수행합니다.

SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

Apache Spark 메트릭을 쿼리하려면 다음을 수행합니다.

SparkMetrics_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc

데이터 제한

Fabric에서는 HTTP 데이터 수집기 API를 사용하여 Azure Monitor에 로그 데이터를 전송합니다. Azure Monitor 데이터 수집 API에 게시된 데이터에는 특정 제약 조건이 적용됩니다.

  • Azure Monitor 데이터 수집기 API에 대한 게시당 최대 30MB. 이는 단일 게시물에 대한 크기 제한입니다. 단일 게시물의 데이터가 30MB를 초과하는 경우 데이터를 보다 작은 크기의 청크로 분할하여 동시에 보내야 합니다.
  • 필드 값은 최대 32KB입니다. 필드 값이 32KB보다 크면 데이터가 잘립니다.
  • 특정 형식에 대해 권장하는 값은 최대 50개 필드입니다. 이는 사용 편의성 및 검색 환경 관점에서의 실용적인 제한입니다.
  • Log Analytics 작업 영역에 있는 테이블은 최대 500개의 열만 지원합니다.
  • 열 이름은 최대 45자입니다.

경고 만들기 및 관리

사용자는 설정된 빈도로 메트릭 및 로그를 평가하고 그 결과에 따라 경고를 발생하도록 쿼리할 수 있습니다. 자세한 내용은 Azure Monitor를 사용하여 로그 경고 만들기, 보기 및 관리를 참조하세요.

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

관리형 프라이빗 엔드포인트는 Log Analytics를 데이터 원본으로 지원하지 않으므로 현재 관리되는 가상 네트워크에서 Spark 로그 및 메트릭 배출의 대상으로 Azure Log Analytics를 선택할 수 없습니다.

다음 단계