Udostępnij za pośrednictwem


Konfigurowanie telemetrii dla aplikacji usługi Databricks

Ważna

Telemetria aplikacji jest w wersji beta.

Telemetria aplikacji Databricks gromadzi ślady, dzienniki i metryki, a następnie zapisuje je w tabelach katalogu Unity z wykorzystaniem protokołu OpenTelemetry (OTel). Po włączeniu telemetrii aplikacji usługa Databricks automatycznie przechwytuje dzienniki systemowe i zdarzenia użycia, takie jak logowanie użytkownika i żądania bezpośredniego interfejsu API. Możesz również dodać instrumentację niestandardową przy użyciu zestawu OpenTelemetry SDK dla platformy.

Wymagania

  • Obszar roboczy musi znajdować się w obsługiwanym regionie: australiaeast, brazilsouth, canadacentral, centralindia, centralus, eastus, eastus2, germanywestcentral, northcentralus, northeurope, southcentralus, southeastasia, swedencentral, switzerlandnorth, uksouth, westeurope, westus, westus2, westus3.
  • Aby utworzyć nowe tabele docelowe telemetrii w Unity Catalog, musisz mieć CAN MANAGE uprawnienia do katalogu docelowego i schematu oraz CREATE TABLE uprawnienia do schematu.
  • Aby zapisywać dane do istniejących tabel docelowych telemetrii w Katalogu Unity, potrzebujesz albo uprawnień CAN MANAGE do katalogu docelowego i schematu, albo wszyscy użytkownicy konta muszą mieć USE CATALOG, USE SCHEMA, SELECT i MODIFY na tabelach docelowych.
  • Tabele docelowe muszą być zarządzanymi tabelami Delta w tym samym regionie co obszar roboczy.
  • Usługa Databricks zaleca włączenie optymalizacji predykcyjnej w tabelach docelowych telemetrii w celu uzyskania lepszej wydajności zapytań.

Włącz telemetrię aplikacji

Uwaga / Notatka

Jeśli utworzyłeś aplikację przed wersją beta telemetrii aplikacji, musisz ją zatrzymać i ponownie uruchomić, zanim przejdziesz do poniższych kroków konfiguracji.

Aby włączyć telemetrię dla aplikacji, skonfiguruj katalog i schemat dla tabel telemetrii w ustawieniach aplikacji.

  1. Otwórz stronę szczegółów aplikacji w obszarze roboczym usługi Azure Databricks.
  2. Na karcie Przegląd znajdź sekcję Konfiguracja telemetrii aplikacji i kliknij przycisk Dodaj.
  3. Wprowadź lub przeglądaj, aby wybrać katalog i schemat. Usługa Azure Databricks zapisuje dane telemetryczne do trzech tabel w wybranej lokalizacji: otel_metrics, otel_spansi otel_logs.
  4. (Opcjonalnie) Określ prefiks tabeli, tak aby tabele nosiły nazwy <prefix>_otel_metrics, <prefix>_otel_spansi <prefix>_otel_logs. Usługa Azure Databricks dołącza do istniejących tabel lub tworzy je, jeśli nie istnieją.
  5. Kliknij przycisk Zapisz.
  6. Ponownie wdróż aplikację, aby telemetria zaczęła napływać do Unity Catalog.

Weryfikowanie danych telemetrycznych

Tabela otel_logs jest wypełniana automatycznie po ponownym wprowadzeniu. Tabele otel_spans i otel_metrics są wypełniane tylko po dodaniu instrumentacji niestandardowej do aplikacji.

Po ponownym uruchomieniu aplikacji:

  1. Odwiedź adres URL aplikacji, aby wygenerować działanie.

  2. Poczekaj kilka sekund na wyświetlenie początkowej partii danych.

  3. Uruchom następujące zapytanie w usłudze Databricks SQL, aby potwierdzić, że dane przepływają:

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

Wykonywanie zapytań dotyczących danych telemetrycznych

Przydatne kolumny do filtrowania i korelowania danych telemetrycznych obejmują time, , service_nametrace_id, , span_idi attributes. Kolumna attributes to mapa zawierająca metadane specyficzne dla zdarzenia, takie jak event.name.

Aby wyświetlić pełny schemat dowolnej tabeli telemetrii, uruchom polecenie:

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

Poniższy przykład wysyła zapytanie do tabeli otel_logs o systemowe lub niestandardowe dzienniki błędów OpenTelemetry z ostatniej godziny.

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;

Dodawanie instrumentacji niestandardowej

Dodaj automatyczną instrumentację OpenTelemetry, aby wygenerować niestandardowe ślady, metryki i dzienniki. app.yaml Zaktualizuj swoje pliki i pliki zależności zgodnie z instrukcjami dla twojego frameworka.

Streamlit

Aktualizacja app.yaml:

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

Aktualizacja 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

Panel

Aktualizacja app.yaml:

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

Aktualizacja 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

Aktualizacja app.yaml:

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

Aktualizacja requirements.txt:

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

FastAPI

Aktualizacja app.yaml:

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

Aktualizacja requirements.txt:

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

Node.js

Utwórz plik 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);

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

Zmienne środowiskowe

Po włączeniu telemetrii aplikacji, Databricks automatycznie konfiguruje zmienne środowiskowe w czasie wykonywania aplikacji dla punktu końcowego kolektora OTLP, protokołu eksportu, atrybutów zasobów oraz przetwarzania wsadowego. Aby uzyskać pełną listę zmiennych środowiskowych OTel, zobacz Zmienne środowiskowe telemetrii aplikacji.

Limity i ograniczenia

Telemetria aplikacji używa łącznika Zerobus Ingest do zapisywania danych w tabelach Unity Catalog. Wszystkie ograniczenia łącznika Zerobus Ingest mają zastosowanie do danych telemetrycznych aplikacji, w tym limitów dotyczących rozmiaru rekordu, przepływności, gwarancji dostarczania i wymagań tabeli docelowej.

Oprócz limitów Zerobus telemetria aplikacji wymusza maksymalny rozmiar wiersza dziennika wynoszący 1 MB na wiersz dziennika.