Inviare i log dell'applicazione di Azure Databricks a Monitoraggio di Azure
Nota
Questo articolo si basa su una libreria open source ospitata in GitHub all'indirizzo: https://github.com/mspnp/spark-monitoring.
La libreria originale supporta Azure Databricks Runtimes 10.x (Spark 3.2.x) e versioni precedenti.
Databricks ha apportato una versione aggiornata per supportare Azure Databricks Runtimes 11.0 (Spark 3.3.x) e versioni successive nel ramo l4jv2
all'indirizzo: https://github.com/mspnp/spark-monitoring/tree/l4jv2.
Si noti che la versione 11.0 non è compatibile con le versioni precedenti a causa dei diversi sistemi di registrazione usati in Databricks Runtimes. Assicurarsi di usare la compilazione corretta per Databricks Runtime. La libreria e il repository GitHub sono in modalità manutenzione. Non sono previsti piani per altre versioni e il supporto per i problemi sarà solo un'operazione ottimale. Per eventuali ulteriori domande relative alla libreria o alla roadmap per il monitoraggio e la registrazione degli ambienti Azure Databricks, contattare azure-spark-monitoring-help@databricks.com.
Questo articolo illustra come inviare log dell'applicazione e metriche da Azure Databricks a un'area di lavoro Log Analytics. Usa la libreria di monitoraggio Azure Databricks, disponibile in GitHub.
Prerequisiti
Configurare il cluster di Azure Databricks per l'uso della libreria di monitoraggio, come descritto nel file README di GitHub.
Nota
La libreria di monitoraggio trasmette eventi a livello di Apache Spark e metriche di Spark Structured Streaming dai processi a Monitoraggio di Azure. Non è necessario apportare modifiche al codice dell'applicazione per questi eventi e metriche.
Inviare metriche dell'applicazione con Dropwizard
Spark usa un sistema di metriche configurabile basato sulla libreria di metriche di Dropwizard. Per altre informazioni, vedere Metriche nella documentazione di Spark.
Per inviare le metriche dell'applicazione dal codice dell’applicazione Azure Databricks a Monitoraggio di Azure, seguire questi passaggi:
Compilare il file JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar come descritto nel file README di GitHub.
Creare misuratori o contatori di Dropwizard nel codice dell'applicazione. È possibile usare la classe
UserMetricsSystem
definita nella libreria di monitoraggio. Nell'esempio seguente viene creato un contatore denominatocounter1
.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) } }
La libreria di monitoraggio include un’applicazione di esempio che illustra come usare la
UserMetricsSystem
classe.
Inviare i log dell'applicazione con Log4j
Per inviare i log dell'applicazione Azure Databricks ad Azure Log Analytics usando l’appender Log4j nella libreria, seguire questi passaggi:
Compilare i file JAR spark-listeners-1.0-SNAPSHOT.jar e spark-listeners-loganalytics-1.0-SNAPSHOT.jar come descritto nel fileREADME di GitHub.
Creare un file di configurazione log4j.properties per l’applicazione. Includere le seguenti proprietà di configurazione. Sostituire il nome del pacchetto dell'applicazione e il livello di log dove indicato:
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
È possibile trovare un file di configurazione di esempio qui.
Nel codice dell'applicazione, includere il progetto spark-listeners-loganalytics e importare
com.microsoft.pnp.logging.Log4jconfiguration
nel codice dell'applicazione.import com.microsoft.pnp.logging.Log4jConfiguration
Configurare Log4j usando il file log4j.properties creato nel passaggio 3:
getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") { stream => { Log4jConfiguration.configure(stream) } }
Aggiungere i messaggi di log Apache Spark al livello appropriato nel codice in base alle esigenze. Ad esempio, usare il metodo
logDebug
per inviare un messaggio di log di debug. Per altre informazioni, vedere Log nella documentazione di Spark.logTrace("Trace message") logDebug("Debug message") logInfo("Info message") logWarning("Warning message") logError("Error message")
Nota
Se si usa la libreria e si hanno notebook Apache Spark, tutti i log generati da Spark durante l'esecuzione del notebook passano automaticamente ad Analisi dei log.
Per Python, è prevista una limitazione per supportare i messaggi di registrazione personalizzati usando Log4j configurato da Spark. I log possono essere inviati solo dal nodo driver perché i nodi executor non hanno accesso alla macchina virtuale Java da Python.
Eseguire l'applicazione di esempio
La libreria di monitoraggio include un’applicazione di esempio che illustra come inviare metriche e log dell'applicazione a Monitoraggio di Azure. Per eseguire l'esempio:
Compilare il progetto spark-jobs nella libreria di monitoraggio, come descritto nel file README di GitHub.
Passare all'area di lavoro di Databricks e creare un nuovo processo, come descritto nella sezione Creazione ed esecuzione dei processi di Azure Databricks.
Nella pagina dei dettagli del processo, selezionare Set JAR.
Caricare il file JAR da
/src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar
.Per Classe principale immettere
com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob
.Selezionare un cluster già configurato per l'uso della libreria di monitoraggio. Vedere Configurare Azure Databricks per l'invio delle metriche a Monitoraggio di Azure.
Quando il processo viene eseguito, è possibile visualizzare i log dell'applicazione e le metriche nell'area di lavoro Log Analytics.
I log dell’applicazione vengono visualizzati in SparkLoggingEvent_CL:
SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"
Le metriche dell'applicazione vengono visualizzate in SparkMetric_CL:
SparkMetric_CL | where name_s contains "rowcounter" | limit 50
Importante
Dopo aver verificato che le metriche siano visualizzate, arrestare il processo dell'applicazione di esempio.
Passaggi successivi
Distribuire il dashboard di monitoraggio delle prestazioni che accompagna questa libreria di codice per risolvere i problemi di prestazioni nei carichi di lavoro Azure Databricks di produzione.