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 contribuito a una versione aggiornata per supportare Azure Databricks Runtimes 11.0 (Spark 3.3.x) e versioni successive nel l4jv2 ramo in: 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 nei runtime di Databricks. Assicurarsi di usare la compilazione corretta per il runtime di Databricks. La libreria e il repository GitHub sono in modalità di manutenzione. Non sono previsti piani per altre versioni e il supporto per i problemi sarà solo un'operazione ottimale. Per eventuali altre 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:

  1. Compilare il file JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar come descritto nel file README di GitHub.

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

  1. Compilare i file JAR spark-listeners-1.0-SNAPSHOT.jar e spark-listeners-loganalytics-1.0-SNAPSHOT.jar come descritto nel fileREADME di GitHub.

  2. Creare un file di configurazionelog4j.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.

  3. 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
    
  4. 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)
          }
    }
    
  5. 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 a Log Analytics.

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:

  1. Compilare il progetto spark-jobs nella libreria di monitoraggio, come descritto nel file README di GitHub.

  2. Passare all'area di lavoro Databricks e creare un nuovo processo, come descritto qui.

  3. Nella pagina dei dettagli del processo, selezionare Set JAR.

  4. Caricare il file JAR da /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar.

  5. Per Classe principale immettere com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

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