중요합니다
앱 원격 분석은 베타 버전에 있습니다.
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는 쿼리 성능을 향상시키려면 원격 분석 대상 테이블에서 예측 최적화 를 사용하도록 설정하는 것이 좋습니다.
앱 원격 분석 활성화
메모
앱 원격 분석 베타 전에 앱을 만든 경우 다음 구성 단계를 진행하기 전에 앱을 중지하고 다시 시작해야 합니다.
앱에 대한 원격 분석을 켜려면 앱 설정에서 원격 분석 테이블에 대한 카탈로그 및 스키마를 구성합니다.
- Azure Databricks 작업 영역에서 앱 세부 정보 페이지를 엽니다.
- 개요 탭에서 앱 원격 분석 구성 섹션을 찾아 추가를 클릭합니다.
- 카탈로그 및 스키마를 입력하거나 찾아서 선택합니다. Azure Databricks는 선택한 위치에
otel_metricsotel_spansotel_logs있는 세 개의 테이블에 원격 분석 데이터를 씁니다. - (선택 사항) 테이블이
<prefix>_otel_metrics,<prefix>_otel_spans,<prefix>_otel_logs와 같이 이름 지어지도록 테이블 접두사를 지정하세요. Azure Databricks는 기존 테이블에 추가하거나 테이블이 없는 경우 만듭니다. - 저장을 클릭합니다.
- 앱을 재배포하여 원격 분석이 Unity 카탈로그로 흐르기 시작하도록 합니다.
원격 분석 데이터 확인
otel_logs 다시 배포한 후 테이블이 자동으로 채워집니다.
otel_spans 및 otel_metrics 테이블은 앱에 사용자 정의 계측을 추가한 후에만 채워집니다.
앱을 다시 배포한 후:
작업을 생성하려면 앱 URL을 방문하세요.
데이터의 초기 일괄 처리가 나타날 때까지 몇 초 정도 기다립니다.
Databricks SQL에서 다음 쿼리를 실행하여 데이터가 흐르는지 확인합니다.
SELECT * FROM <catalog>.<schema>.otel_logs LIMIT 10;
원격 분석 데이터 쿼리
원격 분석 데이터를 필터링하고 상관 관계를 지정하는 데 유용한 열에는 time, service_name, trace_idspan_id및 attributes. 열은 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를 적용합니다.