Fabric Apache Spark 诊断发射器扩展是一个库,通过该库,Apache Spark 应用程序能够将日志、事件日志和指标发送到各个目标(包括 Azure Log Analytics、Azure 存储和 Azure 事件中心)。 在本教程中,你将了解如何使用 Fabric Apache Spark 诊断发射器扩展将 Apache Spark 应用程序日志、事件日志和指标发送到 Azure 事件中心。
将日志和指标收集到 Azure 事件中心
步骤 1:创建 Azure 事件中心实例
若要收集诊断日志和指标,可以使用现有的 Azure 事件中心实例。 如果没有,可创建一个事件中心。
步骤 2:使用 Apache Spark 配置创建 Fabric 环境项目
选项 1:使用 Azure 事件中心连接字符串进行配置
在 Fabric 中创建 Fabric 环境项目
将以下 Spark 属性及其相应值添加到环境项目,或者选择功能区中的“从 .yml 添加”以下载示例 yaml 文件,该文件已包含以下属性。
spark.synapse.diagnostic.emitters: MyEventHub spark.synapse.diagnostic.emitter.MyEventHub.type: "AzureEventHub" spark.synapse.diagnostic.emitter.MyEventHub.categories: "Log,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyEventHub.secret: <connection-string> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.在配置文件中填写
<connection-string>参数。 有关详细信息,请参阅 Azure 事件中心配置。
选项 2:配置 Azure 密钥保管库
注意
确保提交 Apache Spark 应用程序的用户被授予读取机密权限。 有关详细信息,请参阅使用 Azure 基于角色的访问控制提供对密钥保管库密钥、证书和机密的访问权限。
若要配置 Azure Key Vault 以存储工作区密钥,请执行以下操作:
在 Azure 门户中,创建并转到密钥保管库。
在密钥保管库的设置页面上,选择“机密”,然后选择“生成/导入”。
在“创建机密”屏幕上,选择以下值:
- 名称:输入机密的名称。
-
值:输入机密的
<connection-string>。 - 让其他值保留默认设置。 然后选择“创建”。
在 Fabric 中创建 Fabric 环境项目。
添加以下 Spark 属性。 或者在功能区上选择“从 .yml 添加”,以下载包含以下 Spark 属性的示例 yaml 文件。
spark.synapse.diagnostic.emitters: MyEventHub spark.synapse.diagnostic.emitter.MyEventHub.type: "AzureEventHub" spark.synapse.diagnostic.emitter.MyEventHub.categories: "Log,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyEventHub.secret.keyVault: <AZURE_KEY_VAULT_URI> spark.synapse.diagnostic.emitter.MyEventHub.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.在配置文件中填写以下参数:
<AZURE_KEY_VAULT_URI>、<AZURE_KEY_VAULT_SECRET_KEY_NAME>。 有关这些参数的更多详细信息,请参阅 Azure 事件中心配置。保存并发布更改。
步骤 3:将环境项目附加到笔记本或 Spark 作业定义,或将其设置为工作区默认值
注意
- 只有工作区管理员可以将环境指定为工作区的默认值。
- 设置后,它将成为工作区中所有笔记本和 Spark 作业定义的默认环境。 有关详细信息,请参阅 Fabric 工作区设置。
将环境附加到笔记本或 Spark 作业定义:
- 导航到 Fabric 中的特定笔记本或 Spark 作业定义。
- 选择“主页”选项卡上的“环境”菜单,然后选择具有已配置诊断 Spark 属性的环境。
- 启动 Spark 会话时会应用配置。
将环境设置为工作区默认值:
- 导航到 Fabric 中的“工作区设置”。
- 在“工作区设置”中找到“Spark 设置”(“工作区设置”->“数据工程/科学”->“Spark 设置”)。
- 选择 “环境 ”选项卡并选择配置了诊断 Spark 属性的环境,然后选择“ 保存”。
“可用配置”
| 配置 | 说明 |
|---|---|
spark.synapse.diagnostic.emitters |
必需。 诊断发射器的目标名称(以逗号分隔)。 |
spark.synapse.diagnostic.emitter.<destination>.type |
必需。 内置目标类型。 要启用 Azure 事件中心目标,该值应为 AzureEventHub。 |
spark.synapse.diagnostic.emitter.<destination>.categories |
可选。 以逗号分隔的选定日志类别。 可用的值包括 DriverLog、ExecutorLog、EventLog、Metrics。 如果未设置,则默认值为类别“所有”。 |
spark.synapse.diagnostic.emitter.<destination>.secret |
可选。 Azure 事件中心实例连接字符串。 此字段应与模式 Endpoint=sb://<FQDN>/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>;EntityPath=<PathName> 匹配 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
如果未指定 .secret,则为必需项。 存储机密(连接字符串)的 Azure Key Vault URI。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
如果指定了 .secret.keyVault,则该参数是必需的。 存储机密(连接字符串)的 Azure 密钥保管库机密名称。 |
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match |
可选。 以逗号分隔的 Spark 事件名称,你可指定要收集的事件。 例如: 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 |
spark.fabric.pools.skipStarterPools |
必需。 此 Spark 属性用于强制按需 Spark 会话。 使用默认池时,应将该值设置为 true,以便触发库发出日志和指标。 |
注意
Azure EventHub 实例连接字符串应始终包含 EntityPathAzure 事件中心实例的名称。
日志数据示例
下面是 JSON 格式的示例日志记录:
{
"timestamp": "2025-02-28T09:13:57.978Z",
"category": "Log|EventLog|Metrics",
"fabricLivyId": "<fabric-livy-id>",
"applicationId": "<application-id>",
"applicationName": "<application-name>",
"executorId": "<driver-or-executor-id>",
"userId": "<the-submitter-user-id>",
"fabricTenantId": "<my-fabric-tenant-id>",
"capacityId": "<my-fabric-capacity-id>",
"artifactType": "SynapseNotebook|SparkJobDefinition",
"artifactId": "<my-fabric-artifact-id>",
"fabricWorkspaceId": "<my-fabric-workspace-id>",
"fabricEnvId": "<my-fabric-environment-id>",
"executorMin": "<executor-min>",
"executorMax": "<executor-max>",
"isHighConcurrencyEnabled": "true|false",
"properties": {
// The message properties of logs, events and metrics.
"timestamp": "2025-02-28T09:13:57.941Z",
"message": "ApplicationAttemptId: appattempt_1740734011890_0001_000001",
"logger_name": "org.apache.spark.deploy.yarn.ApplicationMaster",
"level": "INFO",
"thread_name": "main"
// ...
}
}
向 Azure 事件中心发出诊断后,可以将该 事件中心用作 Fabric 事件流中的源 来处理或路由数据。
具有托管虚拟网络的 Fabric 工作区
为目标 Azure 事件中心创建托管专用终结点。 有关详细说明,请参阅在 Microsoft Fabric 中创建和使用托管专用终结点 - Microsoft Fabric。
一旦托管专用终结点获得批准,用户就可以开始向目标 Azure 事件中心发出日志和指标。