你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用仪表板将 Azure Databricks 指标可视化

注意

本文依赖于 GitHub 上托管的开放源代码库:https://github.com/mspnp/spark-monitoring

原始库支持 Azure Databricks Runtimes 10.x (Spark 3.2.x) 和更低版本。

Databricks 在 l4jv2 分支(参见 https://github.com/mspnp/spark-monitoring/tree/l4jv2)上贡献了一个更新版本来支持 Azure Databricks Runtimes 11.0 (Spark 3.3.x) 及更高版本。

请注意,由于 Databricks Runtimes 中使用的日志记录系统不同,11.0 版本不向后兼容。 请确保为 Databricks Runtime 使用正确的版本。 库和 GitHub 存储库处于维护模式。 没有进一步发布的计划,问题支持部门只会尽力而为。 如果对于此库或 Azure Databricks 环境的监视和日志记录路线图有任何其他问题,请联系 azure-spark-monitoring-help@databricks.com

本文介绍如何设置 Grafana 仪表板来监视 Azure Databricks 作业的性能问题。

Azure Databricks 是一项基于 Apache Spark 的协作式分析服务,它快速且功能强大,使你可以轻松地快速开发和部署大数据分析和人工智能 (AI) 解决方案。 监视是在生产环境中运行 Azure Databricks 工作负载的关键组成部分。 第一步是将指标收集到工作区中进行分析。 在 Azure 中,用于管理日志数据的最佳解决方案是 Azure Monitor。 Azure Databricks 原生不支持将日志数据发送到 Azure Monitor,但 GitHub 中提供了此功能的库

此库支持记录 Azure Databricks 指标以及 Apache Spark 结构流式处理查询事件指标。 成功将此库部署到 Azure Databricks 群集后,可以进一步部署一组 Grafana 仪表板,这些仪表板可以部署为生产环境的一部分。

Screenshot of the dashboard.

先决条件

按照 GitHub 自述文件中所述,将 Azure Databricks 群集配置为使用监视库。

部署 Azure Log Analytics 工作区

要部署 Azure Log Analytics 工作区,请执行以下步骤:

  1. 导航到 /perftools/deployment/loganalytics 目录。

  2. 部署 logAnalyticsDeploy.json Azure 资源管理器模板。 有关如何部署资源管理器模板的详细信息,请参阅使用资源管理器模板和 Azure CLI 部署资源。 模板包含以下参数:

    • location:部署 Log Analytics 工作区和仪表板的区域。
    • serviceTier:工作区的定价层。 有关有效值的列表,请参阅此处
    • dataRetention(可选):在 Log Analytics 工作区中保留日志数据的天数。 默认值为 30 天。 如果定价层为Free,则数据保留期必须为七天。
    • workspaceName(可选):工作区的名称。 如果未指定,模板将生成名称。
    az deployment group create --resource-group <resource-group-name> --template-file logAnalyticsDeploy.json --parameters location='East US' serviceTier='Standalone'
    

此模板将创建工作区,还会创建由仪表板使用的一组预定义查询。

在虚拟机中部署 Grafana

Grafana 是一个开源项目,通过部署该项目,可以使用适用于 Azure Monitor 的 Grafana 插件将存储在 Azure Log Analytics 工作区中的时序指标可视化。 Grafana 在虚拟机 (VM) 上执行,并且需要存储帐户、虚拟网络和其他资源。 要使用 bitnami 认证的 Grafana 映像和关联资源部署虚拟机,请执行以下步骤:

  1. 使用 Azure CLI 接受 Grafana 的 Azure 市场映像条款。

    az vm image terms accept --publisher bitnami --offer grafana --plan default
    
  2. 导航到 GitHub 存储库的本地副本中的 /spark-monitoring/perftools/deployment/grafana 目录。

  3. 部署 grafanaDeploy.json 资源管理器模板,如下所示:

    export DATA_SOURCE="https://raw.githubusercontent.com/mspnp/spark-monitoring/master/perftools/deployment/grafana/AzureDataSource.sh"
    az deployment group create \
        --resource-group <resource-group-name> \
        --template-file grafanaDeploy.json \
        --parameters adminPass='<vm password>' dataSource=$DATA_SOURCE
    

部署完成后,Grafana 的 bitnami 映像将安装在虚拟机上。

更新 Grafana 密码

在安装过程中,Grafana 安装脚本会输出 admin 用户的临时密码。 需要此临时密码才能登录。 要获取临时密码,请执行以下步骤:

  1. 登录到 Azure 门户。
  2. 选择资源部署到的资源组。
  3. 选择安装了 Grafana 的 VM。 如果在部署模板中使用了默认参数名称,则 VM 名称以 sparkmonitoring-vm-grafana 开头。
  4. 在“支持和疑难解答”部分中,单击“启动诊断”以打开“启动诊断”页。
  5. 在“启动诊断”页上单击“串行日志”。
  6. 搜索以下字符串:“Setting Bitnami application password to”。
  7. 将密码复制到安全位置。

接下来,按照以下步骤更改 Grafana 管理员密码:

  1. 在 Azure 门户中,选择 VM,然后单击“概览”。
  2. 复制公共 IP 地址,
  3. 打开 Web 浏览器并导航到以下 URL:http://<IP address>:3000
  4. 在 Grafana 登录屏幕上,输入 admin 作为用户名,并使用前面步骤中的 Grafana 密码。
  5. 登录后,选择“配置”齿轮图标。
  6. 选择“服务器管理员”。
  7. 在“用户”选项卡上,选择 admin 登录名。
  8. 更新密码。

创建 Azure Monitor 数据源

  1. 创建允许 Grafana 管理对 Log Analytics 工作区的访问权限的服务主体。 有关详细信息,请参阅使用 Azure CLI 创建 Azure 服务主体

    az ad sp create-for-rbac --name http://<service principal name> \
                    --role "Log Analytics Reader" \
                    --scopes /subscriptions/mySubscriptionID
    
  2. 记下此命令的输出中 appId、password 和 tenant 的值:

    {
        "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "displayName": "azure-cli-2019-03-27-00-33-39",
        "name": "http://<service principal name>",
        "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  3. 如前所述登录到 Grafana。 选择“配置”(齿轮图标),然后选择“数据源”。

  4. 在“数据源”选项卡中,单击“添加数据源”。

  5. 选择“Azure Monitor”作为数据源类型。

  6. 在“设置”部分中,在“名称”文本框中输入数据源的名称。

  7. 在“Azure Monitor API 详细信息”部分中,输入以下信息:

    • “订阅 ID”:Azure 订阅 ID。
    • “租户 ID”:前面记下的租户 ID。
    • “客户端 ID”:前面记下的“appId”值。
    • “客户端密码”:前面记下的“password”值。
  8. 在“Azure Log Analytics API 详细信息”部分中,选中“与 Azure Monitor API 相同的详细信息”复选框。

  9. 单击“保存并测试”。 如果 Log Analytics 数据源配置正确,则会显示成功消息。

创建仪表板

按照以下步骤在 Grafana 中创建仪表板:

  1. 导航到 GitHub 存储库的本地副本中的 /perftools/dashboards/grafana 目录。

  2. 运行以下脚本:

    export WORKSPACE=<your Azure Log Analytics workspace ID>
    export LOGTYPE=SparkListenerEvent_CL
    
    sh DashGen.sh
    

    脚本的输出是名为 SparkMonitoringDash.json 的文件。

  3. 返回到 Grafana 仪表板,然后选择“创建”(加号图标)。

  4. 选择“导入”。

  5. 单击“上传 .json 文件”。

  6. 选择在步骤 2 中创建的 SparkMonitoringDash.json 文件。

  7. 在“选项”部分中的“ALA”下,选择先前创建的 Azure Monitor 数据源。

  8. 单击“导入” 。

仪表板中的可视化效果

Azure Log Analytics 仪表板和 Grafana 仪表板都包含一组时序可视化效果。 每个图都是与 Apache Spark 作业、作业阶段以及构成每个阶段的任务相关的指标数据的时序图。

可视化效果包括:

作业延迟

此可视化效果显示作业的执行延迟,这是有关作业总体性能的粗略视图。 显示作业执行持续时间(从开始到完成)。 请注意,作业开始时间与作业提交时间不同。 延迟表示为按群集 ID 和应用程序 ID 编制索引的作业执行的百分位数(10%、30%、50%、90%)。

阶段延迟

此可视化效果按群集、应用程序和阶段显示每个阶段的延迟。 此可视化效果可用于识别运行缓慢的特定阶段。

任务延迟

此可视化效果显示任务执行延迟。 此延迟按群集、阶段名称和应用程序表示为任务执行的百分位数。

每个主机的任务执行总和

此可视化效果显示群集上运行的每个主机的任务执行延迟总和。 通过查看每个主机的任务执行延迟,可确定任务总延迟远高于其他主机的主机。 这可能意味着任务效率低下或不均匀地分配到主机。

任务指标

此可视化效果显示给定任务执行的一组执行指标。 这些指标包括数据混排的大小和持续时间、序列化操作和反序列化操作的持续时间等。 有关完整的指标集,请查看面板的 Log Analytics 查询。 此可视化效果有助于了解构成任务的操作,以及确定每个操作的资源消耗。 图中的峰值表示耗费大量资源因此应加以调查的操作。

群集吞吐量

此可视化效果是按群集和应用程序编制索引的工作项的高级视图,用于表示每个群集和应用程序完成的工作量。 它按一分钟增量显示每个群集、应用程序和阶段完成的作业、任务和阶段的个数。

流式处理吞吐量/延迟

此可视化效果与结构化流式处理查询的关联指标相关。 此图显示每秒输入行数和每秒处理的行数。 流式处理指标也按应用程序表示。 在处理结构化流式处理查询的过程中生成 OnQueryProgress 事件时,将发送这些指标。此可视化效果将流式处理延迟表示为执行查询批处理所用的时间量(以毫秒为单位)。

每个执行程序的资源消耗

接下来是仪表板的一组可视化效果,这些可视化效果显示特定类型的资源,以及每个群集上每个执行程序的资源消耗情况。 这些可视化效果有助于确定每个执行程序的资源消耗中的离群值。 例如,如果特定执行程序的工作分配倾斜,则资源消耗将相对于群集上运行的其他执行程序提升。 这可以通过执行程序的资源消耗中的峰值来确定。

执行程序计算时间指标

接下来是仪表板的一组可视化效果,这些可视化效果显示执行程序序列化时间、反序列化时间、CPU 时间和 Java 虚拟机时间与执行程序总体计算时间的比率。 这直观地演示了这四个指标中每个指标在执行程序总体处理中所占的比例。

混排指标

最后一组可视化效果显示所有执行程序中与结构化流式处理查询关联的数据混排指标。 其中包括使用文件系统的查询中的随机读取字节数、随机写入字节数、随机内存使用量以及磁盘使用量。

后续步骤