Bagikan melalui


Mengonfigurasi telemetri untuk Aplikasi Databricks

Penting

Telemetri aplikasi ada di Beta.

Telemetri Databricks Apps mengumpulkan jejak data, log, dan metrik dan menyimpannya ke tabel Unity Catalog menggunakan protokol OpenTelemetry (OTel). Setelah Anda mengaktifkan telemetri aplikasi, Databricks secara otomatis mengambil log sistem dan peristiwa penggunaan seperti login pengguna dan permintaan API langsung. Anda juga dapat menambahkan instrumentasi kustom menggunakan OpenTelemetry SDK untuk kerangka kerja Anda.

Persyaratan

  • Ruang kerja Anda harus berada di wilayah yang didukung: australiaeast, brazilsouth, canadacentral, centralindia, centralus, eastus, eastus2, germanywestcentral, northcentralus, northeurope, southcentralus, southeastasia, swedencentral, switzerlandnorth, uksouth, westeurope, westus, westus2, westus3.
  • Untuk membuat tabel target telemetri baru di Unity Catalog, Anda memerlukan CAN MANAGE izin pada katalog dan skema target, dan CREATE TABLE pada skema.
  • Untuk menulis ke tabel target telemetri yang ada di Unity Catalog, Anda memerlukan izin CAN MANAGE pada katalog dan skema target, atau semua pengguna akun harus memiliki USE CATALOG, USE SCHEMA, SELECT, dan MODIFY pada tabel target tersebut.
  • Tabel target harus merupakan tabel Delta yang dikelola di wilayah yang sama dengan ruang kerja Anda.
  • Databricks merekomendasikan untuk mengaktifkan pengoptimalan prediktif pada tabel target telemetri untuk performa kueri yang lebih baik.

Mengaktifkan telemetri aplikasi

Nota

Jika Anda membuat aplikasi sebelum beta telemetri aplikasi, Anda harus menghentikan dan memulai ulang sebelum melanjutkan dengan langkah-langkah konfigurasi berikut.

Untuk mengaktifkan telemetri untuk aplikasi, konfigurasikan katalog dan skema untuk tabel telemetri di pengaturan aplikasi.

  1. Buka halaman detail aplikasi di ruang kerja Azure Databricks Anda.
  2. Pada tab gambaran umum, temukan bagian Konfigurasi telemetri aplikasi dan klik Tambahkan.
  3. Masukkan atau telusuri untuk memilih katalog dan skema. Azure Databricks menulis data telemetri ke tiga tabel di lokasi yang dipilih: otel_metrics, , otel_spansdan otel_logs.
  4. (Opsional) Tentukan awalan tabel sehingga tabel diberi nama <prefix>_otel_metrics, , <prefix>_otel_spansdan <prefix>_otel_logs. Azure Databricks menambahkan ke tabel yang sudah ada atau membuatnya jika tidak ada.
  5. Kliklah Simpan.
  6. Sebarkan ulang aplikasi sehingga telemetri mulai mengalir ke Unity Catalog.

Memverifikasi data telemetri

Tabel otel_logs diisi secara otomatis setelah penyebaran ulang. Tabel otel_spans dan otel_metrics hanya diisi setelah Anda menambahkan instrumentasi kustom ke aplikasi Anda.

Setelah Anda menyebarkan ulang aplikasi:

  1. Kunjungi URL aplikasi untuk menghasilkan aktivitas.

  2. Tunggu beberapa detik agar batch awal data muncul.

  3. Jalankan kueri berikut di Databricks SQL untuk mengonfirmasi bahwa data mengalir:

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

Mengkueri data telemetri

Kolom yang berguna untuk memfilter dan menghubungkan data telemetri meliputi time, , service_name, trace_idspan_id, dan attributes. Kolom attributes adalah peta yang berisi metadata khusus peristiwa seperti event.name.

Untuk melihat skema lengkap tabel telemetri apa pun, jalankan:

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

Contoh kueri berikut untuk log tingkat kesalahan dari jam terakhir, yang berguna untuk men-debug masalah aplikasi:

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;

Peristiwa sistem kueri

Azure Databricks secara otomatis mengambil peristiwa sistem dalam otel_logs tabel, seperti peristiwa penggunaan untuk login pengguna dan permintaan API langsung. Kueri peristiwa ini dengan memfilter atribut event.name.

Contoh berikut mengambil 100 peristiwa penggunaan terbaru untuk aplikasi:

SELECT time, attributes
FROM <catalog>.<schema>.otel_logs
WHERE service_name = '<app-name>'
  AND attributes:["event.name"]::string = 'app.auth'
ORDER BY time DESC
LIMIT 100;

Menambahkan instrumentasi kustom

Tambahkan instrumentasi otomatis OpenTelemetry untuk menghasilkan jejak, metrik, dan log kustom. Perbarui app.yaml dan file dependensi Anda seperti yang ditunjukkan untuk kerangka kerja Anda.

Streamlit

Perbarui app.yaml:

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

Perbarui 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

Dash

Perbarui app.yaml:

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

Perbarui 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

Flask

Perbarui app.yaml:

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

Perbarui requirements.txt:

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

FastAPI

Perbarui app.yaml:

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

Perbarui requirements.txt:

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

Node.js

Buat berkas 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);

Perbarui 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"
  }
}

Variabel lingkungan

Saat Anda mengaktifkan telemetri aplikasi, Databricks secara otomatis mengonfigurasi variabel lingkungan di runtime aplikasi Anda untuk titik akhir pengumpul OTLP, protokol ekspor, atribut sumber daya, dan pemrosesan batch. Untuk daftar lengkap variabel lingkungan OTel, lihat Variabel lingkungan telemetri aplikasi.

Batas dan batasan

Telemetri aplikasi menggunakan konektor Zerobus Ingest untuk menulis data ke tabel Unity Catalog. Semua batasan konektor Zerobus Ingest berlaku untuk telemetri aplikasi, termasuk batas ukuran rekaman, throughput, jaminan pengiriman, dan persyaratan tabel target.

Selain batas Zerobus, telemetri aplikasi memberlakukan ukuran baris log maksimum 1 MB per baris log.