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:
Skapa spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR-filen enligt beskrivningen i GitHub-läsningen.
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 namnetcounter1
.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:
Skapa spark-listeners-1.0-SNAPSHOT.jar- och spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR-filen enligt beskrivningen i GitHub-läsningen.
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.
I programkoden inkluderar du projektet spark-listeners-loganalytics och importerar
com.microsoft.pnp.logging.Log4jconfiguration
till programkoden.import com.microsoft.pnp.logging.Log4jConfiguration
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) } }
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:
Skapa spark-jobs-projektet i övervakningsbiblioteket enligt beskrivningen i GitHub-läsningen.
Gå till din Databricks-arbetsyta och skapa ett nytt jobb enligt beskrivningen i Skapa och kör Azure Databricks-jobb.
På sidan jobbinformation väljer du Ange JAR.
Ladda upp JAR-filen från
/src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar
.För Main-klass anger du
com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob
.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.