대시보드를 사용하여 Azure Databricks 메트릭 시각화

참고

이 문서는 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 작업을 모니터링하도록 Grafana 대시보드를 설정하는 방법을 보여 줍니다.

Azure Databricks는 빠르고 강력한 협업 Apache Spark 기반 분석 서비스로 빅 데이터 분석 및 AI(인공 지능) 솔루션을 신속하게 개발 및 배포할 수 있습니다. 모니터링은 프로덕션에서 Azure Databricks 워크로드를 운영하는 데 중요한 구성 요소입니다. 첫 번째 단계는 분석을 위해 메트릭을 작업 영역으로 수집하는 것입니다. Azure에서 로그 데이터를 관리하기 위한 최상의 솔루션은 Azure Monitor입니다. Azure Databricks는 기본적으로 로그 데이터를 Azure 모니터로 보내는 것을 지원하지 않지만 이 기능에 대한 라이브러리는 GitHub에서 사용할 수 있습니다.

이 라이브러리를 사용하면 Azure Databricks 서비스 메트릭과 Apache Spark 구조 스트리밍 쿼리 이벤트 메트릭을 로깅할 수 있습니다. 이 라이브러리를 Azure Databricks 클러스터에 성공적으로 배포한 후에는 프로덕션 환경의 일부로 배포할 수 있는 Grafana 대시보드 집합을 추가로 배포할 수 있습니다.

Screenshot of the dashboard.

필수 조건

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

Azure Log Analytics 작업 영역 배포

Azure Log Analytics 작업 영역을 배포하려면 다음 단계를 따릅니다.

  1. /perftools/deployment/loganalytics 디렉터리로 이동합니다.

  2. logAnalyticsDeploy.json Azure Resource Manager 템플릿을 배포합니다. Resource Manager 템플릿 배포에 대한 자세한 내용은 Resource Manager 템플릿 및 Azure CLI를 사용하여 리소스 배포를 참조하세요. 템플릿에는 다음 매개 변수가 있습니다.

    • 위치: Log Analytics 작업 영역 및 대시보드가 배포되는 지역입니다.
    • serviceTier: 작업 영역 가격 책정 계층입니다. 유효한 값 목록은 여기를 참조하세요.
    • dataRetention(선택 사항): 로그 데이터가 Log Analytics 작업 영역에 보관되는 기간(일)입니다. 기본값은 30일입니다. 가격 책정 계층이 Free인 경우 데이터 보존 기간은 7일이어야 합니다.
    • workspaceName(선택 사항): 작업 영역의 이름입니다. 지정하지 않으면 템플릿에서 이름이 생성됩니다.
    az deployment group create --resource-group <resource-group-name> --template-file logAnalyticsDeploy.json --parameters location='East US' serviceTier='Standalone'
    

이 템플릿은 작업 영역을 만들고 대시보드에서 사용하는 미리 정의된 쿼리 집합도 만듭니다.

가상 머신에 Grafana 배포

Grafana는 Azure Monitor용 Grafana 플러그 인을 사용하여 Azure Log Analytics 작업 영역에 저장된 시계열 메트릭을 시각화하기 위해 배포할 수 있는 오픈 소스 프로젝트입니다. Grafana는 VM(가상 머신)에서 실행되며 스토리지 계정, 가상 네트워크 및 기타 리소스가 필요합니다. bitnami 인증 Grafana 이미지 및 관련 리소스를 사용하여 가상 머신을 배포하려면 다음 단계를 따릅니다.

  1. Azure CLI를 사용하여 Grafana에 대한 Azure Marketplace 이미지 약관에 동의합니다.

    az vm image terms accept --publisher bitnami --offer grafana --plan default
    
  2. GitHub 리포지토리의 로컬 복사본에서 /spark-monitoring/perftools/deployment/grafana 디렉터리로 이동합니다.

  3. 다음과 같이 grafanaDeploy.json Resource Manager 템플릿을 배포합니다.

    export DATA_SOURCE="https://raw.githubusercontent.com/mspnp/spark-monitoring/master/perftools/deployment/grafana/AzureDataSource.sh"
    az deployment group create \
        --resource-group <resource-group-name> \
        --template-file grafanaDeploy.json \
        --parameters adminPass='<vm password>' dataSource=$DATA_SOURCE
    

배포가 완료되면 Grafana의 bitnami 이미지가 가상 머신에 설치됩니다.

Grafana 암호 업데이트

설정 프로세스의 일부로 Grafana 설치 스크립트는 admin 사용자의 임시 암호를 출력합니다. 로그인하려면 이 임시 암호가 필요합니다. 임시 암호를 가져오려면 다음 단계를 따릅니다.

  1. Azure 포털에 로그인합니다.
  2. 리소스가 배포된 리소스 그룹을 선택합니다.
  3. Grafana가 설치된 VM을 선택합니다. 배포 템플릿에서 기본 매개 변수 이름을 사용한 경우 VM 이름 앞에 sparkmonitoring-vm-grafana가 붙습니다.
  4. 지원 + 문제 해결 섹션에서 부팅 진단을 클릭하여 부팅 진단 페이지를 엽니다.
  5. 부팅 진단 페이지에서 직렬 로그를 클릭합니다.
  6. "Bitnami 애플리케이션 암호 설정" 문자열을 검색합니다.
  7. 암호를 안전한 위치에 복사합니다.

그리고 다음 단계에 따라 Grafana 관리자 암호를 변경합니다.

  1. Azure Portal에서 VM을 선택하고 개요를 클릭합니다.
  2. 공용 IP 주소를 복사합니다.
  3. 웹 브라우저를 열고 다음 URL로 이동합니다. http://<IP address>:3000.
  4. Grafana 로그인 화면에서 사용자 이름으로 admin을 입력하고 이전 단계의 Grafana 암호를 사용합니다.
  5. 로그인한 후 구성(기어 아이콘)을 선택합니다.
  6. 서버 관리를 선택합니다.
  7. 사용자 탭에서 관리자 로그인을 선택합니다.
  8. 암호를 업데이트합니다.

Azure Monitor 데이터 원본 만들기

  1. Grafana가 Log Analytics 작업 영역에 대한 액세스를 관리할 수 있도록 하는 서비스 주체를 만듭니다. 자세한 내용은 Azure CLI을 사용하여 Azure 서비스 주체 만들기를 참조하세요.

    az ad sp create-for-rbac --name http://<service principal name> \
                    --role "Log Analytics Reader" \
                    --scopes /subscriptions/mySubscriptionID
    
  2. 이 명령의 출력에서 appId, 암호 및 테넌트 값을 기록해 둡니다.

    {
        "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "displayName": "azure-cli-2019-03-27-00-33-39",
        "name": "http://<service principal name>",
        "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  3. 앞에서 설명한 대로 Grafana에 로그인합니다. 구성(기어 아이콘)을 선택한 다음 데이터 원본를 선택합니다.

  4. 데이터 원본 탭에서 데이터 원본 추가를 클릭합니다.

  5. 데이터 원본 유형으로 Azure Monitor를 선택합니다.

  6. 설정 섹션에서 이름 텍스트 상자에 데이터 원본의 이름을 입력합니다.

  7. Azure Monitor API 세부 정보 섹션에 다음 정보를 입력합니다.

    • 구독 ID: Azure 구독 ID입니다.
    • 테넌트 ID: 이전의 테넌트 ID입니다.
    • 클라이언트 ID: 이전의 "appId" 값입니다.
    • 클라이언트 암호: 이전의 "password" 값입니다.
  8. Azure Log Analytics API 세부 정보 섹션에서 Azure Monitor API와 동일한 세부 정보 확인란을 선택합니다.

  9. 저장 및 테스트를 클릭합니다. Log Analytics 데이터 원본이 올바르게 구성된 경우 성공 메시지가 표시됩니다.

대시보드 만들기

다음 단계에 따라 Grafana에서 대시보드를 만듭니다.

  1. GitHub 리포지토리의 로컬 복사본에서 /perftools/dashboards/grafana 디렉터리로 이동합니다.

  2. 다음 스크립트를 실행합니다.

    export WORKSPACE=<your Azure Log Analytics workspace ID>
    export LOGTYPE=SparkListenerEvent_CL
    
    sh DashGen.sh
    

    스크립트의 출력은 SparkMonitoringDash.json이라는 파일입니다.

  3. Grafana 대시보드로 돌아가서 만들기(더하기 아이콘)를 선택합니다.

  4. 가져오기를 선택합니다.

  5. .json 파일 업로드를 클릭합니다.

  6. 2단계에서 만든 SparkMonitoringDash.json 파일을 선택합니다.

  7. 옵션 섹션의 ALA에서 앞에서 만든 Azure Monitor 데이터 원본을 선택합니다.

  8. 가져오기를 클릭합니다.

대시보드의 시각화

Azure Log Analytics 및 Grafana 대시보드에는 시계열 시각화 집합이 포함되어 있습니다. 각 그래프는 Apache Spark 작업, 작업 단계 및 각 단계를 구성하는 작업과 관련된 메트릭 데이터의 시계열 플롯입니다.

시각화는 다음과 같습니다.

작업 대기 시간

이 시각화는 작업의 전체 성능에 대한 대략적인 보기인 작업의 실행 대기 시간을 보여 줍니다. 시작부터 완료까지의 작업 실행 기간을 표시합니다. 작업 시작 시간은 작업 제출 시간과 다릅니다. 대기 시간은 클러스터 ID 및 애플리케이션 ID로 인덱싱된 작업 실행의 백분위수(10%, 30%, 50%, 90%)로 표시됩니다.

단계 대기 시간

시각화는 클러스터별, 애플리케이션별, 개별 단계별 각 단계의 대기 시간을 보여 줍니다. 이 시각화는 느리게 실행되는 특정 단계를 식별하는 데 유용합니다.

작업 대기 시간

이 시각화는 작업 실행 대기 시간을 보여 줍니다. 대기 시간은 클러스터, 단계 이름 및 애플리케이션당 작업 실행의 백분위수로 표시됩니다.

호스트당 작업 실행 합계

이 시각화는 클러스터에서 실행 중인 호스트당 작업 실행 대기 시간의 합계를 보여 줍니다. 호스트별 작업 실행 대기 시간을 보면 다른 호스트보다 전체 작업 대기 시간이 훨씬 더 긴 호스트를 식별할 수 있습니다. 이는 작업이 호스트에 비효율적으로 또는 불균등하게 분산되었음을 의미할 수 있습니다.

작업 메트릭

이 시각화는 주어진 작업의 실행에 대한 실행 메트릭 집합을 보여 줍니다. 이러한 메트릭에는 데이터 셔플의 크기 및 기간, 직렬화 및 역직렬화 작업 기간 등이 포함됩니다. 전체 메트릭 집합을 보려면 패널에 대한 Log Analytics 쿼리를 확인합니다. 이 시각화는 작업(task)을 구성하는 작업(operation)을 이해하고 각 작업(operation)의 리소스 사용량을 식별하는 데 유용합니다. 그래프의 급증은 조사해야 하는 비용이 많이 드는 작업을 나타냅니다.

클러스터 처리량

이 시각화는 클러스터 및 애플리케이션당 수행된 작업량을 나타내기 위해 클러스터 및 애플리케이션별로 인덱싱된 작업 항목의 상위 수준 보기입니다. 클러스터, 애플리케이션, 단계별로 완료된 작업, 작업 및 단계의 수를 1분 단위로 표시합니다.

스트리밍 처리량/대기 시간

이 시각화는 구조적인 스트리밍 쿼리와 연결된 메트릭과 관련이 있습니다. 그래프는 초당 입력 행 수와 초당 처리 행 수를 보여 줍니다. 스트리밍 메트릭은 애플리케이션별로도 표시됩니다. 이러한 메트릭은 구조적인 스트리밍 쿼리가 처리될 때 OnQueryProgress 이벤트가 생성되고 시각화가 쿼리 일괄 처리를 실행하는 데 걸린 시간(밀리초)으로 스트리밍 대기 시간을 나타낼 때 전송됩니다.

실행기당 리소스 사용량

다음은 대시보드에 대한 시각화 집합으로 특정 유형의 리소스와 각 클러스터의 실행기별로 리소스가 사용되는 방식을 보여 줍니다. 이러한 시각화를 통해 실행기당 리소스 사용량의 이상값을 식별할 수 있습니다. 예를 들어 특정 실행기에 대한 작업 할당이 치우친 경우 클러스터에서 실행 중인 다른 실행기에 비해 리소스 사용량이 높아집니다. 이는 실행기의 리소스 사용량 급증으로 식별할 수 있습니다.

실행기 컴퓨팅 시간 메트릭

다음은 실행기 직렬화 시간, 역직렬화 시간, CPU 시간 및 Java 가상 머신 시간 대 전체 실행기 컴퓨팅 시간의 비율을 보여 주는 대시보드에 대한 시각화 집합입니다. 이는 이 네 가지 메트릭이 전체 실행기 처리에 얼마나 기여하고 있는지 시각적으로 보여 줍니다.

무작위 재생 메트릭

마지막 시각화 집합은 모든 실행기에서 구조적인 스트리밍 쿼리와 관련된 데이터 무작위 재생 메트릭을 보여 줍니다. 여기에는 읽은 무작위 재생 바이트 수, 쓴 무작위 재생 바이트 수, 무작위 재생 메모리 및 파일 시스템이 사용되는 쿼리의 디스크 사용량이 포함됩니다.

다음 단계