Grafana 的 Databricks 数据源
Databricks 数据源允许直接连接到 Databricks,以便在 Grafana 中查询和可视化 Databricks 数据。
该数据源提供了一个 SQL 编辑器,用于格式化和颜色标记您的 SQL 语句。
安装
有关如何在 Grafana Cloud 或本地安装插件的详细说明,请参阅插件安装文档。
注意:此插件使用动态链接进行凭据身份验证(已弃用)。我们建议使用令牌身份验证。如果您在裸 Alpine Linux 上运行插件并使用凭据身份验证,它将无法工作。如果由于某种原因基于令牌的身份验证不是选项并且需要 Alpine Linux,我们建议使用我们的Alpine 镜像。
手动配置
在您的 Grafana 实例上安装插件后,请按照这些说明添加新的 Databricks 数据源,并输入配置选项。
使用配置文件
可以使用 Grafana 的 Provisioning 系统通过配置文件配置数据源。要了解其工作原理,包括您可以为此数据源设置的所有设置,请参阅Provisioning Grafana 数据源。
以下是使用基本身份验证为此数据源配置的一些示例
apiVersion: 1
datasources:
- name: Databricks
type: grafana-databricks-datasource
jsonData:
host: community.cloud.databricks.com
httpPath: path-from-databricks-odbc-settings
secureJsonData:
token: password/personal-token
时序数据
在向查询添加 datetime
字段类型后,可以选择时序可视化选项。该字段将用作时间戳。您可以使用可视化选项选择时序可视化。Grafana 将没有明确时区的 timestamp 行解释为 UTC。除 time
之外的任何列都视为值列。
多线条时序数据
要创建多线条时序数据,查询必须按以下顺序返回至少 3 个字段
- 字段 1:
datetime
字段,别名为time
- 字段 2: 用于分组的值
- 字段 3+: 指标值
例如
SELECT log_time AS time, machine_group, avg(disk_free) AS avg_disk_free
FROM mgbench.logs1
GROUP BY machine_group, log_time
ORDER BY log_time
模板和变量
要添加新的 Databricks 查询变量,请参阅添加查询变量。
创建变量后,您可以使用变量语法在 Databricks 查询中使用它。有关变量的更多信息,请参阅模板和变量。
Databricks 查询中的宏
宏示例 | 描述 |
---|---|
$____interval_long | 将 Grafana 的 interval 转换为 INTERVAL DAY TO SECOND 字面量。适用于 Spark SQL 窗口分组表达式。 |
$__timeFilter(dateColumn) | 将替换为使用指定列名的时间范围过滤器。例如,dateColumn "time BETWEEN '2006-01-02T15:04:05Z07:00' AND '2006-01-02T15:04:05Z07:00'" |
$__timeFrom(dateColumn) | 将替换为当前活动时间选择的开始时间。例如,"time > '2006-01-02T15:04:05Z07:00'" |
$__timeGroup(dateColumn,'5m') | 将替换为可在 GROUP BY 子句中使用的表达式。例如,UNIX_TIMESTAMP(time_column) DIV 900 * 900 |
$__timeGroup(dateColumn,'5m', 0) | 与上面相同,但带有一个填充参数,以便该序列中缺失的点将由 Grafana 添加,并使用 0 作为值(仅适用于时序数据查询)。 |
$__timeGroup(dateColumn,'5m', NULL) | 与上面相同,但将使用 NULL 作为缺失点的值(仅适用于时序数据查询)。 |
$__timeGroup(dateColumn,'5m', previous) | 与上面相同,但如果尚未看到值,将使用该序列中的前一个值作为填充值;如果未看到值,则使用 NULL(仅适用于时序数据查询)。 |
$__timeTo(dateColumn) | 将替换为当前活动时间选择的结束时间。$__timeTo(time) => "time < '2006-01-02T15:04:05Z07:00'" |
$__interval_long
宏
在某些情况下,您可能希望在 Spark SQL 中使用窗口分组。
示例
SELECT window.start, avg(aggqueue) FROM a17
GROUP BY window(_time, '$__interval_long')
将根据仪表板间隔转换为以下查询。
SELECT window.start, avg(aggqueue) FROM a17
GROUP BY window(_time, '2 MINUTE')
宏示例
下表显示了当 Grafana 的间隔为 1m 时 $__interval_long
宏的展开情况。
格式 | 展开为 |
---|---|
$__interval_long | 1 MINUTE |
OAuth 配置
使用 Microsoft Entra ID (Azure Active Directory) 的 OAuth Passthrough
收集信息
- 作为管理员,在 Databricks Dashboard 中导航到 Settings > Identity and access > SSO and sync > SSO Settings > Manage:
- 复制 Databricks SAML URL。(不要关闭此标签页)
- 创建应用注册
- 前往Azure Portal
- Microsoft Entra ID > 添加 > 企业应用程序
- 输入应用程序名称。当被问及“您希望如何处理您的应用程序?”时,请选择“集成图库中没有找到的任何其他应用程序”。
- 在 Properties 下将 Assignment Required 设置为 NO:
- 在 Single-sign on 下点击 SAML,并在 Basic SAML Configuration 下点击编辑
- 将 Identifier ID 设置为之前保存的 Databricks SAML URL,并将 Reply URLs 设置为 Databricks SAML URL 以及本指南中的 Grafana redirect URLs
- 在 SAML Sign-in Certificate 下点击编辑,并将 Sign-in Option 设置为 Sign SAML response and assertion。点击保存。
- 在 Attributes & Claims 下点击编辑。将 Unique User Identifier (Name ID) 字段设置为 user.mail
- 在 SAML Certificates 下,Certificate Base 64 旁边点击下载。这将下载一个 `.cer` 文件。复制其内容以便在 Databricks 中进行后续步骤。
- 同时保存 Databricks 的 Login URL 和 Microsoft Entra ID Identifier
- 回到您的 Databricks SSO 设置标签页
- Single Sign-On URL => Login URL(上一步获取)
- Identity Provider Entity ID => Microsoft Entra Identifier(上一步获取)
- X.509 Certificate => 下载的证书内容
完成 Grafana OAuth 设置
- 在 Azure Portal 上,转到 App Registrations > All Applications 并找到您的应用程序名称
- 在概览页面上记下 Application (client) ID。在您的
conf.ini
文件中,这是 Oauth client ID 和 Directory (tenant) ID。 - 点击 Endpoints
- 记下 OAuth 2.0 authorization endpoint (v2) URL。这是授权 URL。
- 记下 OAuth 2.0 token endpoint (v2)。这是令牌 URL。
- 点击 Certificates & secrets,然后在 Client secrets 下添加一个新条目,配置如下。
- 描述:Grafana OAuth
- 过期时间:从不
- 点击 Add,然后复制密钥值。这是 OAuth client secret。
定义所需角色
- 前往 Microsoft Entra ID,然后前往 Enterprise Applications。
- 搜索您的应用程序并点击它。
- 点击 Users and Groups。
- 点击 Add user/group 将用户或组添加到 Grafana 角色。
- 现在回到 Microsoft Entra ID,然后前往 App Registrations。搜索您的应用并点击它。
- 前往 App Roles 并按照此处所述配置角色。
- 现在按照此处所述在 Grafana 配置文件中配置 AD Oauth。
将令牌转发给用户
在您的 grafana.ini
文件中设置
[azure]
forward_settings_to_plugins = grafana-azure-monitor-datasource, prometheus, grafana-azure-data-explorer-datasource, mssql, grafana-databricks-datasource
最后,在数据源设置页面上将 Authentication Type 设置为 OAuth Passthrough。
代表身份进行认证
代表身份进行认证仅适用于Azure Databricks 集群。它允许单个用户通过在 Azure 中配置的应用注册使用自己的凭据进行身份验证,该应用注册具有访问 Databricks 资源的权限。
目前,私有云(Azure China Cloud、Azure Government Cloud)不支持代表身份进行认证。
警告
如果您的数据源配置为使用代表身份进行认证,请避免设置告警。告警规则将无法工作,因为没有用户在范围内提供查询凭据。
设置
配置 Grafana 使用 OAuth2 和 Microsoft Entra ID 进行身份验证,如文档所述。
[auth.azuread]
的 scopes(或$GF_AUTH_AZUREAD_SCOPES
)必须包含“openid email profile offline_access”。必须在Azure portal 中勾选“App Registrations” → 相应的应用程序 → “Manage” → “Authentication” 下的复选框来启用 ID 令牌。
除了“Microsoft Graph” User.Read 外,还必须在Azure portal 中勾选“App Registrations” → 相应的应用程序 → “Manage” → “API permissions” 下的特殊“Azure Databricks” user_impersonation 权限。
在“App Registrations” → 相应的应用程序 → “Security” → “Permissions” 下启用“Admin consent”。启用“Admin consent”将代表当前租户中的所有用户授予同意,确保用户在使用应用程序时无需再次同意。
配置 Azure Databricks 集群的数据源时,可以通过导航到您的 Azure Databricks 集群 → SQL Warehouses → Connection details → Server hostname 和 HTTP path 找到 hostname 和 HTTP path。
使用步骤 1 中创建的应用注册的 Tenant ID、Client ID 和 Client secret 值。