Dela via


Konfigurera telemetri för Databricks-appar

Viktigt!

Apptelemetri finns i Beta.

Databricks Apps-telemetri samlar in spårningar, loggar och mått och bevarar dem till Unity Catalog-tabeller med hjälp av OTel-protokollet (OpenTelemetry). När du har aktiverat apptelemetri samlar Databricks automatiskt in systemloggar och användningshändelser som användarinloggning och direkta API-begäranden. Du kan också lägga till anpassad instrumentation med hjälp av OpenTelemetry SDK för ditt ramverk.

krav

  • Arbetsytan måste vara i en region som stöds: australiaeast, brazilsouth, canadacentral, centralindia, centralus, eastus, eastus2, germanywestcentral, northcentralus, northeurope, southcentralus, southeastasia, swedencentral, switzerlandnorth, uksouth, westeurope, westus, westus2, westus3.
  • Om du vill skapa nya telemetrimåltabeller i Unity Catalog behöver CAN MANAGE du behörigheter för målkatalogen och schemat samt CREATE TABLE schemat.
  • Om du vill skriva till befintliga telemetrimåltabeller i Unity Catalog behöver du antingen CAN MANAGE behörigheter för målkatalogen och schemat, eller så måste alla kontoanvändare ha USE CATALOG, USE SCHEMA, SELECToch MODIFY på måltabellerna.
  • Måltabeller måste vara hanterade Delta-tabeller i samma region som din arbetsyta.
  • Databricks rekommenderar att du aktiverar förutsägande optimering på telemetrimåltabellerna för bättre frågeprestanda.

Aktivera apptelemetri

Anmärkning

Om du har skapat en app före apptelemetri beta måste du stoppa och starta om den innan du fortsätter med följande konfigurationssteg.

Om du vill aktivera telemetri för en app konfigurerar du en katalog och ett schema för telemetritabellerna i appinställningarna.

  1. Öppna sidan med appinformation på din Azure Databricks-arbetsyta.
  2. Leta upp avsnittet Apptelemetrikonfiguration på fliken Översikt och klicka på Lägg till.
  3. Ange eller bläddra för att välja en katalog och ett schema. Azure Databricks skriver telemetridata till tre tabeller på den valda platsen: otel_metrics, otel_spansoch otel_logs.
  4. (Valfritt) Ange ett tabellprefix så att tabellerna heter <prefix>_otel_metrics, <prefix>_otel_spansoch <prefix>_otel_logs. Azure Databricks lägger till i befintliga tabeller eller skapar dem om de inte finns.
  5. Klicka på Spara.
  6. Distribuera om appen så att telemetrin börjar flöda till Unity Catalog.

Verifiera telemetridata

Tabellen otel_logs fylls i automatiskt efter omdistributionen. Tabellerna otel_spans och otel_metrics fylls bara i när du har lagt till anpassad instrumentation i din app.

När du har distribuerat om appen:

  1. Gå till appens URL för att generera aktivitet.

  2. Vänta några sekunder tills den första databatchen visas.

  3. Kör följande fråga i Databricks SQL för att bekräfta att data flödar:

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

Fråga efter telemetridata

Användbara kolumner för filtrering och korrelering av telemetridata är time, service_name, trace_id, span_idoch attributes. Kolumnen attributes är en karta som innehåller händelsespecifika metadata, till exempel event.name.

Om du vill visa hela schemat för en telemetritabell kör du:

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

Följande exempel frågar tabellen otel_logs efter system- eller anpassade OpenTelemetry ERROR-loggar inom den senaste timmen:

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;

Lägga till anpassad instrumentation

Lägg till autoinstrumentation för OpenTelemetry för att generera anpassade spårningar, mått och loggar. Uppdatera dina app.yaml filer och beroendefiler enligt vad som visas för ramverket.

Streamlit

Uppdatera app.yaml:

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

Uppdatera 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

Uppdatera app.yaml:

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

Uppdatera 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

Uppdatera app.yaml:

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

Uppdatera requirements.txt:

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

FastAPI

Uppdatera app.yaml:

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

Uppdatera requirements.txt:

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

Node.js

Skapa en otel.js-fil:

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

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

Miljövariabler

När du aktiverar apptelemetri konfigurerar Databricks automatiskt miljövariabler i appkörningen för OTLP-insamlarens slutpunkt, exportprotokoll, resursattribut och batchbearbetning. En fullständig lista över OTel-miljövariabler finns i Miljövariabler för apptelemetri.

Gränser och begränsningar

Apptelemetri använder Zerobus Ingest-anslutningsappen för att skriva data till Unity Catalog-tabeller. Alla begränsningar för Zerobus Ingest-anslutningsappen gäller för apptelemetri, inklusive begränsningar för poststorlek, dataflöde, leveransgarantier och måltabellkrav.

Förutom Zerobus-gränserna, begränsar appens telemetri storleken på en loggpost till maximalt 1 MB per rad.