共用方式為


傳送 Azure Databricks 應用程式記錄檔至 Azure 監視器

注意

本文依賴裝載於 GitHub 上的 開放原始碼 連結庫:https://github.com/mspnp/spark-monitoring

原始連結庫支援 Azure Databricks Runtimes 10.x(Spark 3.2.x) 和更早版本。

Databricks 已提供更新版本,以支援分支上的 l4jv2 Azure Databricks Runtimes 11.0 (Spark 3.3.x) 和更新版本: https://github.com/mspnp/spark-monitoring/tree/l4jv2

請注意,由於 Databricks Runtimes 中使用的不同記錄系統,11.0 版本無法回溯相容。 請務必針對 Databricks Runtime 使用正確的組建。 連結庫和 GitHub 存放庫處於維護模式。 沒有進一步發行的計劃,而問題支援將僅盡最大努力。 如需連結庫或 Azure Databricks 環境監視和記錄藍圖的任何其他問題,請連絡 azure-spark-monitoring-help@databricks.com

本文說明如何將應用程式記錄和計量從 Azure Databricks 傳送至 Log Analytics 工作區。 它會使用 GitHub 上提供的 Azure Databricks 監視連結庫

必要條件

設定 Azure Databricks 叢集以使用監視連結庫,如 GitHub 自述檔中所述

注意

監視連結庫會將 Apache Spark 層級事件和 Spark 結構化串流計量從您的作業串流至 Azure 監視器。 您不需要對這些事件和計量對應用程式程式代碼進行任何變更。

使用Dropwizard傳送應用程式計量

Spark 會根據Dropwizard計量連結庫使用可設定的計量系統。 如需詳細資訊,請參閱 Spark檔中的 計量。

若要將應用程式計量從 Azure Databricks 應用程式程式代碼傳送至 Azure 監視器,請遵循下列步驟:

  1. 如 GitHub 自述檔中所述,建置spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR 檔案。

  2. 在應用程式程式代碼中建立Dropwizard 量測計或計數器 。 您可以使用 UserMetricsSystem 監視連結庫中定義的 類別。 下列範例會建立名為 counter1的計數器。

    import org.apache.spark.metrics.UserMetricsSystems
    import org.apache.spark.sql.SparkSession
    
    object StreamingQueryListenerSampleJob  {
    
      private final val METRICS_NAMESPACE = "samplejob"
      private final val COUNTER_NAME = "counter1"
    
      def main(args: Array[String]): Unit = {
    
        val spark = SparkSession
          .builder
          .getOrCreate
    
        val driverMetricsSystem = UserMetricsSystems
            .getMetricSystem(METRICS_NAMESPACE, builder => {
              builder.registerCounter(COUNTER_NAME)
            })
    
        driverMetricsSystem.counter(COUNTER_NAME).inc(5)
      }
    }
    

    監視連結庫包含示範如何使用 類別的UserMetricsSystem範例應用程式

使用Log4j傳送應用程式記錄

若要使用連結庫中的 Log4j附加程式 ,將 Azure Databricks 應用程式記錄傳送至 Azure Log Analytics,請遵循下列步驟:

  1. 如 GitHub 自述檔所述,建置spark-listeners-1.0-SNAPSHOT.jarspark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR 檔案。

  2. 為您的應用程式建立 log4j.properties組態檔 。 包含下列組態屬性。 取代您的應用程式套件名稱和記錄層級,其中指出:

    log4j.appender.A1=com.microsoft.pnp.logging.loganalytics.LogAnalyticsAppender
    log4j.appender.A1.layout=com.microsoft.pnp.logging.JSONLayout
    log4j.appender.A1.layout.LocationInfo=false
    log4j.additivity.<your application package name>=false
    log4j.logger.<your application package name>=<log level>, A1
    

    您可以在這裡找到範例組態檔

  3. 在您的應用程式程式代碼中 ,包含spark-listeners-loganalytics 專案,並匯 com.microsoft.pnp.logging.Log4jconfiguration 入至您的應用程式程序代碼。

    import com.microsoft.pnp.logging.Log4jConfiguration
    
  4. 使用您在步驟 3 中建立的 log4j.properties 檔案設定 Log4j:

    getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") {
          stream => {
            Log4jConfiguration.configure(stream)
          }
    }
    
  5. 視需要在程式代碼的適當層級新增Apache Spark記錄訊息。 例如,使用 logDebug 方法來傳送偵錯記錄訊息。 如需詳細資訊,請參閱 Spark檔中的記錄

    logTrace("Trace message")
    logDebug("Debug message")
    logInfo("Info message")
    logWarning("Warning message")
    logError("Error message")
    

注意

如果您使用連結庫,而且您有 Apache Spark Notebook,Spark 在執行期間產生的任何記錄都會自動移至 Log Analytics。

使用 Spark 設定的 Log4j 支援自訂記錄訊息的 Python 有一項限制。 記錄只能從驅動程式節點傳送,因為執行程式節點無法從 Python 存取 Java 虛擬機。

執行範例應用程式

監視連結庫包含範例 應用程式 ,示範如何將應用程式計量和應用程式記錄傳送至 Azure 監視器。 若要執行範例:

  1. 監視連結庫中建置spark-jobs專案,如 GitHub 自述檔中所述

  2. 流覽至 Databricks 工作區並建立新的作業,如這裡所述

  3. 在 [作業詳細數據] 頁面中,選取 [ 設定 JAR]。

  4. /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar上傳 JAR 檔案。

  5. 針對 Main 類別, 輸入 com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob

  6. 選取已設定為使用監視連結庫的叢集。 請參閱 設定 Azure Databricks 將計量傳送至 Azure 監視器

當作業執行時,您可以在Log Analytics工作區中檢視應用程式記錄和計量。

應用程式記錄會出現在 [SparkLoggingEvent_CL] 底下:

SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"

應用程式計量會出現在 [SparkMetric_CL] 底下:

SparkMetric_CL | where name_s contains "rowcounter" | limit 50

重要

確認計量出現之後,請停止範例應用程式作業。

下一步

部署此程式代碼連結庫隨附的效能監視儀錶板,以針對生產 Azure Databricks 工作負載中的效能問題進行疑難解答。