Membuat monitor menggunakan API
Halaman ini menjelaskan cara membuat monitor di Databricks menggunakan Databricks SDK dan menjelaskan semua parameters yang digunakan dalam panggilan API. Anda juga dapat membuat dan mengelola monitor menggunakan REST API. Untuk informasi referensi, lihat referensi SDK pemantauan Lakehouse dan referensi REST API.
Anda dapat membuat pemantauan pada Delta table yang terkelola atau eksternal yang terdaftar di Unity Catalog. Hanya satu monitor yang dapat dibuat di metastore Unity Catalog untuk tableapa pun.
Persyaratan
Lakehouse Monitoring API dibangun menjadi databricks-sdk
0.28.0 ke atas. Untuk menggunakan versi API terbaru, gunakan perintah berikut di awal buku catatan Anda untuk menginstal klien Python:
%pip install "databricks-sdk>=0.28.0"
Untuk mengautentikasi untuk menggunakan Databricks SDK di lingkungan Anda, lihat Autentikasi.
Jenis profil
Saat membuat monitor, Anda select salah satu tipe profil berikut: TimeSeries, InferenceLog, atau Snapshot. Bagian ini secara singkat menjelaskan setiap opsi. Untuk detailnya, lihat referensi API atau referensi REST API.
Catatan
- Ketika Anda pertama kali membuat rangkaian waktu atau profil inferensi, monitor hanya menganalisis data dari 30 hari sebelum pembuatannya. Setelah monitor dibuat, semua data baru diproses.
- Monitor yang didefinisikan pada views yang diwujudkan dan streaming tables tidak mendukung pemrosesan inkremental.
Tip
Untuk profil TimeSeries
dan Inference
, praktik terbaik adalah mengaktifkan Change Data Feed (CDF) di tableAnda. Ketika CDF diaktifkan, hanya data yang baru ditambahkan yang diproses, daripada memproses ulang seluruh table setiap refresh. Ini membuat eksekusi lebih efisien dan mengurangi biaya saat Anda meningkatkan skala pemantauan pada banyak tables.
TimeSeries
profil
TimeSeries
Profil membandingkan distribusi data di seluruh jendela waktu.
TimeSeries
Untuk profil, Anda harus memberikan hal berikut:
- Tanda waktu column (
timestamp_col
). Jenis data stempel waktu column harusTIMESTAMP
atau tipe yang bisa dikonversi menjadi stempel waktu menggunakan fungsi PySparkto_timestamp
. - Penghitungan metrik di atas set dari
granularities
. Granularitas yang tersedia adalah "5 menit", "30 menit", "1 jam", "1 hari", "1 minggu", "2 minggu", "3 minggu", "4 minggu", "1 bulan", "1 tahun".
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import MonitorTimeSeries
w = WorkspaceClient()
w.quality_monitors.create(
table_name=f"{catalog}.{schema}.{table_name}",
assets_dir=f"/Workspace/Users/{user_email}/databricks_lakehouse_monitoring/{catalog}.{schema}.{table_name}",
output_schema_name=f"{catalog}.{schema}",
time_series=MonitorTimeSeries(timestamp_col=ts, granularities=["30 minutes"])
)
InferenceLog
profil
Profil InferenceLog
mirip TimeSeries
dengan profil tetapi juga menyertakan metrik kualitas model. Untuk profil InferenceLog
, parameters berikut diperlukan:
Parameter | Deskripsi |
---|---|
problem_type |
MonitorInferenceLogProblemType.PROBLEM_TYPE_CLASSIFICATION atau MonitorInferenceLogProblemType.PROBLEM_TYPE_REGRESSION |
prediction_col |
Column yang berisi prediksi valuesdari model. |
timestamp_col |
Column yang berisi tanda waktu permintaan inferensi. |
model_id_col |
Column berisi id model yang digunakan untuk prediksi. |
granularities |
Menentukan cara partition data di jendela sepanjang waktu. Kemungkinan values: "5 menit", "30 menit", "1 jam", "1 hari", "1 minggu", "2 minggu", "3 minggu", "4 minggu", "1 bulan", "1 tahun". |
Ada juga parameter opsional:
Parameter opsional. | Deskripsi |
---|---|
label_col |
Column berisi kebenaran dasar untuk prediksi model. |
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import MonitorInferenceLog, MonitorInferenceLogProblemType
w = WorkspaceClient()
w.quality_monitors.create(
table_name=f"{catalog}.{schema}.{table_name}",
assets_dir=f"/Workspace/Users/{user_email}/databricks_lakehouse_monitoring/{catalog}.{schema}.{table_name}",
output_schema_name=f"{catalog}.{schema}",
inference_log=MonitorInferenceLog(
problem_type=MonitorInferenceLogProblemType.PROBLEM_TYPE_CLASSIFICATION,
prediction_col="preds",
timestamp_col="ts",
granularities=["30 minutes", "1 day"],
model_id_col="model_ver",
label_col="label", # optional
)
)
Untuk profil InferenceLog, irisan secara otomatis dibuat berdasarkan valuesmodel_id_col
yang berbeda.
Snapshot
profil
Berbeda dengan TimeSeries
, profil Snapshot
memantau bagaimana konten lengkap table berubah dari waktu ke waktu. Metrik dihitung atas semua data dalam table, dan memantau status table setiap kali monitor di-refresh.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import MonitorSnapshot
w = WorkspaceClient()
w.quality_monitors.create(
table_name=f"{catalog}.{schema}.{table_name}",
assets_dir=f"/Workspace/Users/{user_email}/databricks_lakehouse_monitoring/{catalog}.{schema}.{table_name}",
output_schema_name=f"{catalog}.{schema}",
snapshot=MonitorSnapshot()
)
Refresh dan melihat hasil monitoring
Untuk refresh metrik tables, gunakan run_refresh
. Contohnya:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.quality_monitors.run_refresh(
table_name=f"{catalog}.{schema}.{table_name}"
)
Saat Anda memanggil run_refresh
dari buku catatan, metrik monitor tables dibuat atau diperbarui. Perhitungan ini berjalan pada komputasi tanpa server, bukan pada kluster tempat buku catatan dilampirkan. Anda dapat terus menjalankan perintah di buku catatan saat statistik monitor diperbarui.
Untuk informasi tentang statistik yang disimpan dalam metrik tables, lihat Monitor metrik tables Metrik tables Unity Catalogtables. Anda bisa mengkuerinya di buku catatan atau di penjelajah kueri SQL, dan menampilkannya di Catalog Explorer.
Untuk menampilkan riwayat semua refresh yang terkait dengan monitor, gunakan list_refreshes
.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.quality_monitors.list_refreshes(
table_name=f"{catalog}.{schema}.{table_name}"
)
Untuk get status run tertentu yang telah diantrekan, berjalan, atau selesai, gunakan get_refresh
.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
run_info = w.quality_monitors.run_refresh(table_name=f"{catalog}.{schema}.{table_name}")
w.quality_monitors.get_refresh(
table_name=f"{catalog}.{schema}.{table_name}",
refresh_id = run_info.refresh_id
)
Untuk membatalkan refresh yang diantrekan atau berjalan, gunakan cancel_refresh
.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
run_info = w.quality_monitors.run_refresh(table_name=f"{catalog}.{schema}.{table_name}")
w.quality_monitors.cancel_refresh(
table_name=f"{catalog}.{schema}.{table_name}",
refresh_id=run_info.refresh_id
)
Lihat pengaturan monitor
Anda dapat meninjau pengaturan pemantauan menggunakan API get_monitor
.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.quality_monitors.get(f"{catalog}.{schema}.{table_name}")
Jadwal
Untuk menjalankan set monitor secara terjadwal, gunakan parameter schedule
dari create_monitor
:
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import MonitorTimeSeries, MonitorCronSchedule
w = WorkspaceClient()
w.quality_monitors.create(
table_name=f"{catalog}.{schema}.{table_name}",
assets_dir=f"/Workspace/Users/{user_email}/databricks_lakehouse_monitoring/{catalog}.{schema}.{table_name}",
output_schema_name=f"{catalog}.{schema}",
time_series=MonitorTimeSeries(timestamp_col=ts, granularities=["30 minutes"]),
schedule=MonitorCronSchedule(
quartz_cron_expression="0 0 12 * * ?", # schedules a refresh every day at 12 noon
timezone_id="PST",
)
)
Lihat ekspresi cron untuk informasi selengkapnya.
Notifications
Untuk set pemberitahuan untuk monitor, gunakan parameter notifications
create_monitor
:
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import MonitorTimeSeries, MonitorNotifications, MonitorDestination
w = WorkspaceClient()
w.quality_monitors.create(
table_name=f"{catalog}.{schema}.{table_name}",
assets_dir=f"/Workspace/Users/{user_email}/databricks_lakehouse_monitoring/{catalog}.{schema}.{table_name}",
output_schema_name=f"{catalog}.{schema}",
time_series=MonitorTimeSeries(timestamp_col=ts, granularities=["30 minutes"]),
notifications=MonitorNotifications(
# Notify the given email when a monitoring refresh fails or times out.
on_failure=MonitorDestination(
email_addresses=["your_email@domain.com"]
)
)
)
Maksimal 5 alamat email didukung per jenis peristiwa (misalnya, "on_failure").
Mengontrol akses ke tables metrik
Metrik tables dan dasbor yang dibuat oleh monitor dimiliki oleh pengguna yang membuat monitor. Anda dapat menggunakan hak istimewa Unity Catalog untuk mengontrol akses ke metrik tables. Untuk berbagi dasbor dalam ruang kerja, gunakan tombol Bagikan di kanan atas dasbor.
Menghapus monitor
Untuk menghapus monitor:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.quality_monitors.delete(table_name=f"{catalog}.{schema}.{table_name}")
Perintah ini tidak menghapus profil tables dan dasbor yang dibuat oleh monitor. Anda harus menghapus aset tersebut dalam langkah terpisah, atau Anda dapat menyimpannya di lokasi yang berbeda.
Contoh buku catatan
Contoh notebook berikut mengilustrasikan cara membuat monitor, refresh monitor, dan memeriksa metrik tables dibuatnya.
Contoh buku catatan: Profil rangkaian waktu
Buku catatan ini mengilustrasikan cara membuat TimeSeries
monitor tipe.
Buku catatan contoh TimeSeries Lakehouse Monitor
Contoh buku catatan: Profil inferensi (regresi)
Buku catatan ini menggambarkan cara membuat InferenceLog
pemantau jenis untuk masalah regresi.
Buku catatan contoh regresi Inferensi Lakehouse Monitor
Contoh buku catatan: Profil inferensi (klasifikasi)
Buku catatan ini mengilustrasikan cara membuat InferenceLog
monitor jenis untuk masalah klasifikasi.
Buku catatan contoh klasifikasi Inferensi Lakehouse Monitor
Contoh buku catatan: Profil rekam jepret
Buku catatan ini mengilustrasikan cara membuat Snapshot
monitor tipe.