使用 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 集區
- 流覽至 Synapse Studio 中的 Apache Spark 集區 (管理 -> Apache Spark 集區)
- 按兩下 Apache Spark 集區右側的 [...] 按鈕,然後選取 [Apache Spark 組態]
- 按兩下 [上傳 ],然後選擇 [.txt] 組態檔,然後按兩下 [ 套用]。
可用設定
組態 | 描述 |
---|---|
spark.synapse.diagnostic.emitters |
必要。 診斷發出器的逗號分隔目的地名稱。 |
spark.synapse.diagnostic.emitter.<destination>.type |
必要。 內建目的地類型。 若要開啟 Azure 事件中樞 目的地,此值應該是 AzureEventHub 。 |
spark.synapse.diagnostic.emitter.<destination>.categories |
選擇性。 以逗號分隔的選取記錄類別。 可用的值包括DriverLog 、、EventLog ExecutorLog 、 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 金鑰保存庫名稱(連接字串)。 |
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防火牆規則 。