共用方式為


使用 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 事件中樞 組態

步驟 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 選擇性。 以逗號分隔的選取記錄類別。 可用的值包括DriverLog、、EventLogExecutorLogMetrics。 如果未設定,則預設值為 所有 類別。
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 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

注意

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防火牆規則