다음을 통해 공유


Databricks 앱에 대한 로깅 및 모니터링

효과적인 로깅 및 모니터링은 Databricks 앱에서 보안 이벤트를 감지하고 대응하는 데 도움이 됩니다. 앱은 진단, 성능 추적 및 보안 분석에 사용할 수 있는 애플리케이션 수준 로그와 플랫폼 감사 로그를 모두 생성합니다.

애플리케이션 로그

Databricks 앱 UI 또는 앱의 URL을 통해 로그를 사용할 수 있도록 하려면, 앱에서 출력을 stdoutstderr에 기록해야 합니다.

다음과 같은 방법으로 애플리케이션 로그에 액세스합니다.

  • 앱 UI: 앱 세부 정보 페이지에서 로그 탭을 클릭하여 표준 출력 및 오류를 봅니다. 자세한 내용은 Databricks 앱에 대한 세부 정보 보기를 참조하세요.
  • 직접 URL: 앱 URL에 추가 /logz 합니다. 예를 들어, 앱 URL이 https://my-app-1234567890.my-instance.databricksapps.com인 경우, 로그는 https://my-app-1234567890.my-instance.databricksapps.com/logz에서 확인할 수 있습니다.

비고

Azure Databricks는 앱 컴퓨팅이 종료되면 로그를 유지하지 않습니다. 영구 로깅의 경우 외부 로깅 서비스와 통합하거나 Unity 카탈로그 볼륨 또는 테이블에 로그를 씁니다.

외부 로깅 서비스와 통합

영구 로깅 및 고급 모니터링 기능의 경우 다음을 사용합니다.

  • APM(애플리케이션 성능 모니터링) 도구: New Relic, Datadog 또는 유사한 애플리케이션 성능 모니터링 도구를 사용하여 로그, 메트릭 및 추적을 수집하고 분석합니다.
  • 사용자 지정 로그 지속성: 장기 스토리지 및 분석을 위해 정기적으로 Unity 카탈로그 볼륨 또는 테이블에 로그를 씁니다.

로그 서식 및 콘텐츠에 대한 지침은 권장 로깅 방법을 참조하세요.

외부 모니터링 및 실시간 경고 시스템과 통합하려면 다음을 수행합니다.

  • JSON 또는 기타 컴퓨터 구문 분석 가능한 형식으로 로그의 서식을 지정합니다.
  • 컨텍스트를 사용하여 보안 관련 이벤트를 기록합니다.
    • 사용자 ID 및 결과를 포함한 인증 및 권한 부여 이벤트
    • 카탈로그, 스키마 및 테이블 이름과 같은 데이터 액세스 세부 정보
    • 잘못된 토큰, 권한 거부 및 의심스러운 활동과 같은 보안 관련 오류
  • 로그를 외부 시스템으로 전달합니다. APM 또는 로그 집계 도구와 통합하여 실시간 경고, 보안 인시던트 응답, 사용 및 성능 분석 및 Azure Databricks 시스템 로그와의 상관 관계를 지원합니다.

로깅에 대한 보안 고려 사항

Databricks 앱은 데이터 반출을 방지하기 위해 다음과 같은 기본 제공 컨트롤로 설계되었습니다.

  • API 전용 액세스: 앱은 공용 Azure Databricks API를 통해서만 Azure Databricks 리소스에 액세스할 수 있습니다. 이러한 API는 시스템 테이블 로그를 통해 감사할 수 있습니다.
  • 암호화된 통신: 모든 API 트래픽은 보안 데이터 전송을 보장하기 위해 TLS 1.2 이상을 사용하여 암호화됩니다.

시스템 테이블을 사용하여 보안 모니터링

Azure Databricks는 앱과 관련된 활동을 위한 감사 로그를 system.access.audit 테이블에 캡처합니다. 이러한 로그를 쿼리하여 사용자 작업, 앱 구성 변경 및 보안 이벤트를 추적할 수 있습니다.

다음 쿼리를 사용하여 보안 관련 활동을 모니터링하고 앱의 잠재적인 문제를 검색합니다.

앱 권한 변경 모니터링

이 쿼리를 사용하여 앱 권한 수정을 검색합니다.

-- Monitor all app permission modifications in the last 30 days
WITH permission_changes AS (
  SELECT
    event_date,
    workspace_id,
    request_params.request_object_id AS app_name,
    user_identity.email AS modified_by,
    explode(from_json(
      request_params.access_control_list,
      'array<struct<user_name:string,group_name:string,permission_level:string>>'
    )) AS permission
  FROM system.access.audit
  WHERE action_name = 'changeAppsAcl'
    AND event_date >= current_date() - 30
)
SELECT
  event_date,
  app_name,
  modified_by,
  permission.user_name,
  permission.group_name,
  permission.permission_level
FROM permission_changes
ORDER BY event_date DESC

사용자 API 범위를 사용하여 앱 식별

이 쿼리를 사용하여 구성된 사용자 API 범위가 있는 앱을 찾습니다.

-- Find apps created or updated in the last 30 days with user API scopes configured
SELECT
  event_date,
  get_json_object(request_params.app, '$.name') AS app_name,
  user_identity.email AS creator_email,
  get_json_object(request_params.app, '$.user_api_scopes') AS user_api_scopes
FROM system.access.audit
WHERE
  action_name IN ('createApp', 'updateApp')
  AND get_json_object(request_params.app, '$.user_api_scopes') IS NOT NULL
  AND event_date >= current_date() - INTERVAL 30 DAYS

사용자 권한 부여 작업 추적

이 쿼리를 사용하여 사용자 권한 부여로 수행된 앱 작업을 나열합니다.

-- List app actions performed on behalf of users in the last 30 days
WITH obo_events AS (
  SELECT
    event_date,
    workspace_id,
    audit_level,
    identity_metadata.acting_resource AS app_id,   -- OAuth App ID or name
    user_identity.email AS user_email,             -- Logged-in user
    service_name,
    action_name
  FROM system.access.audit
  WHERE event_date >= current_date() - 30
    AND identity_metadata.acting_resource IS NOT NULL
)
SELECT
  event_date,
  app_id,
  user_email,
  service_name,
  action_name,
  audit_level,
  COUNT(*) AS event_count
FROM obo_events
GROUP BY
  event_date, app_id, user_email, service_name, action_name, audit_level
ORDER BY event_date DESC;

운영 모니터링

시스템 테이블을 사용하여 비용 및 리소스 사용량과 같은 앱의 운영 측면을 모니터링합니다.

앱 비용 모니터링

테이블을 사용하여 Databricks 앱 비용을 모니터링합니다 system.billing.usage . 다음 쿼리를 사용하여 일별 또는 월별 앱에 대한 정확한 비용 정보를 가져옵니다.

-- Get Databricks Apps cost by app per day for the last 30 days
SELECT
  us.usage_date,
  us.usage_metadata.app_id,
  us.usage_metadata.app_name,
  SUM(us.usage_quantity) AS dbus,
  SUM(us.usage_quantity * lp.pricing.effective_list.default) AS dollars
FROM
  system.billing.usage us
LEFT JOIN system.billing.list_prices lp
  ON lp.sku_name = us.sku_name
  AND us.usage_start_time BETWEEN lp.price_start_time AND COALESCE(lp.price_end_time, NOW())
WHERE
  billing_origin_product = 'APPS'
  AND us.usage_unit = 'DBU'
  AND us.usage_date >= DATE_SUB(NOW(), 30)
GROUP BY ALL

Databricks Apps는 비용을 추적하는 데 도움이 되는 예산 정책을 지원합니다. 예산 정책 구성에 대한 자세한 내용은 서버리스 예산 정책에 대한 특성 사용을 참조하세요.

앱 인사이트 모니터링

중요합니다

인사이트 탭은 베타에 있습니다.

앱 세부 정보 페이지의 인사이트 탭에는 사용자 참여 및 앱 가용성이 표시됩니다.

뷰어 추적

뷰어 테이블은 애플리케이션에 액세스하는 사용자를 추적합니다.

Azure Databricks는 사용자가 앱 URL 또는 API 액세스를 통해 앱에 액세스할 때 보기 이벤트를 기록합니다. 앱당 사용자별로 고유하게 데이터를 저장합니다. 동일한 사용자가 후속 방문 시 새 행을 만드는 대신 이전 기록을 덮어씁니다.

마지막으로 본 타임스탬프는 30분 간의 OAuth 세션 새로 고침 주기를 따릅니다. 세션 창 내에서 여러 번 방문하면 초기 방문 시간이 유지되지만 세션이 만료된 후 첫 번째 액세스는 타임스탬프를 새 방문 시간으로 덮어씁니다.

비고

베타에서 마지막으로 본 시간은 UTC(협정 세계시)만 표시합니다.

작동 시간 및 상태

다음 상태 신호를 모니터링하여 앱 가용성 문제를 해결합니다.

  • App Service 상태: 앱을 지원하는 Azure Databricks 인프라를 사용할 수 있는지 여부입니다. 사용할 수 없는 경우 플랫폼에 서비스 수준 문제가 있습니다. Databricks 지원에 문의하세요.
  • 앱 가용성: 특정 애플리케이션이 요청을 제공하는지 여부입니다. 사용할 수 없는 경우 코드에서 배포 오류 또는 크래시를 확인합니다.