Mengonfigurasi telemetri untuk Aplikasi Databricks

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, canadacentralcentralindiawestus2swedencentraleastusswitzerlandnorthwestussoutheastasiawestus3westeuropeuksouthuaenorthsouthcentralusnortheuropenorthcentraluskoreacentralgermanywestcentraleastus2japaneastcentraluseastasiafrancecentral.
  • Untuk membuat tabel target telemetri baru di Unity Catalog, Anda memerlukan izin CREATE TABLE pada skema, dan salah satu dari berikut ini:
    • CAN MANAGE izin pada katalog dan skema target.
    • Service principal aplikasi memiliki USE CATALOG pada katalog target, dan USE SCHEMA, SELECT, dan MODIFY pada skema target. Tabel-tabel baru mewarisi hak akses ini.
  • Untuk menulis ke tabel target telemetri yang sudah ada di Unity Catalog, Anda memerlukan SELECT dan MODIFY pada tabel target, serta salah satu dari berikut ini:
    • CAN MANAGE izin pada katalog dan skema target.
    • Semua pengguna akun memiliki USE CATALOG, USE SCHEMA, SELECT, dan MODIFY pada tabel target.
    • Service principal aplikasi memiliki USE CATALOG pada katalog target, USE SCHEMA pada skema target, dan SELECT serta MODIFY pada tabel target.
  • 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

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

Antarmuka Pengguna

  1. Buka halaman detail aplikasi di ruang kerja Azure Databricks Anda.
  2. Pada tab Pengaturan , 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_spans, dan 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.

CLI

  1. Konfigurasikan telemetri menggunakan databricks apps update perintah , menentukan katalog lengkap, skema, dan nama tabel:

    databricks apps update <app-name> --json '{
      "telemetry_export_destinations": [
        {
          "unity_catalog": {
            "logs_table": "<catalog>.<schema>.<your-prefix>-otel_logs",
            "metrics_table": "<catalog>.<schema>.otel_metrics",
            "traces_table": "<catalog>.<schema>.otel_spans"
          }
        }
      ]
    }'
    
  2. Sebarkan ulang aplikasi sehingga telemetri mulai mengalir ke Unity Catalog:

    databricks apps deploy <app-name>
    

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 menangkap peristiwa sistem dalam tabel otel_logs, 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.

Important

Atur OTEL_TRACES_SAMPLER ke always_on agar OpenTelemetry merekam setiap jejak. Tanpanya, sampler berbasis induk default mengikuti keputusan sampling setiap permintaan masuk dan menghapus permintaan yang ditandai untuk tidak disampel, yang membuat tabel Anda otel_spans tidak lengkap atau kosong.

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';

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(signal) {
  const hasAppHandler = process.listenerCount(signal) > 0;

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

  if (!hasAppHandler) {
    process.kill(process.pid, signal);
  }
}
process.once('SIGTERM', shutdown);
process.once('SIGINT', shutdown);

Handler akan mencoba mengirim telemetri yang tertunda saat shutdown. Jika aplikasi Anda mendaftarkan penangan sinyal sendiri, koordinasikan penghentian SDK dengan handler tersebut untuk memastikan proses flushing selesai sebelum aplikasi keluar, dan pastikan handler Anda keluar dari proses saat pembersihan selesai. Jika tidak, proses akan keluar setelah upaya shutdown SDK selesai.

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/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.

Harga

Ingesti telemetri ditagihkan sebagai penggunaan Lakeflow Connect, karena telemetri aplikasi ditulis ke tabel Unity Catalog melalui konektor Zerobus Ingest. Ini terpisah dari biaya komputasi untuk menjalankan aplikasi itu sendiri.

Biaya ditagihkan ke SKU "Automated Serverless". Untuk tarif, lihat halaman harga Lakeflow Connect.

Untuk melacak biaya konsumsi telemetri Anda, kueri tabel sistem penggunaan yang dapat ditagih. Untuk filter yang mengisolasi penggunaan Zerobus Ingest, lihat Memantau penggunaan Anda. Untuk memantau biaya komputasi aplikasi itu sendiri, lihat Pantau biaya 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 batasan ukuran rekaman, throughput, jaminan pengiriman, dan persyaratan tabel target. Lihat kuota Zerobus Ingest.

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