Important
アプリ テレメトリは パブリック プレビュー段階です。
Databricks Apps テレメトリは、トレース、ログ、メトリックを収集し、OpenTelemetry (OTel) プロトコルを使用して Unity カタログ テーブルに保持します。 アプリテレメトリを有効にすると、Databricks はシステム ログとユーザー ログインや直接 API 要求などの使用状況イベントを自動的にキャプチャします。 また、フレームワーク用の OpenTelemetry SDK を使用してカスタム インストルメンテーションを追加することもできます。
要件
- ワークスペースは、サポートされているリージョン (
australiaeast、brazilsouth、canadacentral、centralindia、centralus、eastus、eastus2、germanywestcentral、northcentralusnortheurope、southcentralus、southeastasia、swedencentralswitzerlandnorth、、uksouth、westeurope、westuswestus2、westus3) にある必要があります。
- Unity カタログで新しいテレメトリ ターゲット テーブルを作成するには、ターゲット カタログとスキーマに対する
CAN MANAGEアクセス許可と、スキーマに対するCREATE TABLEが必要です。 - Unity カタログの既存のテレメトリ ターゲット テーブルに書き込むには、ターゲット カタログとスキーマに対する
CAN MANAGEアクセス許可が必要です。または、すべてのアカウント ユーザーがターゲット テーブルに対するUSE CATALOG、USE SCHEMA、SELECT、およびMODIFYを持っている必要があります。 - ターゲット テーブルは、ワークスペースと同じリージョン内のマネージド Delta テーブルである必要があります。
- Databricks では、クエリパフォーマンスを向上させるために、テレメトリ ターゲット テーブルで 予測最適化 を有効にすることをお勧めします。
アプリテレメトリを有効にする
アプリのテレメトリを有効にするには、アプリ設定でテレメトリ テーブルのカタログとスキーマを構成します。
UI
- Azure Databricks ワークスペースでアプリの詳細ページを開きます。
- [ 設定] タブで、[ アプリ テレメトリ の構成] セクションを見つけて、[ 追加] をクリックします。
- カタログとスキーマを入力または参照して選択します。 Azure Databricksは、選択した場所の 3 つのテーブル (
otel_metrics、otel_spans、およびotel_logs) にテレメトリ データを書き込みます。 - (省略可能)テーブルに
<prefix>_otel_metrics、<prefix>_otel_spans、および<prefix>_otel_logsの名前を付けることができるように、テーブル プレフィックスを指定します。 Azure Databricks既存のテーブルに追加するか、存在しない場合は作成します。 - [保存] をクリックします。
- テレメトリが Unity カタログへのフローを開始するように、アプリを再デプロイします。
CLI
完全なカタログ、スキーマ、テーブル名を指定して、
databricks apps updateコマンドを使用してテレメトリを構成します。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" } } ] }'テレメトリが Unity カタログへのフローを開始するようにアプリを再デプロイします。
databricks apps deploy <app-name>
テレメトリ データを確認する
otel_logs テーブルは、再デプロイ後に自動的に設定されます。
otel_spansテーブルとotel_metrics テーブルは、アプリにカスタム インストルメンテーションを追加した後にのみ設定されます。
アプリを再デプロイした後:
アクティビティを生成するには、アプリの URL にアクセスします。
データの最初のバッチが表示されるまで数秒待ちます。
Databricks SQL で次のクエリを実行して、データがフローされていることを確認します。
SELECT * FROM <catalog>.<schema>.otel_logs LIMIT 10;
テレメトリ データのクエリを実行する
テレメトリ データのフィルター処理と関連付けに役立つ列には、 time、 service_name、 trace_id、 span_id、 attributesなどがあります。
attributes列は、event.nameなどのイベント固有のメタデータを含むマップです。
テレメトリ テーブルの完全なスキーマを表示するには、次のコマンドを実行します。
DESCRIBE TABLE <catalog>.<schema>.otel_logs;
次の例では、過去 1 時間のエラー レベルのログをクエリします。これは、アプリの問題のデバッグに役立ちます。
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;
システム イベントのクエリ
Azure Databricksは、otel_logs テーブル内のシステム イベント (ユーザー ログインの使用状況イベントや直接 API 要求など) を自動的にキャプチャします。
event.name属性をフィルター処理して、これらのイベントに対してクエリを実行します。
次の例では、アプリケーションの最新の 100 件の使用状況イベントを取得します。
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;
カスタム インストルメンテーションを追加する
OpenTelemetry 自動インストルメンテーションを追加して、カスタム トレース、メトリック、ログを生成します。 フレームワークに示すように、 app.yaml と依存関係ファイルを更新します。
Streamlit
app.yamlを更新してください。
command: ['opentelemetry-instrument', 'streamlit', 'run', 'app.py']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
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
ダッシュ
app.yamlを更新してください。
command: ['opentelemetry-instrument', 'python', 'app.py']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
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
app.yamlを更新してください。
command: ['opentelemetry-instrument', 'flask', '--app', 'app.py', 'run', '--no-reload']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
requirements.txtを更新してください。
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-flask
FastAPI
app.yamlを更新してください。
command: ['opentelemetry-instrument', 'uvicorn', 'app:app', '--host', '0.0.0.0', '--port', '8000']
env:
- name: OTEL_TRACES_SAMPLER
value: 'always_on'
requirements.txtを更新してください。
fastapi
uvicorn
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-fastapi
Node.js
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);
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"
}
}
環境変数
アプリ テレメトリを有効にすると、Databricks は、OTLP コレクター エンドポイント、エクスポート プロトコル、リソース属性、バッチ処理用にアプリ ランタイムの環境変数を自動的に構成します。 OTel 環境変数の完全な一覧については、「 アプリ テレメトリ環境変数」を参照してください。
価格
テレメトリの取り込みはLakeflow Connectの使用量として請求されます。なぜなら、アプリのテレメトリはZerobus Ingestコネクタを通じてUnity Catalogのテーブルに書き込みを行うからです。 これはアプリ自体の実行に対する計算料金とは別のものです。
料金は「自動化サーバーレス」SKUに対して請求されます。 料金については Lakeflow Connectの料金ページをご覧ください。
テレメトリーの取り込みコストを追跡するには、請求可能な使用システムテーブルをクエリしてください。 Zerobus Ingestの使用を分離するフィルターについては、「 使用状況の監視」をご覧ください。 アプリ自体のコンピュートコストを監視するには、「 アプリコストの監視」をご覧ください。
限界と制限事項
アプリ テレメトリでは、Zerobus 取り込みコネクタを使用して、Unity カタログ テーブルにデータを書き込みます。 Zerobus Ingestコネクタのすべての制限はアプリテレメトリに適用されており、レコードサイズ、スループット、配信保証、ターゲットテーブルの要件の制限が含まれます。 「Zerobus Ingest クォータ」を参照してください。
ゼロバスの制限に加えて、アプリ テレメトリでは、ログ行あたり 1 MB のログ行の最大サイズが適用されます。