Wysyłanie dzienników aplikacji usługi Azure Databricks do usługi Azure Monitor

Uwaga

Ten artykuł opiera się na bibliotece open source hostowanej w witrynie GitHub pod adresem : https://github.com/mspnp/spark-monitoring.

Oryginalna biblioteka obsługuje środowiska Azure Databricks Runtimes 10.x (Spark 3.2.x) i starsze.

Usługa Databricks udostępniła zaktualizowaną wersję do obsługi środowiska Azure Databricks Runtimes 11.0 (Spark 3.3.x) i nowszego w l4jv2 gałęzi pod adresem : https://github.com/mspnp/spark-monitoring/tree/l4jv2.

Należy pamiętać, że wersja 11.0 nie jest zgodna z poprzednimi wersjami ze względu na różne systemy rejestrowania używane w środowiskach Databricks Runtime. Pamiętaj, aby użyć poprawnej kompilacji środowiska Databricks Runtime. Biblioteka i repozytorium GitHub są w trybie konserwacji. Nie ma planów dalszych wydań, a pomoc techniczna dotycząca problemów będzie dostępna tylko w najlepszym celu. Aby uzyskać dodatkowe pytania dotyczące biblioteki lub planu monitorowania i rejestrowania środowisk usługi Azure Databricks, skontaktuj się z .azure-spark-monitoring-help@databricks.com

W tym artykule pokazano, jak wysyłać dzienniki aplikacji i metryki z usługi Azure Databricks do obszaru roboczego usługi Log Analytics. Korzysta z biblioteki monitorowania usługi Azure Databricks, która jest dostępna w usłudze GitHub.

Wymagania wstępne

Skonfiguruj klaster usługi Azure Databricks do korzystania z biblioteki monitorowania zgodnie z opisem w pliku readme usługi GitHub.

Uwaga

Biblioteka monitorowania przesyła strumieniowo zdarzenia na poziomie platformy Apache Spark i metryki przesyłania strumieniowego ze strukturą platformy Spark z zadań do usługi Azure Monitor. Nie musisz wprowadzać żadnych zmian w kodzie aplikacji dla tych zdarzeń i metryk.

Wysyłanie metryk aplikacji przy użyciu narzędzia Dropwizard

Platforma Spark używa konfigurowalnego systemu metryk na podstawie biblioteki metryk Dropwizard. Aby uzyskać więcej informacji, zobacz Metryki w dokumentacji platformy Spark.

Aby wysłać metryki aplikacji z kodu aplikacji usługi Azure Databricks do usługi Azure Monitor, wykonaj następujące kroki:

  1. Skompiluj plik JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar zgodnie z opisem w pliku readme usługi GitHub.

  2. Utwórz mierniki lub liczniki dropwizard w kodzie aplikacji. Możesz użyć UserMetricsSystem klasy zdefiniowanej w bibliotece monitorowania. Poniższy przykład tworzy licznik o nazwie 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)
      }
    }
    

    Biblioteka monitorowania zawiera przykładową aplikację, która pokazuje, jak używać UserMetricsSystem klasy.

Wysyłanie dzienników aplikacji przy użyciu narzędzia Log4j

Aby wysłać dzienniki aplikacji usługi Azure Databricks do usługi Azure Log Analytics przy użyciu dołączania Log4j w bibliotece, wykonaj następujące kroki:

  1. Skompiluj plik SPARK-listeners-1.0-SNAPSHOT.jar i spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR zgodnie z opisem w pliku readme usługi GitHub.

  2. Utwórz plik konfiguracji log4j.propertiesdla aplikacji. Uwzględnij następujące właściwości konfiguracji. Zastąp nazwę pakietu aplikacji i poziom dziennika, w którym wskazano:

    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
    

    Przykładowy plik konfiguracji można znaleźć tutaj.

  3. W kodzie aplikacji dołącz projekt spark-listeners-loganalytics i zaimportuj com.microsoft.pnp.logging.Log4jconfiguration go do kodu aplikacji.

    import com.microsoft.pnp.logging.Log4jConfiguration
    
  4. Skonfiguruj dziennik4j przy użyciu pliku log4j.properties utworzonego w kroku 3:

    getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") {
          stream => {
            Log4jConfiguration.configure(stream)
          }
    }
    
  5. Dodaj komunikaty dziennika platformy Apache Spark na odpowiednim poziomie w kodzie zgodnie z potrzebami. Na przykład użyj logDebug metody , aby wysłać komunikat dziennika debugowania. Aby uzyskać więcej informacji, zobacz Rejestrowanie w dokumentacji platformy Spark.

    logTrace("Trace message")
    logDebug("Debug message")
    logInfo("Info message")
    logWarning("Warning message")
    logError("Error message")
    

Uwaga

Jeśli używasz biblioteki i masz notesy platformy Apache Spark, wszystkie dzienniki generowane przez platformę Spark podczas wykonywania notesu są automatycznie przenoszone do usługi Log Analytics.

Istnieje ograniczenie dotyczące języka Python do obsługi niestandardowych komunikatów rejestrowania przy użyciu skonfigurowanej przez platformę Spark log4j. Dzienniki można wysyłać tylko z węzła sterownika, ponieważ węzły funkcji wykonawczej nie mają dostępu do maszyny wirtualnej Java z poziomu języka Python.

Uruchamianie przykładowej aplikacji

Biblioteka monitorowania zawiera przykładową aplikację, która pokazuje, jak wysyłać metryki aplikacji i dzienniki aplikacji do usługi Azure Monitor. Aby uruchomić przykład:

  1. Skompiluj projekt zadań spark w bibliotece monitorowania zgodnie z opisem w pliku readme usługi GitHub.

  2. Przejdź do obszaru roboczego usługi Databricks i utwórz nowe zadanie zgodnie z opisem tutaj.

  3. Na stronie szczegółów zadania wybierz pozycję Ustaw plik JAR.

  4. Przekaż plik JAR z /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jarpliku .

  5. W polu Klasa Main wprowadź wartość com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

  6. Wybierz klaster, który jest już skonfigurowany do korzystania z biblioteki monitorowania. Zobacz Konfigurowanie usługi Azure Databricks do wysyłania metryk do usługi Azure Monitor.

Po uruchomieniu zadania można wyświetlić dzienniki aplikacji i metryki w obszarze roboczym usługi Log Analytics.

Dzienniki aplikacji są wyświetlane w obszarze SparkLoggingEvent_CL:

SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"

Metryki aplikacji są wyświetlane w obszarze SparkMetric_CL:

SparkMetric_CL | where name_s contains "rowcounter" | limit 50

Ważne

Po sprawdzeniu, czy metryki są wyświetlane, zatrzymaj przykładowe zadanie aplikacji.

Następne kroki

Wdróż pulpit nawigacyjny monitorowania wydajności, który towarzyszy tej bibliotece kodu, aby rozwiązać problemy z wydajnością w produkcyjnych obciążeniach usługi Azure Databricks.