Azure Databricks 애플리케이션 로그를 Azure Monitor에 보내기

참고

이 문서는 https://github.com/mspnp/spark-monitoring의 GitHub에서 호스트되는 오픈 소스 라이브러리에 따라 다릅니다.

원래 라이브러리는 Azure Databricks Runtimes 10.x(Spark 3.2.x) 이하를 지원합니다.

Databricks는 다음 분기에서 https://github.com/mspnp/spark-monitoring/tree/l4jv2Azure Databricks Runtimes 11.0(Spark 3.3.x) 이상을 지원하기 위해 l4jv2 업데이트된 버전을 제공했습니다.

Databricks 런타임에 사용되는 다른 로깅 시스템으로 인해 11.0 릴리스가 이전 버전과 호환되지 않습니다. Databricks 런타임에 올바른 빌드를 사용해야 합니다. 라이브러리 및 GitHub 리포지토리는 기본 테넌트 모드입니다. 추가 릴리스에 대한 계획은 없으며 문제 지원은 최선의 노력만 할 것입니다. Azure Databricks 환경의 모니터링 및 로깅을 위한 라이브러리 또는 로드맵에 대한 추가 질문은 문의 azure-spark-monitoring-help@databricks.com하세요.

이 문서에서는 Azure Databricks에서 Log Analytics 작업 영역으로 애플리케이션 로그 및 메트릭을 보내는 방법을 보여 줍니다. GitHub에서 사용할 수 있는 Azure Databricks 모니터링 라이브러리를 사용합니다.

필수 구성 요소

GitHub 추가 정보에 설명된 대로 모니터링 라이브러리를 사용하도록 Azure Databricks 클러스터를 구성합니다.

참고

모니터링 라이브러리는 작업에서 Azure Monitor로 Apache Spark 수준 이벤트 및 Spark 구조적 스트리밍 메트릭을 스트리밍합니다. 이러한 이벤트 및 메트릭에 대한 애플리케이션 코드를 변경할 필요가 없습니다.

Dropwizard를 사용하여 애플리케이션 메트릭 보내기

Spark는 Dropwizard 메트릭 라이브러리를 기반으로 하는 구성 가능한 메트릭 시스템을 사용합니다. 자세한 내용은 Spark 설명서에서 메트릭을 참조하세요.

Azure Databricks 애플리케이션 코드에서 Azure Monitor로 애플리케이션 메트릭을 보내려면 다음 단계를 따릅니다.

  1. GitHub 추가 정보에 설명된 대로 spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR 파일을 빌드합니다.

  2. 애플리케이션 코드에서 Dropwizard 게이지 또는 카운터를 만듭니다. 모니터링 라이브러리에 정의된 UserMetricsSystem 클래스를 사용할 수 있습니다. 다음 예에서는 counter1이라는 카운터를 만듭니다.

    import org.apache.spark.metrics.UserMetricsSystems
    import org.apache.spark.sql.SparkSession
    
    object StreamingQueryListenerSampleJob  {
    
      private final val METRICS_NAMESPACE = "samplejob"
      private final val COUNTER_NAME = "counter1"
    
      def main(args: Array[String]): Unit = {
    
        val spark = SparkSession
          .builder
          .getOrCreate
    
        val driverMetricsSystem = UserMetricsSystems
            .getMetricSystem(METRICS_NAMESPACE, builder => {
              builder.registerCounter(COUNTER_NAME)
            })
    
        driverMetricsSystem.counter(COUNTER_NAME).inc(5)
      }
    }
    

    모니터링 라이브러리에는 UserMetricsSystem 클래스 사용 방법을 보여 주는 샘플 애플리케이션이 포함되어 있습니다.

Log4j를 사용하여 애플리케이션 로그 보내기

라이브러리의 Log4j 어펜더를 사용하여 Azure Databricks 애플리케이션 로그를 Azure Log Analytics로 보내려면 다음 단계를 따릅니다.

  1. GitHub 추가 정보에 설명된 대로 spark-listeners-1.0-SNAPSHOT.jarspark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR 파일을 빌드합니다. .

  2. 애플리케이션에 대한 log4j.properties구성 파일을 만듭니다. 다음 구성 속성을 포함합니다. 표시된 곳에 애플리케이션 패키지 이름과 로그 수준을 대체합니다.

    log4j.appender.A1=com.microsoft.pnp.logging.loganalytics.LogAnalyticsAppender
    log4j.appender.A1.layout=com.microsoft.pnp.logging.JSONLayout
    log4j.appender.A1.layout.LocationInfo=false
    log4j.additivity.<your application package name>=false
    log4j.logger.<your application package name>=<log level>, A1
    

    샘플 구성 파일은 여기에서 찾을 수 있습니다.

  3. 애플리케이션 코드에 spark-listeners-loganalytics 프로젝트를 포함하고 com.microsoft.pnp.logging.Log4jconfiguration을 애플리케이션 코드로 가져옵니다.

    import com.microsoft.pnp.logging.Log4jConfiguration
    
  4. 3단계에서 만든 log4j.properties 파일을 사용하여 Log4j를 구성합니다.

    getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") {
          stream => {
            Log4jConfiguration.configure(stream)
          }
    }
    
  5. 필요에 따라 코드의 적절한 수준에서 Apache Spark 로그 메시지를 추가합니다. 예를 들어 logDebug 메서드를 사용하여 디버그 로그 메시지를 보냅니다. 자세한 내용은 Spark 설명서에서 로깅을 참조하세요.

    logTrace("Trace message")
    logDebug("Debug message")
    logInfo("Info message")
    logWarning("Warning message")
    logError("Error message")
    

참고

라이브러리를 사용하고 있고 Apache Spark Notebook이 있는 경우 Notebook을 실행하는 동안 Spark가 생성하는 모든 로그는 자동으로 Log Analytics로 이동합니다.

Python이 Spark 구성 Log4j를 사용하여 사용자 지정 로깅 메시지를 지원하는 데는 제한이 있습니다. 실행기 노드는 Python에서 Java Virtual Machine에 액세스할 수 없으므로 드라이버 노드에서만 로그를 보낼 수 있습니다.

샘플 애플리케이션 실행

모니터링 라이브러리에는 애플리케이션 메트릭과 애플리케이션 로그를 모두 Azure Monitor로 보내는 방법을 보여 주는 샘플 애플리케이션이 포함되어 있습니다. 샘플을 실행하려면:

  1. GitHub 추가 정보에 설명된 대로 모니터링 라이브러리에서 spark-jobs 프로젝트를 빌드합니다.

  2. Databricks 작업 영역으로 이동하여 여기에 설명된 대로 새 작업을 만듭니다.

  3. 작업 세부 정보 페이지에서 JAR 설정을 선택합니다.

  4. /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar에서 JAR 파일을 업로드합니다.

  5. 메인 클래스com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob을 입력합니다.

  6. 모니터링 라이브러리를 사용하도록 이미 구성된 클러스터를 선택합니다. Azure Monitor에 메트릭을 보내도록 Azure Databricks 구성을 참조하세요.

작업이 실행되면 Log Analytics 작업 영역에서 애플리케이션 로그 및 메트릭을 볼 수 있습니다.

애플리케이션 로그는 SparkLoggingEvent_CL 아래에 나타납니다.

SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"

애플리케이션 메트릭은 SparkMetric_CL 아래에 나타납니다.

SparkMetric_CL | where name_s contains "rowcounter" | limit 50

중요

메트릭이 표시되는지 확인한 후 샘플 애플리케이션 작업을 중지합니다.

다음 단계

프로덕션 Azure Databricks 워크로드의 성능 문제를 해결하려면 이 코드 라이브러리와 함께 제공되는 성능 모니터링 대시보드를 배포합니다.