다음을 통해 공유


Azure Event Hubs를 사용하여 Apache Spark 애플리케이션 로그 및 메트릭 수집

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

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

Azure Event Hubs로 로그 및 메트릭 수집

1단계: Azure Event Hubs 인스턴스 만들기

Azure Event Hubs로 진단 로그 및 메트릭을 수집하기 위해 기존 Azure Event Hubs 인스턴스를 사용할 수 있습니다. 또는 이벤트 허브가 없는 경우 이벤트 허브를 만들 수 있습니다.

2단계: Apache Spark 구성 파일 만들기

diagnostic-emitter-azure-event-hub-conf.txt를 만들고, 다음 내용을 이 파일에 복사합니다. 또는 Apache Spark 풀을 구성하기 위한 샘플 템플릿 파일을 다운로드합니다.

spark.synapse.diagnostic.emitters MyDestination1
spark.synapse.diagnostic.emitter.MyDestination1.type AzureEventHub
spark.synapse.diagnostic.emitter.MyDestination1.categories Log,EventLog,Metrics
spark.synapse.diagnostic.emitter.MyDestination1.secret <connection-string>

구성 파일에서 매개 변수 <connection-string>을 입력합니다. 매개 변수에 대한 자세한 내용은 Azure Event Hubs 구성을 참조하세요.

3단계: Apache Spark 풀에 Apache Spark 구성 파일 업로드

  1. Synapse Studio에서 Apache Spark 풀로 이동합니다(관리 -> Apache Spark 풀).
  2. Apache Spark 풀의 오른쪽에 있는 "..." 단추를 클릭하고, Apache Spark 구성을 선택합니다.
  3. 업로드를 클릭하고, ".txt" 구성 파일을 선택하고 적용을 클릭합니다.

사용 가능한 구성

구성 설명
spark.synapse.diagnostic.emitters 필수입니다. 쉼표로 구분된 진단 내보내기의 대상 이름입니다.
spark.synapse.diagnostic.emitter.<destination>.type 필수입니다. 기본 제공 대상 유형입니다. Azure Event Hubs 대상을 사용하려면 값은 AzureEventHub이어야 합니다.
spark.synapse.diagnostic.emitter.<destination>.categories 선택 사항. 쉼표로 구분된 선택한 로그 범주입니다. 사용 가능한 값은 DriverLog, ExecutorLog, EventLog, Metrics입니다. 설정되지 않으면 기본값은 모두 범주입니다.
spark.synapse.diagnostic.emitter.<destination>.secret 선택 사항. Azure Event Hubs 인스턴스 연결 문자열입니다. 이 필드는 이 패턴 Endpoint=sb://<FQDN>/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>;EntityPath=<PathName>과 일치해야 합니다.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault .secret이 지정되지 않은 경우 필수 사항입니다. 비밀(연결 문자열)이 저장되는 Azure Key Vault 이름입니다.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName .secret.keyVault를 지정하는 경우 필요합니다. 비밀(연결 문자열)이 저장되는 Azure Key Vault 비밀 이름입니다.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.linkedService 선택 사항. Azure Key Vault 연결된 서비스 이름입니다. Synapse 파이프라인에서 사용하도록 설정된 경우 AKV에서 비밀을 가져오는 데 필요합니다. (MSI에 AKV에 대한 읽기 권한이 있는지 확인하세요.)
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

참고 항목

Azure Eventhub 인스턴스 연결 문자열에는 항상 Azure Event Hubs 인스턴스의 이름인 EntityPath가 포함되어야 합니다.

로그 데이터 샘플

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

{
    "timestamp": "2021-01-02T12:34:56.789Z",
    "category": "Log|EventLog|Metrics",
    "workspaceName": "<my-workspace-name>",
    "sparkPool": "<spark-pool-name>",
    "livyId": "<livy-session-id>",
    "applicationId": "<application-id>",
    "applicationName": "<application-name>",
    "executorId": "<driver-or-executor-id>",
    "properties": {
        // The message properties of logs, events and metrics.
        "timestamp": "2021-01-02T12:34:56.789Z",
        "message": "Registering signal handler for TERM",
        "logger_name": "org.apache.spark.util.SignalUtils",
        "level": "INFO",
        "thread_name": "main"
        // ...
    }
}

데이터 반출 보호가 사용하도록 설정된 Synapse 작업 영역

Azure Synapse Analytics 작업 영역에서는 작업 영역에 대한 데이터 반출 보호 사용을 지원합니다. 반출 보호를 사용하면 로그와 메트릭을 대상 엔드포인트로 직접 보낼 수 없습니다. 이 시나리오에서는 다른 대상 엔드포인트에 해당하는 관리형 프라이빗 엔드포인트를 만들거나 IP 방화벽 규칙을 만들 수 있습니다.