Azure Databricks 진단 로깅

Azure Databricks Azure Databricks 사용자가 수행한 활동의 포괄적인 엔드 투 엔드 진단 로그를 제공하여 기업에서 자세한 Azure Databricks 사용 패턴을 모니터링할 수 있도록 합니다.

진단 로그 배달 구성

참고

진단 로그에는 Azure Databricks Premium 계획이필요합니다.

  1. Azure Databricks 작업 영역에 대한 소유자 또는 기여자로 Azure Portal 로그인하고 Azure Databricks Service 리소스를 클릭합니다.

  2. 사이드바의 모니터링 섹션에서 진단 설정 탭을 클릭합니다.

  3. 진단 켜기를 클릭합니다.

    Azure Databricks turn on diagnostics

  4. 진단 설정 페이지에서 다음 구성을 제공합니다.

    이름

    만들 로그에 대한 이름을 입력합니다.

    스토리지 계정에 보관

    이 옵션을 사용하려면 연결할 기존 스토리지 계정이 필요합니다. 포털에서 새 스토리지 계정을 만들려면 스토리지 계정 만들기를 참조하고 지침에 따라 Azure Resource Manager, 범용 계정을 만듭니다. 그런 다음 포털의 이 페이지로 돌아가 스토리지 계정을 선택합니다. 새로 만든 스토리지 계정이 드롭다운 메뉴에 나타나기까지 몇 분 정도 걸릴 수 있습니다. 스토리지 계정에 쓰기로 인해 발생하는 추가 비용에 대한 자세한 내용은 Azure Storage 가격 책정을참조하세요.

    이벤트 허브로 스트림

    이 옵션을 사용하려면 연결할 기존 Azure Event Hubs 네임스페이스 및 이벤트 허브가 필요합니다. Event Hubs 네임스페이스를 만들려면 Azure Portal을 사용하여 Event Hubs 네임스페이스 및 이벤트 허브 만들기를 참조하세요. 그런 다음, 포털에서 이 페이지로 돌아가서 Event Hubs 네임스페이스 및 정책 이름을 선택합니다. 이벤트 허브에 쓰기로 인해 발생하는 추가 비용에 대한 자세한 내용은 Azure Event Hubs 가격 책정을 참조하세요.

    Log Analytics에 보내기

    이 옵션을 사용하려면 기존 Log Analytics 작업 영역을 사용하거나 포털에서 새 작업 영역 만들기 단계에 따라 새 작업 영역을 만듭니다. Log Analytics에 로그를 전송하여 발생하는 추가 비용에 대한 자세한 내용은 Azure Monitor 가격 책정을 참조하세요.

    Azure Databricks Diagnostics settings

  5. 진단 로그에 사용할 서비스를 선택하고 보존 정책을 설정합니다.

    보존은 스토리지 계정에만 적용됩니다. 보존 정책을 적용하지 않고 데이터를 계속 보존하려면 보존(일)을 0으로 설정합니다.

  6. 저장을 선택합니다.

  7. "에 대한 진단을 업데이트하지 못했습니다. 구독이 microsoft.insights를 사용하도록 등록되지 않았습니다." 문제 해결 Azure Diagnostics 지침에 따라 계정을 등록한 다음 이 절차를 다시 시도합니다.

  8. 나중에 진단 로그를 저장하는 방식을 변경하려면 이 페이지로 돌아와 사용자 계정의 진단 로그 설정을 수정합니다.

PowerShell을 사용하여 로깅 켜기

  1. Azure PowerShell 세션을 시작하고 다음 명령 사용하여 Azure 계정에 로그인합니다.

    Connect-AzAccount
    

    Azure Powershell이 아직 설치되지 않은 경우 다음 명령을 사용하여 Azure PowerShell 설치하고 Azure RM 모듈을 가져옵니다.

    Install-Module -Name Az -AllowClobber
    Import-Module AzureRM
    
  2. 팝업 브라우저 창에 Azure 계정 사용자 이름 및 암호를 입력합니다. Azure PowerShell은 이 계정과 연관된 모든 구독을 가져와서 기본적으로 첫 번째 구독을 사용합니다.

    구독이 여러 개인 경우 Azure Key Vault을 만드는 데 사용된 특정된 구독을 지정해야 할 수 있습니다. 계정에 대한 구독을 보려면 다음 명령을 입력합니다.

    Get-AzSubscription
    

    로깅하는 Azure Databricks 계정과 연결된 구독을 지정하려면 다음 명령을 입력합니다.

    Set-AzContext -SubscriptionId <subscription ID>
    
  3. Log Analytics 리소스 이름을 라는 변수로 logAnalytics 설정합니다. 여기서 ResourceName 은 Log Analytics 작업 영역의 이름입니다.

    $logAnalytics = Get-AzResource -ResourceGroupName <resource group name> -ResourceName <resource name> -ResourceType "Microsoft.OperationalInsights/workspaces"
    
  4. Azure Databricks 서비스 리소스 이름을 변수로 databricks 설정합니다. 여기서 ResourceName 은 Azure Databricks 서비스의 이름입니다.

    $databricks = Get-AzResource -ResourceGroupName <your resource group name> -ResourceName <your Azure Databricks service name> -ResourceType "Microsoft.Databricks/workspaces"
    
  5. Azure Databricks 대한 로깅을 사용하도록 설정하려면 새 스토리지 계정, Azure Databricks 서비스 및 범주에 대한 변수와 함께 Set-AzDiagnosticSetting cmdlet을 사용하여 로깅을 사용하도록 설정합니다. 다음 명령을 실행하고 -Enabled 플래그를 로 설정합니다. $true

    Set-AzDiagnosticSetting -ResourceId $databricks.ResourceId -WorkspaceId $logAnalytics.ResourceId -Enabled $true -name "<diagnostic setting name>" -Category <comma separated list>
    

Azure CLI 사용하여 로깅 사용

  1. PowerShell을 엽니다.

  2. 다음 명령을 사용하여 Azure 계정에 연결합니다.

    az login
    
  3. 다음 진단 설정 명령을 실행합니다.

    az monitor diagnostic-settings create --name <diagnostic name>
    --resource-group <log analytics workspace resource group>
    --workspace <log analytics name or object ID>
    --resource <target resource object ID>
    --logs '[
    {
      \"category\": <category name>,
      \"enabled\": true
    }
    ]'
    

REST API

LogSettings API를 사용합니다.

요청

PUT https://management.azure.com/{resourceUri}/providers/microsoft.insights/diagnosticSettings/{name}?api-version=2017-05-01-preview

요청 본문

{
    "properties": {
    "workspaceId": "<log analytics resourceId>",
    "logs": [
      {
        "category": "<category name>",
        "enabled": true,
        "retentionPolicy": {
          "enabled": false,
          "days": 0
        }
      }
    ]
  }
}

진단 로그 배달

계정에 대해 로깅을 사용하도록 설정하면 Azure Databricks 자동으로 진단 로그를 배달 위치로 보내기 시작합니다. 로그는 활성화 후 15분 이내에 사용할 수 있습니다. Azure Databricks 감사 가능 이벤트는 일반적으로 Azure 상업용 지역의 15분 이내에 진단 로그에 표시됩니다.

참고

SSH 로그인 로그는 높은 대기 시간을 통해 전달됩니다.

진단 로그 스키마

진단 로그 레코드의 스키마는 다음과 같습니다.

필드 Description
operationversion 진단 로그 형식의 스키마 버전입니다.
time 작업의 UTC 타임스탬프입니다.
properties.sourceIPAddress 원본 요청의 IP 주소입니다.
properties.userAgent 요청을 만드는 데 사용되는 브라우저 또는 API 클라이언트입니다.
properties.sessionId 동작의 세션 ID입니다.
Id 요청을 만드는 사용자에 대한 정보:

* * : 사용자 이메일 주소입니다.
category 요청을 기록한 서비스입니다.
operationName 로그인, 로그아웃, 읽기, 쓰기 등의 작업입니다.
properties.requestId 고유한 요청 ID입니다.
properties.requestParams 이벤트에 사용되는 매개 변수 키-값 쌍입니다.

requestParams필드는 잘림이 적용됩니다. JSON 표현의 크기가 100KB를 초과하면 값이 잘리고 ... truncated 문자열이 잘린 항목에 추가됩니다. 잘린 맵이 여전히 100KB보다 큰 경우 빈 TRUNCATED 값이 있는 단일 키가 대신 존재합니다.
properties.response 요청에 대한 응답:

* * 오류가 있는 경우의 오류 메시지입니다.
* * : 요청의 결과입니다.
* * 요청의 성공 여부를 나타내는 HTTP 상태 코드입니다.
properties.logId 로그 메시지의 고유 식별자입니다.

이벤트

categoryoperationName 속성은 로그 레코드의 이벤트를 식별합니다. Azure Databricks 다음 서비스에 대한 진단 로그를 제공합니다.

  • DBFS
  • 클러스터
  • 계정
  • 작업
  • Notebook
  • SSH
  • 작업 영역
  • 비밀
  • Databricks SQL
  • SQL 사용 권한
  • Repos

작업이 오래 걸리면 요청과 응답이 별도로 기록되지만 요청 및 응답 쌍의 은 properties.requestId 동일합니다.

탑재 관련 작업을 제외하고 Azure Databricks 진단 로그에는 DBFS 관련 작업이 포함되지 않습니다.

참고

자동 크기 조정으로 인한 클러스터 크기 조정 또는 예약으로 인한 작업 시작과 같은 자동화된 작업은 사용자 System-User에 의해 수행됩니다.

샘플 로그 출력

다음 JSON 샘플은 로그 출력을 Azure Databricks 예입니다.

{
    "TenantId": "<your tenant id",
    "SourceSystem": "|Databricks|",
    "TimeGenerated": "2019-05-01T00:18:58Z",
    "ResourceId": "/SUBSCRIPTIONS/SUBSCRIPTION_ID/RESOURCEGROUPS/RESOURCE_GROUP/PROVIDERS/MICROSOFT.DATABRICKS/WORKSPACES/PAID-VNET-ADB-PORTAL",
    "OperationName": "Microsoft.Databricks/jobs/create",
    "OperationVersion": "1.0.0",
    "Category": "jobs",
    "Identity": {
        "email": "mail@contoso.com",
        "subjectName": null
    },
    "SourceIPAddress": "131.0.0.0",
    "LogId": "201b6d83-396a-4f3c-9dee-65c971ddeb2b",
    "ServiceName": "jobs",
    "UserAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36",
    "SessionId": "webapp-cons-webapp-01exaj6u94682b1an89u7g166c",
    "ActionName": "create",
    "RequestId": "ServiceMain-206b2474f0620002",
    "Response": {
        "statusCode": 200,
        "result": "{\"job_id\":1}"
    },
    "RequestParams": {
        "name": "Untitled",
        "new_cluster": "{\"node_type_id\":\"Standard_DS3_v2\",\"spark_version\":\"5.2.x-scala2.11\",\"num_workers\":8,\"spark_conf\":{\"spark.databricks.delta.preview.enabled\":\"true\"},\"cluster_creator\":\"JOB_LAUNCHER\",\"spark_env_vars\":{\"PYSPARK_PYTHON\":\"/databricks/python3/bin/python3\"},\"enable_elastic_disk\":true}"
    },
    "Type": "DatabricksJobs"
}

진단 로그 분석

진단 로깅을 켰을 때 Log Analytics에 보내기 옵션을 선택한 경우 컨테이너의 진단 데이터는 일반적으로 15분 이내에 Azure Monitor 로그에 전달됩니다.

로그를 보기 전에 새 Kusto 쿼리 언어를 사용하도록 Log Analytics 작업 영역이 업그레이드되었는지 확인합니다. 확인하려면 Azure Portal 열고 맨 왼쪽에서 Log Analytics를 선택합니다. 그런 다음, Log Analytics 작업 영역을 선택합니다. 업그레이드할 메시지가 표시되면 Azure Log Analytics 작업 영역을 새 로그 검색으로 업그레이드를 참조하세요.

Azure Monitor 로그에서 진단 데이터를 보려면 페이지의 왼쪽 메뉴 또는 관리 영역에서 로그 검색 페이지를 엽니다. 그런 다음 로그 검색 상자에 쿼리를 입력합니다.

Azure Log Analytics

쿼리

로그 검색 상자에 입력할 수 있는 몇 가지 추가 쿼리는 다음과 같습니다. 이러한 쿼리는 Kusto 쿼리 언어로 작성됩니다.

  • Azure Databricks 작업 영역 및 해당 위치에 액세스한 모든 사용자를 쿼리하려면 다음을 수행합니다.

    DatabricksAccounts
    | where ActionName contains "login"
    | extend d=parse_json(Identity)
    | project UserEmail=d.email, SourceIPAddress
    
  • 사용된 Spark 버전을 확인하려면 다음을 수행합니다.

    DatabricksClusters
    | where ActionName == "create"
    | extend d=parse_json(RequestParams)
    | extend SparkVersion= d.spark_version
    | summarize Count=count() by tostring(SparkVersion)