有效的日志记录和监视有助于检测和响应 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 支持部门。
- 应用可用性:特定应用程序是否为请求提供服务。 如果不可用,请检查是否存在部署错误或代码崩溃。