在本教程中,你先学习如何启用内置于 Log Analytics 中的 Synapse Studio 连接器。 然后,你可以收集 Apache Spark 应用程序指标和日志并将其发送到 Log Analytics 工作区。 最后,可使用 Azure Monitor 工作簿将指标和日志可视化。
按照以下步骤配置 Synapse Studio 中的必要信息。
参考以下任一资源,创建此工作区:
使用下面的任何一个选项来准备此配置。
收集以下用于 Spark 配置的值:
<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
或者,使用以下属性:
spark.synapse.diagnostic.emitters: LA
spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
备注
对于将提交 Apache Spark 应用程序的用户,需要向其授予读取机密权限。 有关详细信息,请参阅使用 Azure 基于角色的访问控制提供对密钥保管库密钥、证书和机密的访问权限。 在 Synapse 管道中启用此功能时,需要使用“选项 3”。 这是使用工作区托管标识从 Azure 密钥保管库获取机密所必需的。
若要配置 Azure 密钥保管库以存储工作区密钥,请执行以下步骤:
在 Azure 门户中,创建并转到密钥保管库。
在密钥保管库的“设置”页上,选择“机密”。
选择“生成/导入”。
在“创建机密”屏幕上,选择以下值:
- 名称:输入机密的名称。 对于默认设置,请输入
SparkLogAnalyticsSecret
。 - 值:输入机密的
<LOG_ANALYTICS_WORKSPACE_KEY>
。 - 让其他值保留默认设置。 然后选择“创建”。
- 名称:输入机密的名称。 对于默认设置,请输入
收集以下用于 Spark 配置的值:
<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
或者,使用以下属性:
spark.synapse.diagnostic.emitters LA
spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
备注
你还可以将工作区 ID 存储到密钥保管库中。 请参考前述步骤,存储包含机密名称 SparkLogAnalyticsWorkspaceId
的工作区 ID。 或者,可以使用配置 spark.synapse.logAnalytics.keyVault.key.workspaceId
在密钥保管库中指定工作区 ID 机密名称。
备注
在此选项中,你需要向工作区托管标识授予机密读取权限。 有关详细信息,请参阅使用 Azure 基于角色的访问控制提供对密钥保管库密钥、证书和机密的访问权限。
若要在 Synapse Studio 中配置密钥保管库链接服务以存储工作区密钥,请执行以下步骤:
执行上一个部分(选项 2)中的所有步骤。
在 Synapse Studio 中创建密钥保管库链接服务:
a。 转到“Synapse Studio”“管理”>“链接服务”,然后选择“新建” 。
b. 在搜索框中,搜索“Azure 密钥保管库”。
c. 输入链接服务名称。
d. 选择密钥保管库,并选择“创建”。
将
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
或者,使用以下属性:
spark.synapse.diagnostic.emitters LA
spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
spark.synapse.diagnostic.emitter.LA.secret.keyVault.linkedService: <AZURE_KEY_VAULT_LINKED_SERVICE>
有关 Apache Spark 配置的列表,请参阅可用的 Apache Spark 配置
您可以为您的工作区创建 Apache Spark 配置,并且在定义 Notebook 或 Apache Spark 作业时,可以选择要用于 Apache Spark 池的 Apache Spark 配置。 选择配置时,将显示配置的详细信息。
选择管理>Apache Spark 配置。
选择“新建”按钮以创建新的 Apache Spark 配置。
选择“新建”按钮后,将打开“新建 Apache Spark 配置”页。
对于名字,您可以输入首选的有效名称。
在“说明”中,输入一些说明。
对于“注释”,可以通过单击“新建”按钮来添加注释,还可以通过选择并单击“删除”按钮来删除现有注释。
对于“配置属性”,请选择“添加”按钮,从所选配置选项中添加所有属性。 对于“属性”,添加列出的属性名称,对于“值”,使用在步骤 2 中收集的值。 如果未添加属性,Azure Synapse 将使用默认值(如果适用)。
下面介绍如何操作:
将 Apache Spark 应用程序提交到上一步中配置的 Apache Spark 池。 可以使用以下任何一个方法来实现此操作:
- 在 Synapse Studio 中运行笔记本。
- 在 Synapse Studio 中,通过 Apache Spark 作业定义提交一个 Apache Spark 批处理作业。
- 运行包含 Apache Spark 活动的管道。
转到指定的 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")
打开并复制工作簿文件内容。
在 Azure 门户中,选择“Log Analytics 工作区”“工作簿”>。
打开空白工作簿。 要使用“高级编辑器”模式,请选择>图标。
粘贴任何存在的 JSON 代码。
选择“应用”,然后选择“完成编辑” 。
然后,将 Apache Spark 应用程序提交到配置的 Apache Spark 池。 在应用程序进入正在运行状态后,在工作簿下拉列表中选择正在运行的应用程序。
你可以自定义工作簿。 例如,可以使用 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 工作区之后。
若要启用此功能,需要在工作区已批准的 Microsoft Entra 租户中,创建对 Azure Monitor 专用链接范围 (AMPLS) 的托管专用终结点连接请求。
可以按照以下步骤创建到 Azure Monitor 专用链接范围 (AMPLS) 的托管专用终结点连接:
- 如果没有现有的 AMPLS,可按照 Azure Monitor 专用链接连接设置创建一个。
- 在 Azure 门户中导航到 AMPLS,在“Azure Monitor 资源”页面上,选择“添加”以添加到 Azure Log Analytics 工作区的连接。
- 导航到“>Synapse Studio > 管理 托管专用终结点”,选择“新建”按钮,选择“Azure Monitor 专用链接范围”,然后选择“继续”。
- 选择创建的 Azure Monitor 专用链接范围,然后选择“创建”按钮。
- 预配专用终结点期间请耐心等待。
- 在 Azure 门户中再次导航到 AMPLS,在“专用终结点连接”页面上,选择预配的连接,然后选择“批准”。
配置 | DESCRIPTION |
---|---|
spark.synapse.diagnostic.emitters |
必填。 诊断发射器的目标名称(逗号分隔)。 例如: MyDest1,MyDest2 |
spark.synapse.diagnostic.emitter.<destination>.type |
必填。 内置目标类型。 若要启用 Azure Log Analytics 目标,需要将 AzureLogAnalytics 包含在此字段中。 |
spark.synapse.diagnostic.emitter.<destination>.categories |
可选。 以逗号分隔的选定日志类别。 可用的值包括 DriverLog 、ExecutorLog 、EventLog 、Metrics 。 如果未设置,则默认值为“所有”类别。 |
spark.synapse.diagnostic.emitter.<destination>.workspaceId |
必填。 若要启用 Azure Log Analytics 目标,需要将 workspaceId 包含在此字段中。 |
spark.synapse.diagnostic.emitter.<destination>.secret |
可选。 机密(Log Aanalytics 密钥)内容。 若要找到此项,请在 Azure 门户中转到“Azure Log Analytics 工作区”>“代理”>“主密钥”。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
如果未指定 .secret ,则是必需的。 存储机密(AccessKey 或 SAS)的 Azure Key Vault 名称。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
如果指定了 .secret.keyVault ,则该参数是必需的。 存储机密的 Azure 密钥保管库机密名称。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.linkedService |
可选。 Azure Key Vault 链接服务名称。 在 Synapse 管道中启用时,必须从 AKV 中获取机密。 (请确保 MSI 对 AKV 具有读取权限)。 |
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match |
可选。 以逗号分隔的 Log4j 记录器名称列表可以让你指定要收集的日志。 例如 SparkListenerApplicationStart,SparkListenerApplicationEnd |
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match |
可选。 可以通过以逗号分隔的 log4j 记录器名称来指定要收集的日志。 例如:org.apache.spark.SparkContext,org.example.Logger |
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match |
可选。 逗号分隔的 Spark 指标名称后缀,你可以指定要收集的指标。 例如:jvm.heap.used |