Dela via


Skicka Azure Databricks-programloggar till Azure Monitor

Kommentar

Den här artikeln förlitar sig på ett öppen källkod-bibliotek som finns på GitHub på: https://github.com/mspnp/spark-monitoring.

Det ursprungliga biblioteket stöder Azure Databricks Runtimes 10.x (Spark 3.2.x) och tidigare.

Databricks har bidragit med en uppdaterad version för att stödja Azure Databricks Runtimes 11.0 (Spark 3.3.x) och senare på grenen l4jv2 på: https://github.com/mspnp/spark-monitoring/tree/l4jv2.

Observera att versionen 11.0 inte är bakåtkompatibel på grund av de olika loggningssystem som används i Databricks Runtimes. Se till att använda rätt version för Databricks Runtime. Biblioteket och GitHub-lagringsplatsen är i underhållsläge. Det finns inga planer på ytterligare versioner, och problemstöd kommer endast att vara bäst. Om du vill ha ytterligare frågor om biblioteket eller översikten för övervakning och loggning av dina Azure Databricks-miljöer kan du kontakta azure-spark-monitoring-help@databricks.com.

Den här artikeln visar hur du skickar programloggar och mått från Azure Databricks till en Log Analytics-arbetsyta. Den använder Övervakningsbiblioteket för Azure Databricks, som är tillgängligt på GitHub.

Förutsättningar

Konfigurera ditt Azure Databricks-kluster så att det använder övervakningsbiblioteket enligt beskrivningen i GitHub-läsningen.

Kommentar

Övervakningsbiblioteket strömmar händelser på Apache Spark-nivå och Spark Structured Streaming-mått från dina jobb till Azure Monitor. Du behöver inte göra några ändringar i programkoden för dessa händelser och mått.

Skicka programmått med Dropwizard

Spark använder ett konfigurerbart måttsystem baserat på Dropwizard Metrics-biblioteket. Mer information finns i Mått i Spark-dokumentationen.

Följ dessa steg för att skicka programmått från Azure Databricks-programkod till Azure Monitor:

  1. Skapa spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR-filen enligt beskrivningen i GitHub-läsningen.

  2. Skapa Dropwizard-mätare eller räknare i programkoden. Du kan använda klassen UserMetricsSystem som definierats i övervakningsbiblioteket. I följande exempel skapas en räknare med namnet 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)
      }
    }
    

    Övervakningsbiblioteket innehåller ett exempelprogram som visar hur du UserMetricsSystem använder klassen.

Skicka programloggar med Log4j

Följ dessa steg för att skicka dina Azure Databricks-programloggar till Azure Log Analytics med hjälp av Log4j-tillägget i biblioteket:

  1. Skapa spark-listeners-1.0-SNAPSHOT.jar- och spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR-filen enligt beskrivningen i GitHub-läsningen.

  2. Skapa en log4j.properties-konfigurationsfil för ditt program. Inkludera följande konfigurationsegenskaper. Ersätt programpaketets namn och loggnivå där det anges:

    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
    

    Du hittar en exempelkonfigurationsfil här.

  3. I programkoden inkluderar du projektet spark-listeners-loganalytics och importerar com.microsoft.pnp.logging.Log4jconfiguration till programkoden.

    import com.microsoft.pnp.logging.Log4jConfiguration
    
  4. Konfigurera Log4j med hjälp av filen log4j.properties som du skapade i steg 3:

    getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") {
          stream => {
            Log4jConfiguration.configure(stream)
          }
    }
    
  5. Lägg till Apache Spark-loggmeddelanden på lämplig nivå i koden efter behov. Använd logDebug till exempel metoden för att skicka ett felsökningsloggmeddelande. Mer information finns i Loggning i Spark-dokumentationen.

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

Kommentar

Om du använder biblioteket och har Apache Spark Notebooks går alla loggar som Spark genererar under körningen för notebook-filen automatiskt till Log Analytics.

Det finns en begränsning för Python att stödja anpassade loggningsmeddelanden med hjälp av Den Spark-konfigurerade Log4j. Loggar kan bara skickas från drivrutinsnoden eftersom körnoder inte har åtkomst till den virtuella Java-datorn från Python.

Köra exempelprogrammet

Övervakningsbiblioteket innehåller ett exempelprogram som visar hur du skickar både programmått och programloggar till Azure Monitor. Så här kör du exemplet:

  1. Skapa spark-jobs-projektet i övervakningsbiblioteket enligt beskrivningen i GitHub-läsningen.

  2. Gå till din Databricks-arbetsyta och skapa ett nytt jobb enligt beskrivningen i Skapa och kör Azure Databricks-jobb.

  3. På sidan jobbinformation väljer du Ange JAR.

  4. Ladda upp JAR-filen från /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar.

  5. För Main-klass anger du com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

  6. Välj ett kluster som redan har konfigurerats för att använda övervakningsbiblioteket. Se Konfigurera Azure Databricks för att skicka mått till Azure Monitor.

När jobbet körs kan du visa programloggarna och måtten på Log Analytics-arbetsytan.

Programloggar visas under SparkLoggingEvent_CL:

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

Programmått visas under SparkMetric_CL:

SparkMetric_CL | where name_s contains "rowcounter" | limit 50

Viktigt!

När du har kontrollerat att måtten visas stoppar du exempelprogrammets jobb.

Nästa steg

Distribuera instrumentpanelen för prestandaövervakning som medföljer det här kodbiblioteket för att felsöka prestandaproblem i dina Azure Databricks-arbetsbelastningar för produktion.