Compartir a través de

使用 Azure 事件中心收集 Apache Spark 应用程序日志和指标

Synapse Apache Spark 诊断发射器扩展是一个库,通过该库,Apache Spark 应用程序能够将日志、事件日志和指标发送到一个或多个目标,包括 Azure Log Analytics、Azure 存储和 Azure 事件中心。

本教程介绍如何使用 Synapse Apache Spark 诊断发射器扩展将 Apache Spark 应用程序的日志、事件日志和指标发送到 Azure 事件中心。

将日志和指标收集到 Azure 事件中心

步骤 1:创建 Azure 事件中心实例

若要将诊断日志和指标收集到 Azure 事件中心,可使用现有的 Azure 事件中心实例。 如果没有,可创建一个事件中心

步骤 2:创建 Apache Spark 配置文件

创建一个 diagnostic-emitter-azure-event-hub-conf.txt 并将以下内容复制到文件中。 或者,下载 Apache Spark 池配置的示例模板文件

spark.synapse.diagnostic.emitters MyDestination1
spark.synapse.diagnostic.emitter.MyDestination1.type AzureEventHub
spark.synapse.diagnostic.emitter.MyDestination1.categories Log,EventLog,Metrics
spark.synapse.diagnostic.emitter.MyDestination1.secret <connection-string>

在配置文件中填写以下参数:<connection-string>。 有关参数的更多说明,请参阅 Azure EventHub 配置

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

  1. 在 Synapse Studio 中导航到 Apache Spark 池(“管理”->“Apache Spark 池”)
  2. 单击 Apache Spark 池右侧的“…”按钮并选择“Apache Spark 配置”
  3. 单击“上传”并选择“.txt”配置文件,然后单击“应用” 。

“可用配置”

配置 说明
spark.synapse.diagnostic.emitters 必需。 诊断发射器的目标名称(以逗号分隔)。
spark.synapse.diagnostic.emitter.<destination>.type 必需。 内置目标类型。 要启用 Azure 事件中心目标,该值应为 AzureEventHub
spark.synapse.diagnostic.emitter.<destination>.categories 可选。 以逗号分隔的选定日志类别。 可用的值包括 DriverLogExecutorLogEventLogMetrics。 如果未设置,则默认值为类别“所有”。
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 密钥保管库名称。
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 可选。 以逗号分隔的 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

注意

Azure Eventhub 实例连接字符串应始终包含 EntityPath,它是 Azure 事件中心实例的名称。

日志数据示例

下面是 JSON 格式的示例日志记录:

{
    "timestamp": "2021-01-02T12:34:56.789Z",
    "category": "Log|EventLog|Metrics",
    "workspaceName": "<my-workspace-name>",
    "sparkPool": "<spark-pool-name>",
    "livyId": "<livy-session-id>",
    "applicationId": "<application-id>",
    "applicationName": "<application-name>",
    "executorId": "<driver-or-executor-id>",
    "properties": {
        // The message properties of logs, events and metrics.
        "timestamp": "2021-01-02T12:34:56.789Z",
        "message": "Registering signal handler for TERM",
        "logger_name": "org.apache.spark.util.SignalUtils",
        "level": "INFO",
        "thread_name": "main"
        // ...
    }
}

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

Azure Synapse Analytics 工作区支持对工作区启用数据外泄保护。 借助外泄防护功能,日志和指标不能直接发送到目标终结点。 在此场景中,你可为不同的目标终结点创建相应的托管专用终结点创建 IP 防火墙规则