メインコンテンツまでスキップ

Databricks Appsのテレメトリを構成する

Databricks Appsテレメトリは、トレース、ログ、メトリックを収集し、OpenTelemetry (OTel) プロトコルを使用してUnity Catalogテーブルに保存します。 アプリ テレメトリを有効にすると、Databricks は、ユーザー ログインや直接 API 要求などのシステム ログと使用イベントを自動的にキャプチャします。フレームワーク用の OpenTelemetry SDK を使用してカスタム インストルメンテーションを追加することもできます。

要件​

  • ワークスペースは、サポートされている次のリージョン内にある必要があります:asia-northeast1、asia-south1、asia-southeast1、us-east1、us-east4、us-west1、us-central1、europe-west2、europe-west3。

  • Unity Catalogに新しいテレメトリ ターゲット テーブルを作成するには、ターゲット カタログとスキーマに対するCAN MANAGE権限と、スキーマに対するCREATE TABLE権限が必要です。

  • Unity Catalog内の既存のテレメトリ ターゲット テーブルに書き込むには、ターゲット カタログとスキーマに対するCAN MANAGE権限が必要です。または、すべての ユーザーがターゲット テーブルに対するUSE CATALOG 、 USE SCHEMA 、 SELECT 、およびMODIFYを持っている必要があります。

  • ターゲット テーブルは、ワークスペースと同じリージョン内の管理された Delta テーブルである必要があります。

  • Databricks 、クエリのパフォーマンスを向上させるために、テレメトリ ターゲット テーブルで予測的最適化を有効にすることをお勧めします。

アプリテレメトリを有効にする​

アプリのテレメトリをオンにするには、アプリ設定でテレメトリ テーブルのカタログとスキーマを構成します。

  1. Databricks ワークスペースでアプリの詳細ページを開きます。
  2. 設定 タブで、 アプリのテレメトリ 構成セクションを見つけて、 [追加] をクリックします。
  3. カタログとスキーマを入力するか参照して選択します。Databricks は、選択した場所の 3 つのテーブル ( otel_metrics 、 otel_spans 、 otel_logs ) にテレメトリ データを書き込みます。
  4. (オプション) テーブルに<prefix>_otel_metrics 、 <prefix>_otel_spans 、 <prefix>_otel_logsという名前が付けられるように、テーブル プレフィックスを指定します。Databricks は既存のテーブルに追加するか、存在しない場合はテーブルを作成します。
  5. 保存 をクリックします。
  6. テレメトリが Unity Catalog に流れ始めるようにアプリを再デプロイします。

テレメトリデータを検証する​

再デプロイメント後、 otel_logsテーブルにデータが自動的に入力されます。otel_spansテーブルとotel_metricsテーブルは、アプリにカスタム インストルメンテーションを追加した後にのみ入力されます。

アプリを再デプロイした後:

  1. アクティビティを生成するには、アプリの URL にアクセスしてください。

  2. 最初のデータ バッチが表示されるまで数秒お待ちください。

  3. データが流れていることを確認するには、Databricks SQL で次のクエリを実行します。

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

テレメトリデータのクエリ​

テレメトリ データをフィルタリングおよび相関付けるのに役立つ列には、 time 、 service_name 、 trace_id 、 span_id 、 attributesなどがあります。attributes列は、 event.nameなどのイベント固有のメタデータを含むマップです。

テレメトリ テーブルの完全なスキーマを表示するには、次のコマンドを実行します。

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

以下の例は、過去1時間のエラーレベルのログをクエリするもので、アプリの問題をデバッグする際に役立ちます。

SQL
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;

クエリシステムイベント​

Databricksは、ユーザーログインや直接APIリクエストなどの使用イベントといったシステムイベントをotel_logsテーブルに自動的に記録します。event.name属性でフィルタリングして、これらのイベントをクエリします。

次の例は、アプリケーションの最新の使用状況イベントを100件取得します。

SQL
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と依存関係ファイルを更新します。

app.yamlを更新:

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

環境変数​

アプリ テレメトリを有効にすると、Databricks は、OTLP コレクター エンドポイント、エクスポート プロトコル、リソース属性、およびバッチ処理のために、アプリ ランタイムの環境変数を自動的に構成します。OTel 環境変数の完全なリストについては、 「アプリ テレメトリ環境変数」を参照してください。

価格​

アプリのテレメトリは Zerobus Ingest コネクタを通じて Unity Catalog テーブルに書き込まれるため、テレメトリの取り込みは Lakeflow Connect の利用として課金されます。これは、アプリ自体を実行するためのコンピュート料金とは別です。

料金は「Jobs Serverless」SKUに対して請求されます。料金については、 Lakeflow Connectの価格ページを参照してください。

テレメトリ取り込みのコストを追跡するには、課金利用システムテーブルをクエリーします。Zerobus Ingestの使用状況を分離するフィルターについては、 「使用状況のモニタリング」を参照してください。アプリ自体のコンピュートコストを監視するには、 「アプリコストの監視」を参照してください。

制限事項​

アプリのテレメトリは、Zerobus Ingest コネクタを使用して Unity Catalog テーブルにデータを書き込みます。すべての Zerobus Ingest コネクタの制限事項は、レコードサイズ、throughput、配信保証、ターゲットテーブルの要件に関する制限を含め、アプリのテレメトリに適用されます。Zerobus Ingest のクォータを参照してください。

Zerobusの制限に加えて、アプリのテレメトリ機能では、ログ行あたりの最大サイズが1MBに制限されます。