使用 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.windows.net/<container-name>/<folder-name>
spark.synapse.diagnostic.emitter.MyDestination1.auth AccessKey
spark.synapse.diagnostic.emitter.MyDestination1.secret <storage-access-key>
在組態檔中填入下列參數:<my-blob-storage>
、、<folder-name>
<container-name>
、 <storage-access-key>
。
如需參數的詳細描述,您可以參考 Azure 儲存體 組態
步驟 3:將 Apache Spark 配置文件上傳至 Synapse Studio,並在 Spark 集區中使用
- 開啟 [Apache Spark 組態] 頁面 (管理 -> Apache Spark 組態)。
- 按兩下 [ 匯 入] 按鈕,將 Apache Spark 配置檔上傳至 Synapse Studio。
- 流覽至 Synapse Studio 中的 Apache Spark 集區(管理 -> Apache Spark 集區)。
- 按兩下 Apache Spark 集區右側的 [...] 按鈕,然後選取 [Apache Spark 組態]。
- 您可以選取您剛才在下拉功能表中上傳的組態檔。
- 選取組態檔之後,按兩下 [ 套用 ]。
步驟 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 |
選擇性。 以逗號分隔的選取記錄類別。 可用的值包括DriverLog 、、EventLog ExecutorLog 、 Metrics 。 如果未設定,則預設值為 所有 類別。 |
spark.synapse.diagnostic.emitter.<destination>.auth |
必要。 AccessKey 用於使用記憶體帳戶 存取金鑰 授權。 SAS 用於 共用存取簽章 授權。 |
spark.synapse.diagnostic.emitter.<destination>.uri |
必要。 目的地 Blob 容器資料夾 URI。 應該符合模式 https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name> 。 |
spark.synapse.diagnostic.emitter.<destination>.secret |
選擇性。 秘密 (AccessKey 或 SAS) 內容。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
如果未 .secret 指定,則為必要。 儲存 秘密的 Azure 金鑰保存庫 名稱(AccessKey 或 SAS)。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
如果 .secret.keyVault 指定 ,則為必要。 儲存秘密的 Azure Key Vault 秘密名稱(AccessKey 或 SAS)。 |
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防火牆規則 。
流覽至 [Synapse Studio > 管理>受控私人端點],按兩下 [新增] 按鈕,選取 [Azure Blob 儲存體] 或 [Azure Data Lake Storage Gen2],然後繼續。
注意
我們可以同時支援 Azure Blob 儲存體 和 Azure Data Lake Storage Gen2。 但是我們無法剖析 abfss:// 格式。 Azure Data Lake Storage Gen2 端點應格式化為 Blob URL:
https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>
在記憶體帳戶名稱中選擇您的 Azure 儲存體 帳戶,然後按下 [建立] 按鈕。
等候幾分鐘佈建私人端點。
在 [網络>私人端點連線] 頁面上,流覽至 Azure 入口網站 中的記憶體帳戶,選取布建的連線並核准。