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 :

  1. Générez le fichier JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar, comme décrit dans le fichier Lisez-moi GitHub.

  2. 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 :

  1. 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.

  2. Créez un fichier de configurationlog4j.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.

  3. 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
    
  4. 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)
          }
    }
    
  5. 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 :

  1. Générez le projet spark-jobs dans la bibliothèque d’analyse, comme décrit dans le fichier Lisez-moi GitHub.

  2. Accédez à votre espace de travail Databricks et créez une nouvelle tâche, comme décrit ici.

  3. Dans la page Détails de la tâche, sélectionnez Définir JAR.

  4. Téléchargez le fichier JAR depuis /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar.

  5. Pour Classe principale, entrez com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

  6. 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.