Configure a telemetria para Databricks Apps
Pré-visualização pública
A telemetria do aplicativo está em versão prévia pública.
A telemetria Databricks Apps coleta rastreamentos, logs e métricas e os persiste em tabelas Unity Catalog usando o protocolo OpenTelemetry (OTel). Após ativar a telemetria do aplicativo, Databricks captura automaticamente logs do sistema e eventos de uso, como login do usuário e solicitações diretas API . Você também pode adicionar instrumentação personalizada usando o SDK OpenTelemetry para sua estrutura.
Requisitos
-
Seu workspace deve estar em uma região compatível:
us-east1,us-east4,us-west1,us-central1,europe-west3. -
Para criar novas tabelas de destino de telemetria no Unity Catalog, você precisa de permissões
CAN MANAGEno catálogo e esquema de destino eCREATE TABLEno esquema. -
Para gravar em tabelas de destino de telemetria existentes no Unity Catalog, você precisa de permissões
CAN MANAGEno catálogo e esquema de destino, ou todos os usuários account devem terUSE CATALOG,USE SCHEMA,SELECTeMODIFYnas tabelas de destino. -
As tabelas de destino devem ser tabelas Delta gerenciadas na mesma região que seu workspace.
-
A Databricks recomenda ativar a otimização preditiva nas tabelas de destino da telemetria para obter melhor desempenho das consultas.
Ativar telemetria do aplicativo
Para ativar a telemetria de um aplicativo, configure um catálogo e um esquema para as tabelas de telemetria nas configurações do aplicativo.
- Abra a página de detalhes do aplicativo em seu workspace Databricks .
- Na tab Configurações , localize a seção Configuração de telemetria do aplicativo e clique em Adicionar .
- Digite ou navegue para selecionar um catálogo e um esquema. O Databricks grava dados de telemetria em três tabelas no local selecionado:
otel_metrics,otel_spanseotel_logs. - (Opcional) Especifique um prefixo de tabela para que as tabelas sejam nomeadas
<prefix>_otel_metrics,<prefix>_otel_spanse<prefix>_otel_logs. O Databricks adiciona dados a tabelas existentes ou as cria caso não existam. - Clique em Salvar .
- Reimplante o aplicativo para que a telemetria comece a fluir para Unity Catalog.
Verificar dados de telemetria
A tabela otel_logs é preenchida automaticamente após a reimplementação. As tabelas otel_spans e otel_metrics só são preenchidas depois que você adiciona instrumentação personalizada ao seu aplicativo.
Após reimplantar o aplicativo:
-
Acesse o URL do aplicativo para gerar atividade.
-
Aguarde alguns segundos para que os primeiros lotes de dados apareçam.
-
Execute a seguinte consulta em Databricks SQL para confirmar se os dados estão fluindo:
SQLSELECT * FROM <catalog>.<schema>.otel_logs
LIMIT 10;
Consultar dados de telemetria
As colunas úteis para filtrar e correlacionar dados de telemetria incluem time, service_name, trace_id, span_id e attributes. A coluna attributes é um mapa que contém metadados específicos do evento, como event.name.
Para view o esquema completo de qualquer tabela de telemetria, execute o seguinte comando:
DESCRIBE TABLE <catalog>.<schema>.otel_logs;
O exemplo a seguir consulta os logs de nível de erro da última hora, o que é útil para problemas de aplicativos:
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;
Eventos do sistema de consulta
O Databricks captura automaticamente eventos do sistema na tabela otel_logs , como eventos de uso para logins de usuários e solicitações diretas de API. Consulte esses eventos filtrando pelo atributo event.name .
O exemplo a seguir recupera os 100 eventos de uso mais recentes de um aplicativo:
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;
Adicionar instrumentação personalizada
Adicione instrumentação automática do OpenTelemetry para gerar rastreamentos, métricas e logs personalizados. Atualize seus arquivos app.yaml e de dependência conforme mostrado para sua estrutura.
- Streamlit
- Dash
- Flask
- FastAPI
- Node.js
Atualização app.yaml:
command: ['opentelemetry-instrument', 'streamlit', 'run', 'app.py']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
Atualização 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
Atualização app.yaml:
command: ['opentelemetry-instrument', 'python', 'app.py']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
Atualização 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
Atualização app.yaml:
command: ['opentelemetry-instrument', 'flask', '--app', 'app.py', 'run', '--no-reload']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
Atualização requirements.txt:
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-flask
Atualização app.yaml:
command: ['opentelemetry-instrument', 'uvicorn', 'app:app', '--host', '0.0.0.0', '--port', '8000']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
Atualização requirements.txt:
fastapi
uvicorn
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-fastapi
Crie um arquivo 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);
Atualização 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"
}
}
variável de ambiente
Ao ativar a telemetria do aplicativo, Databricks configura automaticamente as variáveis de ambiente no ambiente de execução do seu aplicativo para o endpoint do coletor OTLP, protocolo de exportação, atributos de recurso e processamento de lotes. Para obter a lista completa de OTel variável de ambiente, consulte App telemetria variável de ambiente.
Limites e limitações
A telemetria do aplicativo usa o conector Zerobus Ingest para gravar dados em tabelas Unity Catalog . Todas as limitações do conector Zerobus Ingest se aplicam à telemetria do aplicativo, incluindo limites de tamanho de registro, taxa de transferência, garantias de entrega e requisitos da tabela de destino.
Além dos limites do Zerobus, a telemetria do aplicativo impõe um tamanho máximo de linha log de 1 MB por log .