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:
Skompiluj plik JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar zgodnie z opisem w pliku readme usługi GitHub.
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 nazwiecounter1
.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:
Skompiluj spark-listeners-1.0-SNAPSHOT.jar i plik JAR spark-listeners-loganalytics-1.0-SNAPSHOT.jar zgodnie z opisem w pliku readme usługi GitHub.
Utwórz plik konfiguracji log4j.properties dla 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.
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
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) } }
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 wykonawcze 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:
Skompiluj projekt zadań spark w bibliotece monitorowania zgodnie z opisem w pliku readme usługi GitHub.
Przejdź do obszaru roboczego usługi Databricks i utwórz nowe zadanie zgodnie z opisem w temacie Tworzenie i uruchamianie zadań usługi Azure Databricks.
Na stronie szczegółów zadania wybierz pozycję Ustaw plik JAR.
Przekaż plik JAR z
/src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar
pliku .W polu Klasa Main wprowadź wartość
com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob
.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.
Powiązane zasoby
- Monitorowanie usługi Azure Databricks
- Rozwiązywanie problemów z wąskimi gardłami wydajności w usłudze Azure Databricks
- Nowoczesna architektura analizy za pomocą usługi Azure Databricks
- Pozyskiwanie, ETL (wyodrębnianie, przekształcanie, ładowanie) i potoki przetwarzania strumieniowego za pomocą usługi Azure Databricks