Databricks 應用程式的記錄和監視

有效的記錄和監視可協助您偵測和回應 Databricks Apps 中的安全性事件。 應用程式會產生應用程式層級記錄和平台稽核記錄,您可以將其用於診斷、效能追蹤和安全性分析。

應用程式記錄

若要在 Databricks Apps UI 中或透過應用程式的 URL 提供記錄,您的應用程式必須將輸出寫入 stdout 和 stderr。

透過下列方式存取應用程式日誌:

  • 應用程式介面:點擊應用程式的 日誌 標籤以查看標準輸出與錯誤。 如需詳細資訊,請參閱 檢視 Databricks 應用程式的詳細數據。
  • 直接 URL:附加 /logz 至您的應用程式 URL。 例如,如果您的應用程式 URL 是 https://my-app-1234567890.my-instance.databricksapps.com,則可以在 https://my-app-1234567890.my-instance.databricksapps.com/logz 找到記錄。

備註

Azure Databricks 在應用程式運算關閉時不會持續保存日誌。 若要進行持續性記錄,請與外部記錄服務整合,或將記錄寫入 Unity 目錄磁碟區或資料表。

日誌條目依來源分組。 在 日誌 標籤中,使用 來源 篩選器顯示或隱藏每個來源的條目:

  • 應用程式:你的應用程式標準輸出。
  • 系統:平台訊息,關於應用程式生命週期,如部署與啟動。
  • 建置:安裝相依性並建置應用程式時產生的輸出。
  • HTTP:您的應用程式所處理請求的 HTTP 存取日誌。 請參見 HTTP 存取日誌。

HTTP 存取日誌

Databricks Apps 會為你的應用程式所服務的每個請求記錄 HTTP 存取日誌。 這些條目會顯示在 Logs 標籤的 HTTP 來源下方,以及 /logz URL 上,與你應用程式的標準輸出和錯誤並列。

存取日誌會記錄已認證與未驗證的請求,包括在抵達應用程式前被拒絕的請求,例如授權失敗的請求。 因為被拒絕的請求會被記錄,你可以將授權失敗的嘗試作為安全事件來審核。

以下限制適用於記錄內容:

  • 為了保護敏感資料,查詢字串會從請求路徑中移除,因此作為查詢參數傳遞的標記或其他敏感值不會被記錄。
  • 為了減少雜訊,平台內部的請求,如認證回撥與健康檢查,皆被排除。

在負載過重時,Azure Databricks 可能會遺失一些存取日誌條目。 當條目被刪除時,日誌會包含一條內嵌訊息,報告被刪除條目數量。

日誌輸入格式:每個日誌皆使用 Apache 綜合日誌格式。 以下是範例條目:

203.0.113.10 - jane.doe@example.com [23/Jul/2026:15:04:05 +0000] "GET /api/data HTTP/1.1" 200 1234 "https://apps.example.com/" "Mozilla/5.0"

每個條目包含以下欄位,依序排列。 空欄位會以連字號-()呈現。

Field Example Description
用戶端IP 203.0.113.10 提出要求用戶端的 IP 位址。
使用者 jane.doe@example.com 已認證的使用者,或 - 是未認證的請求。
時間戳 [23/Jul/2026:15:04:05 +0000] 收到申請的日期和時間。
請求專線 "GET /api/data HTTP/1.1" HTTP 方法、移除查詢字串的請求路徑,以及協定。
狀態代碼 200 HTTP 回應狀態代碼。
響應大小 1234 回應文體大小,以位元組為單位。
推薦者 "https://apps.example.com/" 請求標頭的 Referer 值。
使用者代理程式 "Mozilla/5.0" 請求標頭的 User-Agent 值。

與外部日誌記錄服務整合

如需持續性記錄和進階監控功能,請使用下列指令:

  • 應用程式遙測(測試版):將追蹤、日誌和指標直接收集到 Unity Catalog 資料表中。 請參見 「為 Databricks 應用程式設定遙測」。

  • 應用程式效能監控(APM)工具:使用 New Relic、Datadog 或類似的應用程式效能監控工具來收集和分析日誌、指標與追蹤資料。

  • 自訂日誌持久化:定期將日誌寫入 Unity 目錄卷或資料表,以便長期儲存與分析。

請參閱 建議的記錄做法, 以取得記錄格式和內容的指引。

若要與外部監控和即時警報系統整合:

  • 將日誌格式化為 JSON 或其他機器可剖析的格式。
  • 記錄帶有背景資訊的安全相關事件:
    • 驗證和授權事件,包括使用者身分識別和結果
    • 資料存取詳細資料,例如目錄、結構描述和資料表名稱
    • 安全性相關錯誤,例如無效權杖、權限拒絕和可疑活動
  • 將日誌轉送至外部系統。 整合 APM 或日誌彙整工具,以支援即時警示、安全事件回應、使用與效能分析,以及與 Azure Databricks 系統日誌的關聯。

日誌記錄的安全考量

Databricks 應用程式設計有下列內建控制項,以防止資料外流:

  • 僅 API 存取:應用程式只能透過公開Azure Databricks API 存取Azure Databricks資源。 這些 API 可透過系統表格日誌進行稽核。
  • 加密通訊:所有 API 流量均使用 TLS 1.2 或更高版本進行加密,以確保資料傳輸安全。

使用系統表格進行安全監控

Azure Databricks 會擷取 system.access.audit 表格中應用程式相關活動的稽核日誌。 您可以查詢這些日誌來追蹤使用者動作、應用程式設定變更和安全事件。

使用下列查詢來監視安全性相關活動,並偵測應用程式的潛在問題。

監控應用程式權限變更

使用此查詢來偵測應用程式權限修改:

-- Monitor all app permission modifications in the last 30 days
WITH permission_changes AS (
  SELECT
    event_date,
    workspace_id,
    request_params.request_object_id AS app_name,
    user_identity.email AS modified_by,
    explode(from_json(
      request_params.access_control_list,
      'array<struct<user_name:string,group_name:string,permission_level:string>>'
    )) AS permission
  FROM system.access.audit
  WHERE action_name = 'changeAppsAcl'
    AND event_date >= current_date() - 30
)
SELECT
  event_date,
  app_name,
  modified_by,
  permission.user_name,
  permission.group_name,
  permission.permission_level
FROM permission_changes
ORDER BY event_date DESC

識別具有使用者 API 範圍的應用程式

使用此查詢來尋找已設定使用者 API 範圍的應用程式:

-- Find apps created or updated in the last 30 days with user API scopes configured
SELECT
  event_date,
  get_json_object(request_params.app, '$.name') AS app_name,
  user_identity.email AS creator_email,
  get_json_object(request_params.app, '$.user_api_scopes') AS user_api_scopes
FROM system.access.audit
WHERE
  action_name IN ('createApp', 'updateApp')
  AND get_json_object(request_params.app, '$.user_api_scopes') IS NOT NULL
  AND event_date >= current_date() - INTERVAL 30 DAYS

追蹤使用者授權動作

使用此查詢來列出以使用者授權執行的應用程式動作:

-- List app actions performed on behalf of users in the last 30 days
WITH obo_events AS (
  SELECT
    event_date,
    workspace_id,
    audit_level,
    identity_metadata.acting_resource AS app_id,   -- OAuth App ID or name
    user_identity.email AS user_email,             -- Logged-in user
    service_name,
    action_name
  FROM system.access.audit
  WHERE event_date >= current_date() - 30
    AND identity_metadata.acting_resource IS NOT NULL
)
SELECT
  event_date,
  app_id,
  user_email,
  service_name,
  action_name,
  audit_level,
  COUNT(*) AS event_count
FROM obo_events
GROUP BY
  event_date, app_id, user_email, service_name, action_name, audit_level
ORDER BY event_date DESC;

營運監控

使用系統資料表來監控應用程式的作業層面,例如成本和資源用量。

監控應用程式成本

透過 system.billing.usage 表監視 Databricks Apps 的成本。 使用下列查詢來取得應用程式每天或每月的準確成本資訊:

-- Get Databricks Apps cost by app per day for the last 30 days
SELECT
  us.usage_date,
  us.usage_metadata.app_id,
  us.usage_metadata.app_name,
  SUM(us.usage_quantity) AS dbus,
  SUM(us.usage_quantity * lp.pricing.effective_list.default) AS dollars
FROM
  system.billing.usage us
LEFT JOIN system.billing.list_prices lp
  ON lp.sku_name = us.sku_name
  AND us.usage_start_time BETWEEN lp.price_start_time AND COALESCE(lp.price_end_time, NOW())
WHERE
  billing_origin_product = 'APPS'
  AND us.usage_unit = 'DBU'
  AND us.usage_date >= DATE_SUB(NOW(), 30)
GROUP BY ALL

Databricks Apps 支援使用政策以協助追蹤成本。 關於如何設定使用政策,請參見 「無伺服器使用政策的屬性使用」。

監控應用程式洞察

這很重要

洞察分頁目前仍處於 測試階段。

應用程式詳情頁的 Insights 標籤顯示用戶互動與應用程式可用性。

使用者追蹤

檢視者表會追蹤哪些使用者存取你的應用程式。

Azure Databricks 會記錄使用者透過應用程式 URL 或 API 存取應用程式時的檢視事件。 它會以每位使用者、每個應用程式的獨特方式儲存資料。 同一使用者後續的造訪會覆蓋其先前的紀錄,而非建立新列。

最後一次查看的時間戳記遵循 30 分鐘的 OAuth 會話刷新週期。 在會話視窗內多次造訪會保留初始造訪時間,但會話結束後的第一次存取會覆蓋該時間戳記,顯示新的造訪時間。

備註

在 Beta 版本中,最後觀看的時間僅顯示協調世界時(UTC)。

正常運作時間與系統健康狀態

請監測以下健康訊號以排除應用程式可用性問題。

  • App 服務健康:支援該應用程式的Azure Databricks基礎設施是否可用。 若無法使用,則表示平台存在服務水準問題。 聯絡 Databricks 客服。
  • 應用程式可用性:特定應用程式是否會回應請求。 如果無法使用,請檢查程式碼是否有部署錯誤或當機。