使用 Azure 存储帐户收集 Apache Spark 应用程序日志和指标

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

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

将日志和指标收集到存储帐户

步骤 1:创建存储帐户

若要将诊断日志和指标收集到存储帐户,可以使用现有的 Azure 存储帐户。 如果没有帐户,可以创建一个 Azure Blob 存储帐户,或创建一个用于 Azure Data Lake Storage Gen2 的存储帐户

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

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

spark.synapse.diagnostic.emitters MyDestination1
spark.synapse.diagnostic.emitter.MyDestination1.type AzureStorage
spark.synapse.diagnostic.emitter.MyDestination1.categories Log,EventLog,Metrics
spark.synapse.diagnostic.emitter.MyDestination1.uri https://<my-blob-storage>.blob.core.chinacloudapi.cn/<container-name>/<folder-name>
spark.synapse.diagnostic.emitter.MyDestination1.auth AccessKey
spark.synapse.diagnostic.emitter.MyDestination1.secret <storage-access-key>

在配置文件中填写以下参数:<my-blob-storage><container-name><folder-name><storage-access-key>。 有关参数的更多说明,可参阅 Azure 存储配置

步骤 3:将 Apache Spark 配置文件上传到 Synapse Studio 并在 Spark 池中使用它

  1. 打开 Apache Spark 配置页(“管理”->“Apache Spark 配置”)。
  2. 单击“导入”按钮,将 Apache Spark 配置文件上传到 Synapse Studio。
  3. 在 Synapse Studio 中导航到 Apache Spark 池(“管理”->“Apache Spark 池”)。
  4. 单击 Apache Spark 池右侧的“…”按钮并选择“Apache Spark 配置”。
  5. 可以在下拉菜单中选择刚上传的配置文件。
  6. 选择配置文件后,单击“应用”。

步骤 4:查看 Azure 存储帐户中的日志文件

将作业提交到配置的 Apache Spark 池后,你应该能够在目标存储帐户中查看日志和指标文件。 <workspaceName>.<sparkPoolName>.<livySessionId> 根据不同的应用程序,将日志置于相应的路径中。 所有日志文件都将采用 JSON 行格式(也称为换行符分隔的 JSON,简称 ndjson),非常便于数据处理。

“可用配置”

配置 说明
spark.synapse.diagnostic.emitters 必需。 诊断发射器以逗号分隔的目标名称。 例如: MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type 必需。 内置目标类型。 若要启用 Azure 存储目标,此字段中需要包含 AzureStorage
spark.synapse.diagnostic.emitter.<destination>.categories 可选。 以逗号分隔的选定日志类别。 可用的值包括 DriverLogExecutorLogEventLogMetrics。 如果未设置,则默认值为“所有”类别。
spark.synapse.diagnostic.emitter.<destination>.auth 必需。 AccessKey 表示使用存储帐户访问密钥授权。 SAS 表示共享访问签名授权。
spark.synapse.diagnostic.emitter.<destination>.uri 必需。 目标 Blob 容器文件夹 URI。 应匹配模式 https://<my-blob-storage>.blob.core.chinacloudapi.cn/<container-name>/<folder-name>
spark.synapse.diagnostic.emitter.<destination>.secret 可选。 机密(AccessKey 或 SAS)内容。
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault 如果未指定 .secret,则是必需的。 存储机密(AccessKey 或 SAS)的 Azure Key Vault 名称。
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName 如果指定了 .secret.keyVault,则该参数是必需的。 存储机密(AccessKey 或 SAS)的 Azure Key Vault 机密名称。
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

日志数据示例

下面是 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 防火墙规则

  1. 导航到“Synapse Studio”>“管理”>“托管专用终结点”,单击“新建”按钮,选择“Azure Blob 存储”或“Azure Data Lake Storage Gen2”,然后选择“继续”。

    创建托管专用终结点 1

    注意

    我们可以同时支持 Azure Blob 存储和 Azure Data Lake Storage Gen2。 但是,我们无法分析“abfss://”格式。 Azure Data Lake Storage Gen2 终结点的格式应设置为 Blob URL:

    https://<my-blob-storage>.blob.core.chinacloudapi.cn/<container-name>/<folder-name> 
    
  2. 在“存储帐户名称”中选择你的 Azure 存储帐户,然后单击“创建”按钮 。

    创建托管专用终结点 2

  3. 预配专用终结点期间请耐心等待。

  4. 在 Azure 门户中导航到你的存储帐户,在“网络”>“专用终结点连接”页面上,选择预配的连接,然后选择“批准”。