Partager via


Configurer la télémétrie pour Databricks Apps

Important

La télémétrie des applications est en version bêta.

La télémétrie des applications Databricks collecte les traces, les journaux et les métriques et les stocke dans les tables de Unity Catalog en utilisant le protocole OpenTelemetry (OTel). Après avoir activé la télémétrie des applications, Databricks capture automatiquement les journaux système et les événements d’utilisation tels que la connexion utilisateur et les demandes d’API directes. Vous pouvez également ajouter une instrumentation personnalisée à l’aide du Kit de développement logiciel (SDK) OpenTelemetry pour votre infrastructure.

Exigences

  • Votre espace de travail doit se trouver dans une région prise en charge : australiaeast, brazilsouthcanadacentralcentralindiacentraluseastuseastus2germanywestcentralnorthcentralusnortheuropesouthcentralussoutheastasiaswedencentralswitzerlandnorthuksouthwesteuropewestuswestus2westus3.
  • Pour créer de nouvelles tables cibles de télémétrie dans le catalogue Unity, vous avez besoin CAN MANAGE d'autorisations sur le catalogue cible et le schéma, ainsi que de CREATE TABLE autorisations sur le schéma.
  • Pour écrire dans des tables cibles de télémétrie existantes dans le catalogue Unity, vous avez besoin d'avoir CAN MANAGE d’autorisations sur le catalogue et le schéma cibles, ou tous les utilisateurs de compte doivent avoir USE CATALOG, USE SCHEMA, SELECT, et MODIFY sur les tables cibles.
  • Les tables cibles doivent être des tables Delta gérées dans la même région que votre espace de travail.
  • Databricks recommande d’activer l’optimisation prédictive sur les tables cibles de télémétrie pour améliorer les performances des requêtes.

Activer la télémétrie des applications

Note

Si vous avez créé une application avant la version bêta de la télémétrie de l’application, vous devez l’arrêter et la redémarrer avant de suivre les étapes de configuration suivantes.

Pour activer la télémétrie d’une application, configurez un catalogue et un schéma pour les tables de télémétrie dans les paramètres de l’application.

  1. Ouvrez la page des détails de l’application dans votre espace de travail Azure Databricks.
  2. Sous l’onglet Vue d’ensemble, recherchez la section configuration de la télémétrie de l’application , puis cliquez sur Ajouter.
  3. Entrez ou naviguez pour sélectionner un catalogue et un schéma. Azure Databricks écrit des données de télémétrie dans trois tables à l’emplacement sélectionné : otel_metrics, otel_spanset otel_logs.
  4. (Facultatif) Spécifiez un préfixe de table pour que les tables soient nommées <prefix>_otel_metrics, <prefix>_otel_spanset <prefix>_otel_logs. Azure Databricks ajoute à des tables existantes ou les crée s’ils n’existent pas.
  5. Cliquez sur Enregistrer.
  6. Redéployez l’application afin que les données de télémétrie commencent à circuler vers le catalogue Unity.

Vérifier les données de télémétrie

La otel_logs table est remplie automatiquement après le redéploiement. Les tables otel_spans et otel_metrics ne sont renseignées qu'après que vous ayez ajouté une instrumentation personnalisée à votre application.

Après avoir redéployé l’application :

  1. Visitez l’URL de l’application pour générer l’activité.

  2. Attendez quelques secondes pour que le lot initial de données apparaisse.

  3. Exécutez la requête suivante dans Databricks SQL pour confirmer que les données circulent :

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

Interroger les données de télémétrie

Les colonnes utiles pour le filtrage et la corrélation des données de télémétrie incluent time, , service_nametrace_id, , span_idet attributes. La attributes colonne est une carte qui contient des métadonnées spécifiques à l’événement telles que event.name.

Pour afficher le schéma complet d’une table de télémétrie, exécutez :

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

L'exemple suivant interroge la table otel_logs pour les journaux d'erreur OpenTelemetry personnalisés ou système des dernières heures.

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;

Ajouter une instrumentation personnalisée

Ajoutez l’instrumentation automatique d'OpenTelemetry pour générer des traces, métriques et journaux personnalisés. Mettez à jour vos app.yaml fichiers et vos dépendances, comme indiqué pour votre infrastructure.

Streamlit

Mettez à jour app.yaml :

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

Mettez à jour 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

Tiret

Mettez à jour app.yaml :

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

Mettez à jour 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

Fiole

Mettez à jour app.yaml :

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

Mettez à jour requirements.txt :

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

FastAPI

Mettez à jour app.yaml :

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

Mettez à jour requirements.txt :

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

Node.JS

Créez un fichier 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);

Mettez à jour 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"
  }
}

Variables d'environnement

Lorsque vous activez la télémétrie des applications, Databricks configure automatiquement les variables d’environnement dans votre runtime d’application pour le point de terminaison collecteur OTLP, le protocole d’exportation, les attributs de ressource et le traitement par lots. Pour obtenir la liste complète des variables d’environnement OTel, consultez les variables d’environnement de télémétrie des applications.

Limites et limitations

La télémétrie des applications utilise le connecteur d’ingestion Zerobus pour écrire des données dans des tables du catalogue Unity. Toutes les limitations du connecteur d’ingestion Zerobus s’appliquent aux données de télémétrie des applications, notamment les limites relatives à la taille des enregistrements, au débit, aux garanties de remise et aux exigences de table cible.

En plus des limites Zerobus, la télémétrie des applications impose une taille maximale de 1 Mo par ligne de log.