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:

  1. Sestavte soubor JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar, jak je popsáno v souboru readme GitHubu.

  2. 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ázvem 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)
      }
    }
    

    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:

  1. Sestavte soubory spark-listeners-1.0-SNAPSHOT.jar a spark-listeners-loganalytics-1.0-SNAPSHOT.jar, jak je popsáno v souboru readme GitHubu.

  2. Vytvořte konfigurační soubor log4j.propertiespro 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
    

    Tady najdete ukázkový konfigurační soubor.

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

  1. Sestavte projekt spark-jobs v knihovně monitorování, jak je popsáno v souboru readme GitHubu.

  2. Přejděte do pracovního prostoru Databricks a vytvořte novou úlohu, jak je popsáno tady.

  3. Na stránce podrobností úlohy vyberte Nastavit SOUBOR JAR.

  4. Nahrajte soubor JAR z /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jarsouboru .

  5. Do třídy Main zadejte com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

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