Odesílání protokolů aplikací Azure Databricks do Azure Monitoru
Poznámka:
Tento článek spoléhá na opensourcovou knihovnu hostované na GitHubu na adrese: https://github.com/mspnp/spark-monitoring.
Původní knihovna podporuje Azure Databricks Runtimes 10.x (Spark 3.2.x) a starší.
Databricks přispěl aktualizovanou verzí pro podporu azure Databricks Runtimes 11.0 (Spark 3.3.x) a vyšší ve l4jv2
větvi na adrese: https://github.com/mspnp/spark-monitoring/tree/l4jv2.
Upozorňujeme, že verze 11.0 není zpětně kompatibilní kvůli různým systémům protokolování používaným v modulech Databricks Runtime. Nezapomeňte použít správné sestavení pro databricks Runtime. Knihovna a úložiště GitHub jsou v režimu údržby. Pro další verze nejsou žádné plány a podpora problémů bude maximálně náročná. Pokud máte jakékoli další dotazy týkající se knihovny nebo plánu monitorování a protokolování prostředí Azure Databricks, obraťte se na azure-spark-monitoring-help@databricks.com.
Tento článek ukazuje, jak odesílat protokoly aplikací a metriky z Azure Databricks do pracovního prostoru služby Log Analytics. Používá knihovnu monitorování Azure Databricks, která je k dispozici na GitHubu.
Požadavky
Nakonfigurujte cluster Azure Databricks tak, aby používal knihovnu monitorování, jak je popsáno v souboru readme GitHubu.
Poznámka:
Knihovna monitorování streamuje události na úrovni Apache Sparku a metriky strukturovaného streamování Sparku z vašich úloh do služby Azure Monitor. U těchto událostí a metrik nemusíte provádět žádné změny kódu aplikace.
Odesílání metrik aplikací pomocí Dropwizard
Spark používá konfigurovatelný systém metrik založený na knihovně metrik Dropwizard. Další informace najdete v dokumentaci ke Sparku v tématu Metriky .
Pokud chcete odesílat metriky aplikace z kódu aplikace Azure Databricks do služby Azure Monitor, postupujte takto:
Sestavte soubor JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar, jak je popsáno v souboru readme GitHubu.
Vytvořte v kódu aplikace měřidla nebo čítače dropwizard. Můžete použít třídu definovanou
UserMetricsSystem
v knihovně monitorování. Následující příklad vytvoří čítač s názvemcounter1
.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) } }
Knihovna monitorování obsahuje ukázkovou aplikaci , která ukazuje, jak používat
UserMetricsSystem
třídu.
Odesílání protokolů aplikace pomocí Log4j
Pokud chcete odesílat protokoly aplikací Azure Databricks do Azure Log Analytics pomocí doplňovacího nástroje Log4j v knihovně, postupujte takto:
Sestavte spark-listeners-1.0-SNAPSHOT.jar a soubor JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar, jak je popsáno v souboru readme GitHubu.
Vytvořte konfigurační soubor log4j.properties pro vaši aplikaci. Zahrňte následující vlastnosti konfigurace. Nahraďte název balíčku aplikace a úroveň protokolu tam, kde je uvedeno:
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
Do kódu aplikace zahrňte projekt spark-listeners-loganalytics a naimportujte
com.microsoft.pnp.logging.Log4jconfiguration
ho do kódu aplikace.import com.microsoft.pnp.logging.Log4jConfiguration
Nakonfigurujte Log4j pomocí souboru log4j.properties , který jste vytvořili v kroku 3:
getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") { stream => { Log4jConfiguration.configure(stream) } }
Podle potřeby přidejte do kódu zprávy protokolu Apache Sparku na odpovídající úrovni. Například pomocí
logDebug
metody odešlete zprávu protokolu ladění. Další informace najdete v dokumentaci k Sparku v části Protokolování .logTrace("Trace message") logDebug("Debug message") logInfo("Info message") logWarning("Warning message") logError("Error message")
Poznámka:
Pokud používáte knihovnu a máte poznámkové bloky Apache Spark, všechny protokoly, které Spark generuje během provádění poznámkového bloku, automaticky přejdou do Log Analytics.
V Pythonu platí omezení pro podporu vlastních zpráv protokolování pomocí protokolu Nakonfigurovaného Sparku. Protokoly je možné odesílat pouze z uzlu ovladače, protože uzly exekutoru nemají přístup k virtuálnímu počítači Java z Pythonu.
Spuštění ukázkové aplikace
Knihovna monitorování obsahuje ukázkovou aplikaci , která ukazuje, jak odesílat metriky aplikací i protokoly aplikací do služby Azure Monitor. Spuštění ukázky:
Sestavte projekt spark-jobs v knihovně monitorování, jak je popsáno v souboru readme GitHubu.
Přejděte do pracovního prostoru Databricks a vytvořte novou úlohu, jak je popsáno v tématu Vytvoření a spuštění úloh Azure Databricks.
Na stránce podrobností úlohy vyberte Nastavit SOUBOR JAR.
Nahrajte soubor JAR z
/src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar
souboru .Do třídy Main zadejte
com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob
.Vyberte cluster, který je už nakonfigurovaný tak, aby používal knihovnu monitorování. Viz Konfigurace Azure Databricks pro odesílání metrik do služby Azure Monitor.
Po spuštění úlohy můžete zobrazit protokoly a metriky aplikace v pracovním prostoru služby Log Analytics.
Protokoly aplikací se zobrazují v části SparkLoggingEvent_CL:
SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"
Metriky aplikací se zobrazují v části SparkMetric_CL:
SparkMetric_CL | where name_s contains "rowcounter" | limit 50
Důležité
Po ověření zobrazení metrik zastavte ukázkovou úlohu aplikace.
Další kroky
Nasaďte řídicí panel pro monitorování výkonu, který doprovází tuto knihovnu kódu, abyste mohli řešit problémy s výkonem v produkčních úlohách Azure Databricks.