Databricks 应用的日志记录和监控

有效的日志记录和监视有助于检测和响应 Databricks Apps 中的安全事件。 应用生成应用程序级日志和平台审核日志,可用于诊断、性能跟踪和安全分析。

应用程序日志

若要在 Databricks 应用 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 访问日志条目。 这些条目会显示在 /logz 标签页中的 HTTP 源下,以及在 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"

每个条目包含以下字段,按顺序排列。 空字段以连字符-()形式出现。

领域 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 响应体大小,以字节为单位。
Referer "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 应用程序的成本。 使用以下查询获取每天或每月应用的准确成本信息:

-- 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 支持使用策略来帮助跟踪成本。 有关配置使用策略的信息,请参阅 使用无服务器使用策略的属性使用情况。

监控应用程序洞察

重要

“见解”选项卡处于 Beta 版中。

应用详细信息页中的 “见解 ”选项卡显示用户参与度和应用可用性。

查看器跟踪

查看者表跟踪哪些用户访问应用程序。

当用户通过应用 URL 或 API 访问访问应用时,Azure Databricks记录视图事件。 它为每个用户的每个应用存储独有的数据。 同一用户的后续访问会覆盖其以前的记录,而不是创建新行。

上次查看的时间戳遵循 30 分钟的 OAuth 会话刷新周期。 会话窗口中的多次访问会保留初始访问时间,但会话过期后的第一次访问会用新的访问时间覆盖时间戳。

注释

在 Beta 版中,上次查看的时间仅显示协调世界时(UTC)。

运行时间和运行状况

监视以下运行状况信号,排查应用可用性问题。

  • 应用服务运行状况:是否提供支持应用的Azure Databricks基础结构。 如果不可用,则平台存在服务级别问题。 请联系 Databricks 支持部门。
  • 应用可用性:特定应用程序是否为请求提供服务。 如果不可用,请检查是否存在部署错误或代码崩溃。