Envoyer les journaux des applications Azure Databricks à Azure Monitor
Notes
Cet article s’appuie sur une bibliothèque open source hébergée sur GitHub sur : https://github.com/mspnp/spark-monitoring.
La bibliothèque d’origine prend en charge Azure Databricks Runtime 10.x (Spark 3.2.x) et versions antérieures.
Databricks a fourni une version mise à jour pour prendre en charge Azure Databricks Runtime 11.0 (Spark 3.3.x) et versions ultérieures sur la branche l4jv2
à l’adresse : https://github.com/mspnp/spark-monitoring/tree/l4jv2.
Notez que la version 11.0 n’est pas rétrocompatible, en raison des différents systèmes de journalisation utilisés dans les runtimes Databricks. Veillez à utiliser la build appropriée pour votre runtime Databricks. La bibliothèque et le dépôt GitHub sont en mode maintenance. Il n’est pas prévu d’autres versions, et la prise en charge des problèmes sera uniquement fournie sur la base du meilleur effort. Pour toute question supplémentaire sur la bibliothèque ou sur la feuille de route pour le monitoring et la journalisation de vos environnements Azure Databricks, contactez azure-spark-monitoring-help@databricks.com.
Cet article explique comment envoyer des journaux et des métriques d’application depuis Azure Databricks vers un espace de travail Log Analytics. Il utilise la bibliothèque d’analyse Azure Databricks, qui est disponible sur GitHub.
Prérequis
Configurez votre cluster Azure Databricks pour utiliser la bibliothèque d’analyse, comme décrit dans le fichier Lisez-moi GitHub.
Notes
La bibliothèque d’analyse transmet en continu les événements du niveau Apache Spark et les métriques Spark Structured Streaming de vos tâches dans Azure Monitor. Vous n’êtes pas tenu de modifier votre code d’application pour ces événements et métriques.
Envoyer des métriques d’application à l’aide de Dropwizard
Spark utilise un système de métriques configurable basé sur la bibliothèque de métriques Dropwizard. Pour plus d'informations, consultez Métriques dans la documentation Spark.
Pour envoyer des métriques d’application depuis le code d’application Azure Databricks vers Azure Monitor, procédez comme suit :
Générez le fichier JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar, comme décrit dans le fichier Lisez-moi GitHub.
Créez des jauges ou des compteurs Dropwizard dans le code de votre application. Vous pouvez utiliser la classe
UserMetricsSystem
définie dans la bibliothèque d’analyse. L'exemple suivant crée un compteur nommé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) } }
La bibliothèque d’analyse comprend un exemple d’application qui montre comment utiliser la classe
UserMetricsSystem
.
Envoyer des journaux d’application à l’aide de Log4j
Pour envoyer vos journaux d’application Azure Databricks à Azure Log Analytics à l’aide de l'appender Log4j dans la bibliothèque, procédez comme suit :
Générez les fichiers JAR spark-listeners-1.0-SNAPSHOT.jar et spark-listeners-loganalytics-1.0-SNAPSHOT.jar suivant les instructions du fichier Lisez-moi GitHub.
Créez un fichier de configuration log4j.properties pour votre application. Incluez-y les propriétés de configuration suivantes. Remplacez le nom du package d’application et le niveau de journalisation à l’endroit indiqué :
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
Vous pouvez consulter un exemple de fichier de configuration ici.
Dans votre code d’application, incluez le projet spark-listeners-loganalytics et importez
com.microsoft.pnp.logging.Log4jconfiguration
dans le code de votre application.import com.microsoft.pnp.logging.Log4jConfiguration
Configurez Log4j à l’aide du fichier log4j.properties que vous avez créé à l’étape 3 :
getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") { stream => { Log4jConfiguration.configure(stream) } }
Ajoutez les messages de journal Apache Spark au niveau qui convient à votre code, si besoin. Par exemple, utilisez la méthode
logDebug
pour envoyer un message de journal de débogage. Pour plus d'informations, consultez Journalisation dans la documentation Spark.logTrace("Trace message") logDebug("Debug message") logInfo("Info message") logWarning("Warning message") logError("Error message")
Notes
Si vous utilisez la bibliothèque et que vous disposez de notebooks Apache Spark, tous les journaux générés par Spark pendant l’exécution du notebook sont automatiquement destinés à Log Analytics.
Python est limité à la prise en charge des messages de journalisation personnalisés à l’aide du journal Log4j configuré par Spark. Les journaux ne peuvent être envoyés qu’à partir du nœud de pilote, car les nœuds exécuteurs n’ont pas accès à la machine virtuelle Java à partir de Python.
Exécuter l’exemple d’application
La bibliothèque d’analyse comprend un exemple d’application qui montre comment envoyer des métriques et des journaux d’application à Azure Monitor. Pour exécuter l’exemple :
Générez le projet spark-jobs dans la bibliothèque d’analyse, comme décrit dans le fichier Lisez-moi GitHub.
Accédez à votre espace de travail Databricks et créez un travail, comme décrit dans Créer et exécuter des travaux Azure Databricks.
Dans la page Détails de la tâche, sélectionnez Définir JAR.
Téléchargez le fichier JAR depuis
/src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar
.Pour Classe principale, entrez
com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob
.Sélectionnez un cluster déjà configuré pour utiliser la bibliothèque d’analyse. Consultez Configurer Azure Databricks pour envoyer des métriques à Azure Monitor.
Lorsque la tâche s’exécute, vous pouvez afficher les journaux et les métriques d’application dans votre espace de travail Log Analytics.
Les journaux d’application apparaissent sous SparkLoggingEvent_CL :
SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"
Les métriques d’application apparaissent sous SparkMetric_CL :
SparkMetric_CL | where name_s contains "rowcounter" | limit 50
Important
Après avoir vérifié que les métriques s’affichent, arrêtez l’exemple de tâche d’application.
Étapes suivantes
Déployez le tableau de bord d’analyse des performances qui accompagne cette bibliothèque de code afin de résoudre les problèmes de performances liés à vos charges de travail de production Azure Databricks.