共用方式為


使用 Azure Log Analytics (預覽版) 監視 Apache Spark 應用程式

Fabric Apache Spark 診斷發出器擴充功能是一個程式庫,可讓 Apache Spark 應用程式將記錄、事件記錄和計量發出至多個目的地,包括 Azure 記錄分析、Azure 儲存體和 Azure 事件中樞。

在本教學課程中,您將了解如何在 Fabric 中設定及發出 Spark 記錄和計量至記錄分析。 設定完成後,您就能在 Log analytics 工作區中收集並分析 Apache Spark 應用程式計量和記錄。

設定工作區資訊

遵循下列步驟來設定 Fabric 中的必要資訊。

步驟 1:建立 Log Analytics 工作區

請參閱下列其中一項資源來建立此工作區:

步驟 2:使用 Apache Spark 設定建立 Fabric 環境工藝品

若要設定 Spark,請建立 Fabric 環境工藝品,然後選擇下列其中一個選項:

選項 1:使用 Log Analytics 工作區 ID 和金鑰進行設定

  1. 在 Fabric 中建立 Fabric 環境工藝品

  2. 將具有適當值的下列 Spark 屬性 新增至環境成品,或選取 功能區中的 [從.yml 新增],以下載 已包含必要屬性的範例 yaml 檔案

    • <LOG_ANALYTICS_WORKSPACE_ID>:Log Analytics 工作區識別碼。
    • <LOG_ANALYTICS_WORKSPACE_KEY>:Log Analytics 金鑰。 如要尋找此項目,請在 Azure 入口網站中,移至 [Azure Log Analytics 工作區]>[代理程式]>[主要金鑰]
    spark.synapse.diagnostic.emitters: LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    或者,若要套用與 Azure Synapse 相同的設定,請使用下列屬性,或在功能區中選取 [從.yml 新增],以下載 範例 yaml 檔案

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    
  3. 儲存並發佈變更。

選項 2:使用 Azure Key Vault 設定

注意

已知問題:暫時無法使用選項 2 啟動工作階段。 目前,將秘密儲存在 金鑰保存庫 會防止 Spark 工作階段啟動。 請使用選項 1 中所述的方法來設定它的優先順序。

您必須將「讀取密碼」權限授與給要提交 Apache Spark 應用程式的使用者。 如需詳細資訊,請參閱透過 Azure 角色型存取控制,提供 Key Vault 金鑰、憑證和密碼的存取權 (預覽)

如要設定 Azure Key Vault 來儲存工作區金鑰,請遵循下列步驟:

  1. 在 Azure 入口網站中,前往您的金鑰保存庫。

  2. 在金鑰保存庫的設定頁面中,選取 [祕密],然後選取 [產生/匯入]

  3. 在 [建立祕密] 畫面上,輸入下列值:

    • 名稱:輸入祕密的名稱。 若為預設值,請輸入 SparkLogAnalyticsSecret
    • [值]:輸入密碼的 <LOG_ANALYTICS_WORKSPACE_KEY>
    • 將其他值保留為其預設值。 然後選取建立
  4. 在 Fabric 中建立 Fabric 環境工藝品

  5. 將具有對應值的下列 Spark 屬性新增至環境成品,或在環境成品的功能區上選取 [從.yml新增],以下載包含下列 Spark 屬性的範例 yaml 檔案

    • <LOG_ANALYTICS_WORKSPACE_ID>:Log Analytics 工作區識別碼。
    • <AZURE_KEY_VAULT_NAME>:您設定的金鑰保存庫名稱。
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME>(選擇性):適用於工作區金鑰的金鑰保存庫密碼名稱。 預設值為 SparkLogAnalyticsSecret
    // Spark properties for LA
    spark.synapse.diagnostic.emitters LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    或者,若要套用與 Azure Synapse 相同的設定,請使用下列屬性,或在功能區中選取 [從.yml新增],以下載 範例 yaml 檔案

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.keyVault.name: <AZURE_KEY_VAULT_NAME>
    spark.synapse.logAnalytics.keyVault.key.secret: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    注意

    您也可以將工作區識別碼儲存在 Key Vault 中。 將祕密名稱設定為 SparkLogAnalyticsWorkspaceId,或使用組態 spark.synapse.logAnalytics.keyVault.key.workspaceId 來指定工作區 ID 祕密名稱。

    如需 Apache Spark 組態的清單,請參閱可用的 Apache Spark 組態

  6. 儲存並發佈變更。

步驟 3:將環境工藝品附加至筆記本或 Spark 工作定義,或將其設定為工作區預設值

若要將環境附加至 Notebooks 或 Spark 工作定義:

  1. 在 Fabric 中瀏覽至您的筆記本或 Spark 工作定義。
  2. 選取主索引標籤上的 環境] 功能表,然後選取已設定的環境。
  3. 啟動 Spark 工作階段之後,將會套用設定。

若要將環境設定為工作區預設值:

  1. 在 Fabric 中,瀏覽至 [工作區設定]。
  2. 在工作區設定中尋找 Spark 設定 (工作區設定 - >資料工程/科學 -> Spark 設定)
  3. 選取 [環境] 索引標籤,然後選擇已設定診斷 Spark 屬性的環境,然後按下 [儲存]

注意

只有工作區管理員可以管理設定。 這些值會套用至附加至工作區設定的筆記本和 Spark 工作定義。 如需詳細資料,請參閱 Fabric 工作區設定

提交 Apache Spark 的應用程式,並檢視記錄和計量

若要提交 Apache Spark 應用程式:

  1. 提交 Apache Spark 應用程式,其中包含在上一個步驟中設定的相關聯環境。 您可以使用下列任何一種方式來執行此動作:

    • 在 Fabric 中執行筆記本。
    • 透過 Apache Spark 工作定義提交 Apache Spark 批次工作。
    • 在管線中執行 Spark 活動。
  2. 移至指定的 Log Analytics 工作區,然後在 Apache Spark 應用程式開始執行時,檢視應用程式計量和記錄。

寫入自訂應用程式記錄檔

您可以使用 Apache Log4j 程式庫來撰寫自訂記錄。 以下是 Scala 和 PySpark 的範例:

Scala 範例:

%%spark
val logger = org.apache.log4j.LogManager.getLogger("com.contoso.LoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
//log exception
try {
      1/0
 } catch {
      case e:Exception =>logger.warn("Exception", e)
}
// run job for task level metrics
val data = sc.parallelize(Seq(1,2,3,4)).toDF().count()

PySpark 範例:

%%pyspark
logger = sc._jvm.org.apache.log4j.LogManager.getLogger("com.contoso.PythonLoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")

使用 Kusto 查詢資料

若要查詢 Apache Spark 事件:

SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

若要查詢 Spark 應用程式驅動程式和執行程式記錄:

SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

若要查詢 Apache Spark 計量:

SparkMetrics_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc

資料限制

Fabric 會透過 HTTP 資料收集器 API 將記錄資料傳送至 Azure 監視器。 張貼至 Azure 監視器資料收集 API 的資料受特定條件所限制

  • 可張貼至 Azure 監視器資料收集器 API 的每個張貼項目大小上限為 30 MB。 這是單一張貼項目的大小限制。 如果來自單一張貼項目的資料超出 30 MB,您應該將資料分割成較小區塊,然後同時傳送這些區塊。
  • 欄位值的上限為 32 KB。 如果欄位值大於 32 KB,資料會被截斷。
  • 指定類型的欄位建議數目上限為 50。 對於使用性和搜尋體驗觀點而言,這是一個實際的限制。
  • Log Analytics 工作區中的資料表最多支援 500 個資料行。
  • 資料行名稱上限為 45 個字元。

建立及管理警示

使用者可查詢以設定的頻率評估計量和記錄,並根據結果引發警示。 如需詳細資訊,請參閱使用 Azure 監視器建立、檢視及管理記錄警示

具有受控虛擬網路的 Fabric 工作區

Azure Log Analytics 目前無法選取為受控虛擬網路中 Spark 記錄和計量排放的目的地,因為受控私人端點不支援 Log Analytics 作為資料來源。

下一步