다음을 통해 공유


원격 분석을 Databricks 앱에 구성

중요합니다

앱 원격 분석은 베타 버전에 있습니다.

Databricks Apps 원격 분석은 추적, 로그 및 메트릭을 수집하고 OpenTelemetry(OTel) 프로토콜을 사용하여 Unity 카탈로그 표에 저장합니다. 앱 원격 분석을 사용하도록 설정하면 Databricks는 사용자 로그인 및 직접 API 요청과 같은 시스템 로그 및 사용 이벤트를 자동으로 캡처합니다. 프레임워크에 대해 OpenTelemetry SDK를 사용하여 사용자 지정 계측을 추가할 수도 있습니다.

요구 사항

  • 작업 영역은 지원되는 지역에 있어야 합니다: australiaeast, brazilsouth, canadacentral, centralindia, centralus, eastus, eastus2, germanywestcentral, northcentralus, northeurope, southcentralus, southeastasia, swedencentral, switzerlandnorth, uksouth, westeurope, westus, westus2, westus3.
  • Unity 카탈로그에서 새 원격 분석 대상 테이블을 만들려면 대상 카탈로그 및 스키마에 대한 CAN MANAGE 권한과 CREATE TABLE가 필요합니다.
  • Unity 카탈로그의 기존 원격 분석 대상 테이블에 쓰려면, 대상 카탈로그 및 스키마에 대한 CAN MANAGE 권한이 필요하거나, 모든 계정 사용자에게 대상 테이블에 대한 USE CATALOG, USE SCHEMA, SELECT, MODIFY 권한이 있어야 합니다.
  • 대상 테이블은 작업 영역과 동일한 지역에서 관리되는 델타 테이블이어야 합니다.
  • Databricks는 쿼리 성능을 향상시키려면 원격 분석 대상 테이블에서 예측 최적화 를 사용하도록 설정하는 것이 좋습니다.

앱 원격 분석 활성화

메모

앱 원격 분석 베타 전에 앱을 만든 경우 다음 구성 단계를 진행하기 전에 앱을 중지하고 다시 시작해야 합니다.

앱에 대한 원격 분석을 켜려면 앱 설정에서 원격 분석 테이블에 대한 카탈로그 및 스키마를 구성합니다.

  1. Azure Databricks 작업 영역에서 앱 세부 정보 페이지를 엽니다.
  2. 개요 탭에서 앱 원격 분석 구성 섹션을 찾아 추가를 클릭합니다.
  3. 카탈로그 및 스키마를 입력하거나 찾아서 선택합니다. Azure Databricks는 선택한 위치에 otel_metricsotel_spansotel_logs있는 세 개의 테이블에 원격 분석 데이터를 씁니다.
  4. (선택 사항) 테이블이 <prefix>_otel_metrics, <prefix>_otel_spans, <prefix>_otel_logs와 같이 이름 지어지도록 테이블 접두사를 지정하세요. Azure Databricks는 기존 테이블에 추가하거나 테이블이 없는 경우 만듭니다.
  5. 저장을 클릭합니다.
  6. 앱을 재배포하여 원격 분석이 Unity 카탈로그로 흐르기 시작하도록 합니다.

원격 분석 데이터 확인

otel_logs 다시 배포한 후 테이블이 자동으로 채워집니다. otel_spansotel_metrics 테이블은 앱에 사용자 정의 계측을 추가한 후에만 채워집니다.

앱을 다시 배포한 후:

  1. 작업을 생성하려면 앱 URL을 방문하세요.

  2. 데이터의 초기 일괄 처리가 나타날 때까지 몇 초 정도 기다립니다.

  3. Databricks SQL에서 다음 쿼리를 실행하여 데이터가 흐르는지 확인합니다.

    SELECT * FROM <catalog>.<schema>.otel_logs
    LIMIT 10;
    

원격 분석 데이터 쿼리

원격 분석 데이터를 필터링하고 상관 관계를 지정하는 데 유용한 열에는 time, service_name, trace_idspan_idattributes. 열은 attributes 이벤트별 메타데이터(예: event.name.)를 포함하는 맵입니다.

원격 분석 테이블의 전체 스키마를 보려면 다음을 실행합니다.

DESCRIBE TABLE <catalog>.<schema>.otel_logs;

다음 예제에서는 지난 1시간 이내에 시스템 또는 사용자 지정 OpenTelemetry 오류 로그를 otel_logs 테이블에서 쿼리합니다.

SELECT time, body
FROM <catalog>.<schema>.otel_logs
WHERE service_name = '<app-name>'
  AND severity_text = "ERROR"
  AND time >= current_timestamp() - INTERVAL 1 HOUR
ORDER BY time DESC
LIMIT 100;

사용자 지정 계측 추가

OpenTelemetry 자동 계측을 추가하여 사용자 지정 추적, 메트릭 및 로그를 생성합니다. 프레임워크에 표시된 대로 사용자 app.yaml 및 종속성 파일을 업데이트합니다.

Streamlit

다음과 같이 app.yaml를 업데이트합니다.

command: ['opentelemetry-instrument', 'streamlit', 'run', 'app.py']
env:
  - name: OTEL_TRACES_SAMPLER
    value: 'always_on'

다음과 같이 requirements.txt를 업데이트합니다.

streamlit==1.38.0

# Auto-instrumentation
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc

# Required for Streamlit
opentelemetry-instrumentation-tornado

# Host metrics (CPU, memory)
opentelemetry-instrumentation-system-metrics

대시

다음과 같이 app.yaml를 업데이트합니다.

command: ['opentelemetry-instrument', 'python', 'app.py']
env:
  - name: OTEL_TRACES_SAMPLER
    value: 'always_on'

다음과 같이 requirements.txt를 업데이트합니다.

dash
dash-bootstrap-components
pandas
plotly
databricks-sql-connector
databricks-sdk
python-dotenv
dash-ag-grid
opentelemetry-distro[otlp]
opentelemetry-instrumentation-flask
opentelemetry-exporter-otlp-proto-grpc

플라스크

다음과 같이 app.yaml를 업데이트합니다.

command: ['opentelemetry-instrument', 'flask', '--app', 'app.py', 'run', '--no-reload']
env:
  - name: OTEL_TRACES_SAMPLER
    value: 'always_on'

다음과 같이 requirements.txt를 업데이트합니다.

opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-flask

FastAPI

다음과 같이 app.yaml를 업데이트합니다.

command: ['opentelemetry-instrument', 'uvicorn', 'app:app', '--host', '0.0.0.0', '--port', '8000']
env:
  - name: OTEL_TRACES_SAMPLER
    value: 'always_on'

다음과 같이 requirements.txt를 업데이트합니다.

fastapi
uvicorn
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-fastapi

Node.JS

otel.js 파일을 만듭니다.

'use strict';

import { NodeSDK } from '@opentelemetry/sdk-node';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-proto';
import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto';

const sdk = new NodeSDK({
  traceExporter: new OTLPTraceExporter(),
  metricReader: new PeriodicExportingMetricReader({
    exporter: new OTLPMetricExporter(),
    exportIntervalMillis: 10000,
  }),
  instrumentations: [
    getNodeAutoInstrumentations({
      '@opentelemetry/instrumentation-fs': { enabled: false },
    }),
  ],
});

try {
  sdk.start();
} catch (e) {
  console.error('OTel SDK failed to start', e);
}

async function shutdown() {
  try {
    await sdk.shutdown();
  } catch (e) {
    console.error('OTel SDK shutdown failed', e);
  } finally {
    process.exit(0);
  }
}
process.on('SIGTERM', shutdown);
process.on('SIGINT', shutdown);

다음과 같이 package.json를 업데이트합니다.

{
  "name": "nodejs-otel",
  "version": "0.1.0",
  "private": true,
  "main": "app.js",
  "scripts": {
    "start": "node -r ./otel.js app.js"
  },
  "dependencies": {
    "express": "^4.21.2",
    "morgan": "^1.10.0",
    "@opentelemetry/api": "^1.9.0",
    "@opentelemetry/sdk-node": "0.203.0",
    "@opentelemetry/auto-instrumentations-node": "0.67.3",
    "@opentelemetry/exporter-trace-otlp-proto": "0.203.0",
    "@opentelemetry/exporter-metrics-otlp-proto": "0.203.0",
    "@opentelemetry/exporter-logs-otlp-proto": "0.203.0",
    "@opentelemetry/sdk-metrics": "2.0.1"
  }
}

환경 변수

앱 원격 분석을 사용하도록 설정하면 Databricks는 앱 런타임에서 OTLP 수집기 엔드포인트, 내보내기 프로토콜, 리소스 특성 및 일괄 처리에 대한 환경 변수를 자동으로 구성합니다. OTel 환경 변수의 전체 목록은 앱 원격 분석 환경 변수를 참조하세요.

제한 사항 및 제한 사항

앱 원격 분석은 Zerobus 수집 커넥터를 사용하여 Unity 카탈로그 테이블에 데이터를 씁니다. 모든 Zerobus 수집 커넥터 제한 사항은 레코드 크기, 처리량, 전달 보장 및 대상 테이블 요구 사항에 대한 제한을 포함하여, 앱 원격 분석에 모두 적용됩니다.

제로버스 제한 외에도 앱 원격 분석은 로그 줄당 최대 로그 줄 크기 1MB를 적용합니다.