A Databricks Apps telemetriájának konfigurálása

Fontos

Az alkalmazástelemetria nyilvános előzetes verzióban érhető el.

A Databricks Apps telemetriai adatai nyomkövetéseket, naplókat és metrikákat gyűjtenek, és az OpenTelemetry (OTel) protokoll használatával megőrzik őket a Unity Catalog-táblákban. Az alkalmazástelemetria engedélyezése után a Databricks automatikusan rögzíti a rendszernaplókat és a használati eseményeket, például a felhasználói bejelentkezést és a közvetlen API-kéréseket. Az OpenTelemetry SDK-t használva egyéni műszereket is hozzáadhat a keretrendszeréhez.

Követelmények

  • A munkaterületnek támogatott régióban kell lennie: australiaeast, , brazilsouth, canadacentral, centralindiacentralus, eastus, eastus2, germanywestcentral, northcentralus, northeurope, southcentralus, , southeastasia, , , swedencentralswitzerlandnorthuksouthwesteuropewestuswestus2westus3.
  • Ha új telemetriai céltáblákat szeretne létrehozni a Unity Catalogban, engedélyekre van szüksége CAN MANAGE a célkatalógushoz és a sémához, valamint CREATE TABLE a sémához.
  • A Unity Catalog meglévő telemetriai céltábláiba való íráshoz szükség van vagy a célkatalógus és a séma megfelelő engedélyeire CAN MANAGE, vagy az összes fiókfelhasználónak rendelkeznie kell USE CATALOG, USE SCHEMA, SELECT és MODIFY engedélyekkel a céltáblákon.
  • A céltábláknak kezelt Delta tábláknak kell lenniük, és a munkaterületével azonos régióban kell elhelyezkedniük.
  • A Databricks azt javasolja, hogy engedélyezze a prediktív optimalizálást a telemetriai céltáblákon a jobb lekérdezési teljesítmény érdekében.

Alkalmazástelemetria engedélyezése

Ha be szeretné kapcsolni egy alkalmazás telemetriáját, konfiguráljon egy katalógust és sémát a telemetriai táblákhoz az alkalmazás beállításai között.

UI

  1. Nyissa meg az alkalmazás részleteit tartalmazó lapot a Azure Databricks munkaterületen.
  2. A Beállítások lapon keresse meg az alkalmazás telemetriai konfigurációs szakaszát, és kattintson a Hozzáadás gombra.
  3. Adja meg vagy tallózással válasszon ki egy katalógust és sémát. Azure Databricks a kiválasztott helyen három táblába ír telemetriai adatokat: otel_metrics, otel_spans és otel_logs.
  4. (Nem kötelező) Adjon meg egy táblaelőtagot, hogy a táblák neve el legyen nevezve <prefix>_otel_metrics, <prefix>_otel_spansés <prefix>_otel_logs. Azure Databricks hozzáfűzi a meglévő táblákat, vagy létrehozza őket, ha nem léteznek.
  5. Kattintson a Mentés lehetőségre.
  6. Telepítse újra az alkalmazást, hogy a telemetria a Unity Catalogba áramoljon.

parancssori felület

  1. Telemetria konfigurálása a databricks apps update parancs használatával, a teljes katalógus, séma és táblanevek megadásával:

    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. Telepítse újra az alkalmazást, hogy a telemetria a Unity Katalógusba áramoljon:

    databricks apps deploy <app-name>
    

Telemetriaadatok ellenőrzése

A otel_logs rendszer automatikusan feltölti a táblát az újbóli üzembe helyezés után. A otel_spans és otel_metrics táblák csak akkor lesznek feltöltve, ha egyéni eszközmérést ad hozzá az alkalmazáshoz.

Az alkalmazás ismételt üzembe helyezése után:

  1. A tevékenység létrehozásához látogasson el az alkalmazás URL-címére.

  2. Várjon néhány másodpercet, amíg a kezdeti adatköteg megjelenik.

  3. Futtassa a következő lekérdezést a Databricks SQL-ben az adatok áramlásának ellenőrzéséhez:

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

Telemetriaadatok lekérdezése

Hasznos oszlopok a telemetriai adatok szűréséhez és korrelálásához: time, service_name, trace_id, span_idés attributes. Az attributes oszlop egy olyan térkép, amely eseményspecifikus metaadatokat, például event.name.

A telemetriatáblák teljes sémájának megtekintéséhez futtassa a következőt:

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

Az alábbi példa az elmúlt órából származó hibaszintű naplókat keres, amely hasznos az alkalmazásproblémák hibakereséséhez:

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;

Rendszeresemények lekérdezése

Azure Databricks automatikusan rögzíti a rendszereseményeket a otel_logs táblában, például a felhasználói bejelentkezések használati eseményeit és a közvetlen API-kéréseket. Ezeket az eseményeket az event.name attribútum szűrésével kérdezheti le.

Az alábbi példa egy alkalmazás 100 legutóbbi használati eseményét kéri le:

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;

Egyedi instrumentáció hozzáadása

Adja hozzá az OpenTelemetry auto-instrumentációt egyéni nyomkövetések, metrikák és naplók létrehozásához. Frissítse a app.yaml és a függőségi fájlokat a keretrendszerben látható módon.

Streamlit

Frissítés app.yaml:

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

Frissítés 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

Gondolatjel

Frissítés app.yaml:

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

Frissítés 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

Frissítés app.yaml:

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

Frissítés requirements.txt:

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

FastAPI

Frissítés app.yaml:

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

Frissítés requirements.txt:

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

Node.js

Hozzon létre egy otel.js fájlt:

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

Frissítés 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"
  }
}

Környezeti változók

Az alkalmazástelemetria engedélyezésekor a Databricks automatikusan konfigurálja a környezeti változókat az alkalmazás futtatókörnyezetében az OTLP-gyűjtő végpontjához, az exportálási protokollhoz, az erőforrásattribútumokhoz és a kötegelt feldolgozáshoz. Az OTel környezeti változóinak teljes listájáért tekintse meg az alkalmazás telemetriai környezeti változóit.

Pricing

A telemetria betöltését Lakeflow Connect-használatként számlázzák, mert az alkalmazás telemetriaadatai a Zerobus Ingest csatlakozón keresztül a Unity Catalog tábláiba íródnak. Ez különálló az alkalmazás futtatásának számítási díjától.

A díjakat az "Automatizált szerver nélküli" SKU-val számlázják. A díjakért lásd a Lakeflow Connect árképzési oldalát.

A telemetria betöltésének költségeinek nyomon követéséhez kérdezze le a számlázható használat rendszertábláját. A Zerobus Ingest használatát izoláló szűrőkért lásd: A használat monitorozása. Az alkalmazás számítási költségének nyomon követéséhez lásd: Monitor app costs.

Korlátok és korlátozások

Az alkalmazástelemetria a Zerobus Ingest-összekötő használatával ír adatokat a Unity Catalog-táblákba. Minden Zerobus Ingest csatlakozó korlátozás vonatkozik az alkalmazás telemetriájára, beleértve a rekordméret, áteresztőképesség, szállítási garanciák és a céltáblák követelményeinek korlátozásait. Lásd: Zerobus Ingest kvóták.

A Zerobus korlátain kívül az alkalmazás telemetriai adatai naplósoronként 1 MB-os maximális naplósorméretet is megkövetelnek.