Konfigurace telemetrie pro Databricks Apps

Důležité

Telemetrie aplikací je ve fázi Public Preview.

Telemetrie Databricks Apps shromažďuje stopové údaje, protokoly a metriky a ukládá je v tabulkách Katalogu Unity pomocí protokolu OpenTelemetry (OTel). Jakmile povolíte telemetrii aplikací, Databricks automaticky zaznamenává systémové protokoly a události použití, jako jsou přihlášení uživatele a přímé požadavky rozhraní API. Můžete také přidat vlastní instrumentaci pomocí sady OpenTelemetry SDK pro vaši architekturu.

Požadavky

  • Pracovní prostor musí být v podporované oblasti: australiaeast, brazilsouth, canadacentral, centralindia, centralus, eastus, eastus2, germanywestcentral, northcentralus, northeurope, southcentralus, southeastasia, swedencentral, switzerlandnorth, uksouth, westeurope, westus, westus2, westus3.
  • Pokud chcete vytvořit nové cílové tabulky telemetrie v katalogu Unity, potřebujete CAN MANAGE oprávnění k cílovému katalogu a schématu a CREATE TABLE schématu.
  • Pokud chcete zapisovat do existujících cílových tabulek telemetrie v katalogu Unity, potřebujete mít oprávnění buď ke cílovému katalogu a schématu, nebo všichni uživatelé účtu musí mít CAN MANAGE, USE CATALOG, USE SCHEMA a SELECT k cílovým tabulkám.
  • Cílové tabulky musí být spravované tabulky Delta ve stejné oblasti jako váš pracovní prostor.
  • Databricks doporučuje povolit prediktivní optimalizaci cílových tabulek telemetrie, aby se zlepšil výkon dotazů.

Povolení telemetrie aplikací

Pokud chcete zapnout telemetrii pro aplikaci, nakonfigurujte v nastavení aplikace katalog a schéma pro tabulky telemetrie.

uživatelské rozhraní

  1. Otevřete stránku podrobností aplikace v pracovním prostoru Azure Databricks.
  2. Na kartě Nastavení vyhledejte oddíl konfigurace telemetrie aplikace a klikněte na Přidat.
  3. Zadejte nebo procházejte, abyste vybrali katalog a schéma. Azure Databricks zapisuje telemetrická data do tří tabulek ve vybraném umístění: otel_metrics, otel_spans a otel_logs.
  4. (Volitelné) Zadejte předponu tabulky tak, aby se tabulky jmenovaly <prefix>_otel_metrics, <prefix>_otel_spansa <prefix>_otel_logs. Azure Databricks připojí k existujícím tabulkám nebo je vytvoří, pokud neexistují.
  5. Klikněte na Uložit.
  6. Znovu nasaďte aplikaci, aby telemetrie začala proudit do katalogu Unity.

CLI

  1. Nakonfigurujte telemetrii pomocí databricks apps update příkazu a zadejte úplný katalog, schéma a názvy tabulek:

    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. Znovu nasaďte aplikaci, aby telemetrie začala proudit do katalogu Unity:

    databricks apps deploy <app-name>
    

Ověření telemetrických dat

Tabulka otel_logs se vyplní automaticky po opětovném nasazení. Tabulky otel_spans a otel_metrics jsou naplněny až po přidání vlastní instrumentace do vaší aplikace.

Po opětovném nasazení aplikace:

  1. Přejděte na adresu URL aplikace a vygenerujte aktivitu.

  2. Počkejte několik sekund, než se zobrazí počáteční dávka dat.

  3. Spuštěním následujícího dotazu v Databricks SQL ověřte, že data proudí:

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

Dotazování telemetrických dat

Užitečné sloupce pro filtrování a korelaci telemetrických dat zahrnují time, service_name, trace_id, span_id a attributes. Sloupec attributes je mapa, která obsahuje metadata specifická pro události, například event.name.

Pokud chcete zobrazit úplné schéma jakékoli tabulky telemetrie, spusťte příkaz:

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

Následující příklad dotazuje protokoly chybové úrovně z poslední hodiny, což je užitečné pro ladění problémů aplikací.

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;

Dotazovat systémové události

Azure Databricks automaticky zaznamenává systémové události v tabulce otel_logs, například události využití pro přihlášení uživatelů a přímé žádosti rozhraní API. Vyhledejte tyto události filtrováním podle atributu event.name.

Následující příklad načte 100 nejnovějších událostí využití pro aplikaci:

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;

Přidání vlastní instrumentace

Přidejte automatickou instrumentaci OpenTelemetry pro generování vlastních trasování, metrik a protokolů. Aktualizujte soubory app.yaml a soubory závislostí, jak je znázorněno pro váš rámec.

Streamlit

Aktualizace app.yaml:

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

Aktualizace 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

Pomlčka

Aktualizace app.yaml:

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

Aktualizace 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

Aktualizace app.yaml:

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

Aktualizace requirements.txt:

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

FastAPI

Aktualizace app.yaml:

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

Aktualizace requirements.txt:

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

Node.js

Vytvořte soubor 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);

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

Proměnné prostředí

Když povolíte telemetrii aplikací, Databricks automaticky nakonfiguruje proměnné prostředí v modulu runtime vaší aplikace pro koncový bod kolektoru OTLP, protokol exportu, atributy prostředků a dávkové zpracování. Pro úplný seznam proměnných prostředí OTel, viz App telemetry environment variables.

Limity a omezení

Telemetrie aplikací používá konektor Nubus Ingest k zápisu dat do tabulek katalogu Unity. Všechna omezení konektoru Ingestu Zerobus platí pro telemetrii aplikací, včetně omezení velikosti záznamů, propustnosti, záruk doručení a požadavků na cílovou tabulku.

Kromě limitů Zerobus telemetrie aplikace vynucuje maximální velikost 1 MB pro každý řádek protokolu.