通过 Azure Log Analytics 监视 Apache Spark 应用程序

在本教程中,你先学习如何启用内置于 Log Analytics 中的 Synapse Studio 连接器。 然后,你可以收集 Apache Spark 应用程序指标和日志并将其发送到 Log Analytics 工作区。 最后,可使用 Azure Monitor 工作簿将指标和日志可视化。

配置工作区信息

按照以下步骤配置 Synapse Studio 中的必要信息。

步骤 1:创建 Log Analytics 工作区

参考以下任一资源,创建此工作区:

步骤 2:准备 Apache Spark 配置文件

使用下面的任何一个选项来准备此文件。

选项 1:配置 Log Analytics 工作区 ID 和密钥

复制以下 Apache Spark 配置,将其保存为“spark_loganalytics_conf.txt”,并填入以下参数:

  • <LOG_ANALYTICS_WORKSPACE_ID>:Log Analytics 工作区 ID。
  • <LOG_ANALYTICS_WORKSPACE_KEY>:Log Analytics 密钥。 若要查找此项,请在 Azure 门户中转到“Azure Log Analytics 工作区”>“代理”>“主密钥”。
spark.synapse.logAnalytics.enabled true
spark.synapse.logAnalytics.workspaceId <LOG_ANALYTICS_WORKSPACE_ID>
spark.synapse.logAnalytics.secret <LOG_ANALYTICS_WORKSPACE_KEY>
spark.synapse.logAnalytics.uriSuffix ods.opinsights.azure.cn

选项 2:配置 Azure 密钥保管库

注意

对于将提交 Apache Spark 应用程序的用户,需要向其授予读取机密权限。 有关详细信息,请参阅使用 Azure 基于角色的访问控制提供对密钥保管库密钥、证书和机密的访问权限。 在 Synapse 管道中启用此功能时,需要使用“选项 3”。 这是使用工作区托管标识从 Azure 密钥保管库获取机密所必需的。

若要配置 Azure 密钥保管库以存储工作区密钥,请执行以下步骤:

  1. 在 Azure 门户中,创建并转到密钥保管库。

  2. 在密钥保管库的“设置”页上,选择“机密”。

  3. 选择“生成/导入”。

  4. 在“创建机密”屏幕上,选择以下值:

    • 名称:输入机密的名称。 对于默认设置,请输入 SparkLogAnalyticsSecret
    • :输入机密的 <LOG_ANALYTICS_WORKSPACE_KEY>
    • 让其他值保留默认设置。 然后选择“创建”。
  5. 复制以下 Apache Spark 配置,将其保存为“spark_loganalytics_conf.txt”,并填入以下参数:

    • <LOG_ANALYTICS_WORKSPACE_ID>:Log Analytics 工作区 ID。
    • <AZURE_KEY_VAULT_NAME>:配置的密钥保管库名称。
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME>(可选):工作区密钥的密钥保管库中的机密名称。 默认为 SparkLogAnalyticsSecret
spark.synapse.logAnalytics.enabled true
spark.synapse.logAnalytics.workspaceId <LOG_ANALYTICS_WORKSPACE_ID>
spark.synapse.logAnalytics.keyVault.name <AZURE_KEY_VAULT_NAME>
spark.synapse.logAnalytics.keyVault.key.secret <AZURE_KEY_VAULT_SECRET_KEY_NAME>
spark.synapse.logAnalytics.uriSuffix ods.opinsights.azure.cn

注意

你还可以将工作区 ID 存储到密钥保管库中。 请参考前述步骤,存储包含机密名称 SparkLogAnalyticsWorkspaceId 的工作区 ID。 或者,可以使用配置 spark.synapse.logAnalytics.keyVault.key.workspaceId 在密钥保管库中指定工作区 ID 机密名称。

选项 3. 配置链接服务

注意

在此选项中,需要将读取机密权限授予工作区托管标识。 有关详细信息,请参阅使用 Azure 基于角色的访问控制提供对密钥保管库密钥、证书和机密的访问权限

若要在 Synapse Studio 中配置密钥保管库链接服务以存储工作区密钥,请执行以下步骤:

  1. 执行上一个部分(选项 2)中的所有步骤。

  2. 在 Synapse Studio 中创建密钥保管库链接服务:

    a. 转到“Synapse Studio”>“管理”>“链接服务”,然后选择“新建” 。

    b. 在搜索框中,搜索“Azure 密钥保管库”。

    c. 输入链接服务名称。

    d. 选择密钥保管库,并选择“创建”。

  3. spark.synapse.logAnalytics.keyVault.linkedServiceName 项添加到 Apache Spark 配置。

spark.synapse.logAnalytics.enabled true
spark.synapse.logAnalytics.workspaceId <LOG_ANALYTICS_WORKSPACE_ID>
spark.synapse.logAnalytics.keyVault.name <AZURE_KEY_VAULT_NAME>
spark.synapse.logAnalytics.keyVault.key.secret <AZURE_KEY_VAULT_SECRET_KEY_NAME>
spark.synapse.logAnalytics.keyVault.linkedServiceName <LINKED_SERVICE_NAME>
spark.synapse.logAnalytics.uriSuffix ods.opinsights.azure.cn

有关 Apache Spark 配置的列表,请参阅可用的 Apache Spark 配置

步骤 3:将 Apache Spark 配置上传到 Apache Spark 池

注意

此步骤将替换为步骤 4。

你可以将配置文件上传到 Azure Synapse Analytics 中的 Apache Spark 池。 在 Synapse Studio 中:

  1. 选择“管理”>“Apache Spark 池” 。

  2. 选择 Apache Spark 池旁边的“...”按钮。

  3. 选择“Apache Spark 配置”。

  4. 选择“上传”,然后选择“spark_loganalytics_conf.txt”文件。

  5. 选择“上传”,然后选择“应用” 。

    显示 Spark 池配置的屏幕截图。

注意

提交到 Apache Spark 池的所有 Apache Spark 应用程序都会使用该配置设置将 Apache Spark 应用程序指标和日志推送到指定工作区。

步骤 4:创建 Apache Spark 配置

可以创建工作区的 Apache Spark 配置,并且在创建 Notebook 或 Apache Spark 作业定义时,可以选择要用于 Apache Spark 池的 Apache Spark 配置。 选择配置时,将显示配置的详细信息。

  1. 选择“管理”>“Apache Spark 配置”。

  2. 单击“新建”按钮创建新的 Apache Spark 配置,或单击“导入”以将本地 .json 文件导入工作区。

  3. 单击“新建”按钮后,将打开“新建 Apache Spark 配置”页。

  4. 对于 “名称”,可以输入有效的首选名称。

  5. 对于“说明”,可以在其中输入一些说明。

  6. 对于“注释”,可以通过单击“新建”按钮来添加注释,还可以通过选择并单击“删除”按钮来删除现有注释。

  7. 对于“配置属性”,请通过单击“添加”按钮添加属性来自定义配置。 如果未添加属性,Azure Synapse 将使用默认值(如果适用)。

    屏幕截图显示如何创建 Spark 配置。

提交 Apache Spark 应用程序并查看日志和指标

下面介绍如何操作:

  1. 将 Apache Spark 应用程序提交到上一步中配置的 Apache Spark 池。 可以使用以下任何一个方法来实现此操作:

    • 在 Synapse Studio 中运行笔记本。
    • 在 Synapse Studio 中,通过 Apache Spark 作业定义提交一个 Apache Spark 批处理作业。
    • 运行包含 Apache Spark 活动的管道。
  2. 转到指定的 Log Analytics 工作区,然后在 Apache Spark 应用程序开始运行时查看应用程序指标和日志。

编写自定义应用程序日志

可以使用 Apache Log4j 库编写自定义日志。

Scala 的示例:

%%spark
val logger = org.apache.log4j.LogManager.getLogger("com.contoso.LoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
//log exception
try {
      1/0
 } catch {
      case e:Exception =>logger.warn("Exception", e)
}
// run job for task level metrics
val data = sc.parallelize(Seq(1,2,3,4)).toDF().count()

PySpark 的示例:

%%pyspark
logger = sc._jvm.org.apache.log4j.LogManager.getLogger("com.contoso.PythonLoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")

使用示例工作簿可视化指标和日志

  1. 下载工作簿

  2. 打开并复制工作簿文件内容。

  3. Azure 门户中,选择“Log Analytics 工作区”>“工作簿” 。

  4. 打开空白工作簿。 通过选择 </> 图标来使用“高级编辑器”模式。

  5. 粘贴任何存在的 JSON 代码。

  6. 选择“应用”,然后选择“完成编辑” 。

    显示新工作簿的屏幕截图。

    显示如何导入工作簿的屏幕截图。

然后,将 Apache Spark 应用程序提交到配置的 Apache Spark 池。 在应用程序进入正在运行状态后,在工作簿下拉列表中选择正在运行的应用程序。

显示工作簿的屏幕截图。

你可以自定义工作簿。 例如,可以使用 Kusto 查询并配置警报。

显示如何使用查询和警报自定义工作簿的屏幕截图。

使用 Kusto 查询数据

下面是查询 Apache Spark 事件的示例:

SparkListenerEvent_CL
| where workspaceName_s == "{SynapseWorkspace}" and clusterName_s == "{SparkPool}" and livyId_s == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

下面是查询 Apache Spark 应用程序驱动程序和执行程序日志的示例:

SparkLoggingEvent_CL
| where workspaceName_s == "{SynapseWorkspace}" and clusterName_s == "{SparkPool}" and livyId_s == "{LivyId}"
| order by TimeGenerated desc
| limit 100

下面是查询 Apache Spark 指标的示例:

SparkMetrics_CL
| where workspaceName_s == "{SynapseWorkspace}" and clusterName_s == "{SparkPool}" and livyId_s == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc

创建和管理警报

用户可以进行查询,以按设置的频率评估指标和日志,并根据结果触发警报。 有关详细信息,请参阅使用 Azure Monitor 创建、查看和管理日志警报

启用了数据外泄防护功能的 Synapse 工作区

在启用数据外泄防护的情况下创建 Synapse 工作区之后。

若要启用此功能,需要在工作区已批准的 Microsoft Entra 租户中,创建对 Azure Monitor 专用链接范围 (AMPLS) 的托管专用终结点连接请求。

可以按照以下步骤创建到 Azure Monitor 专用链接范围 (A M P L S) 的托管专用终结点连接:

  1. 如果没有现有的 A M P L S,可按照 Azure Monitor 专用链接连接设置创建一个。
  2. 在 Azure 门户中导航到 A M P L S,在“Azure Monitor 资源”页面上,单击“添加”以添加到 Azure Log Analytics 工作区的连接。
  3. 导航到“Synapse Studio”>“管理”>“托管专用终结点”,单击“新建”按钮,选择“Azure Monitor 专用链接范围”,然后选择“继续”。

    创建 A M P L S 托管专用终结点 1 的屏幕截图。

  4. 选择创建的 Azure Monitor 专用链接范围,然后单击“创建”按钮。

    创建 A M P L S 托管专用终结点 2 的屏幕截图。

  5. 预配专用终结点期间请耐心等待。
  6. 在 Azure 门户中再次导航到 A M P L S,在“专用终结点连接”页面上,选择预配的连接,然后选择“批准”。

注意

  • 在规划专用链接设置时,应考虑到 A M P L S 对象的许多限制。 若要深入了解这些限制,请参阅 限制
  • 检查是否具有创建托管专用终结点的正确权限

后续步骤