Udostępnij za pośrednictwem


Monitorowanie aplikacji platformy Apache Spark za pomocą usługi Azure Log Analytics (wersja zapoznawcza)

Rozszerzenie emitera diagnostycznego platformy Apache Spark sieci szkieletowej platformy Apache Spark to biblioteka umożliwiająca aplikacjom platformy Apache Spark emitowanie dzienników, dzienników zdarzeń i metryk do wielu miejsc docelowych, w tym analizy dzienników platformy Azure, usługi Azure Storage i centrów zdarzeń platformy Azure.

Z tego samouczka dowiesz się, jak skonfigurować i emitować dzienniki i metryki platformy Spark do usługi Log Analytics w sieci szkieletowej. Po skonfigurowaniu można zbierać i analizować metryki i dzienniki aplikacji platformy Apache Spark w obszarze roboczym usługi Log Analytics.

Konfigurowanie informacji o obszarze roboczym

Wykonaj następujące kroki, aby skonfigurować niezbędne informacje w sieci szkieletowej.

Krok 1. Tworzenie obszaru roboczego usługi Log Analytics

Zapoznaj się z jednym z następujących zasobów, aby utworzyć ten obszar roboczy:

Krok 2. Tworzenie artefaktu środowiska sieci szkieletowej przy użyciu konfiguracji platformy Apache Spark

Aby skonfigurować platformę Spark, utwórz artefakt środowiska sieci szkieletowej i wybierz jedną z następujących opcji:

Opcja 1. Konfigurowanie przy użyciu identyfikatora i klucza obszaru roboczego usługi Log Analytics

  1. Tworzenie artefaktu środowiska sieci szkieletowej w sieci szkieletowej

  2. Dodaj następujące właściwości platformy Spark z odpowiednimi wartościami do artefaktu środowiska lub wybierz pozycję Dodaj z .yml na wstążce, aby pobrać przykładowy plik yaml, który zawiera już wymagane właściwości.

    • <LOG_ANALYTICS_WORKSPACE_ID>: identyfikator obszaru roboczego usługi Log Analytics.
    • <LOG_ANALYTICS_WORKSPACE_KEY>: klucz usługi Log Analytics. Aby to znaleźć, w witrynie Azure Portal przejdź do obszaru roboczego>Agenci>usługi Azure Log Analytics Klucz podstawowy.
    spark.synapse.diagnostic.emitters: LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Alternatywnie, aby zastosować tę samą konfigurację co usługa Azure Synapse, użyj następujących właściwości lub wybierz pozycję Dodaj z .yml na wstążce, aby pobrać przykładowy plik yaml.

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    
  3. Zapisz i opublikuj zmiany.

Opcja 2. Konfigurowanie przy użyciu usługi Azure Key Vault

Uwaga

Znany problem: Nie można uruchomić sesji przy użyciu opcji 2 tymczasowo. Obecnie przechowywanie wpisów tajnych w usłudze Key Vault uniemożliwia uruchamianie sesji platformy Spark. Określ priorytety konfiguracji przy użyciu metody opisanej w opcji 1.

Musisz udzielić użytkownikom uprawnień do odczytu wpisu tajnego, którzy będą przesyłać aplikacje platformy Apache Spark. Aby uzyskać więcej informacji, zobacz Zapewnianie dostępu do kluczy, certyfikatów i wpisów tajnych usługi Key Vault za pomocą kontroli dostępu opartej na rolach platformy Azure.

Aby skonfigurować usługę Azure Key Vault do przechowywania klucza obszaru roboczego, wykonaj następujące kroki:

  1. Przejdź do usługi Key Vault w witrynie Azure Portal.

  2. Na stronie ustawień magazynu kluczy wybierz pozycję Wpisy tajne, a następnie pozycję Generuj/Importuj.

  3. Na ekranie Tworzenie wpisu tajnego wprowadź następujące wartości:

    • Nazwa: Wprowadź nazwę wpisu tajnego. W polu domyślnym wprowadź .SparkLogAnalyticsSecret
    • Wartość: wprowadź wartość <LOG_ANALYTICS_WORKSPACE_KEY> wpisu tajnego.
    • Dla pozostałych opcji zostaw wartości domyślne. Następnie wybierz Utwórz.
  4. Tworzenie artefaktu środowiska sieci szkieletowej w sieci szkieletowej

  5. Dodaj następujące właściwości platformy Spark z odpowiednimi wartościami do artefaktu środowiska lub wybierz pozycję Dodaj z .yml na wstążce w artefaktu Środowisko, aby pobrać przykładowy plik yaml zawierający następujące właściwości platformy Spark.

    • <LOG_ANALYTICS_WORKSPACE_ID>: identyfikator obszaru roboczego usługi Log Analytics.
    • <AZURE_KEY_VAULT_NAME>: skonfigurowana nazwa magazynu kluczy.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (opcjonalnie): nazwa wpisu tajnego w magazynie kluczy dla klucza obszaru roboczego. Wartość domyślna to SparkLogAnalyticsSecret.
    // Spark properties for LA
    spark.synapse.diagnostic.emitters LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Alternatywnie, aby zastosować tę samą konfigurację co usługa Azure Synapse, użyj następujących właściwości lub wybierz pozycję Dodaj z .yml na wstążce, aby pobrać przykładowy plik yaml.

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.keyVault.name: <AZURE_KEY_VAULT_NAME>
    spark.synapse.logAnalytics.keyVault.key.secret: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Uwaga

    Identyfikator obszaru roboczego można również przechowywać w usłudze Key Vault. Ustaw nazwę wpisu tajnego na SparkLogAnalyticsWorkspaceId, lub użyj konfiguracji spark.synapse.logAnalytics.keyVault.key.workspaceId , aby określić nazwę wpisu tajnego identyfikatora obszaru roboczego.

    Aby uzyskać listę konfiguracji platformy Apache Spark, zobacz Dostępne konfiguracje platformy Apache Spark

  6. Zapisz i opublikuj zmiany.

Krok 3. Dołączanie artefaktu środowiska do notesów lub definicji zadań platformy Spark lub ustawianie go jako domyślnego obszaru roboczego

Aby dołączyć środowisko do notesów lub definicji zadań platformy Spark:

  1. Przejdź do notesu lub definicji zadania platformy Spark w usłudze Fabric.
  2. Wybierz menu Środowisko na karcie Narzędzia główne i wybierz skonfigurowane środowisko.
  3. Konfiguracja zostanie zastosowana po rozpoczęciu sesji platformy Spark.

Aby ustawić środowisko jako domyślne:

  1. Przejdź do pozycji Ustawienia obszaru roboczego w sieci szkieletowej.
  2. Znajdź ustawienia platformy Spark w ustawieniach obszaru roboczego (ustawienie Obszar roboczy —> inżynierowie danych ing/Science —> Ustawienia platformy Spark)
  3. Wybierz kartę Środowisko i wybierz środowisko ze skonfigurowanymi właściwościami platformy Spark diagnostyki, a następnie kliknij przycisk Zapisz.

Uwaga

Tylko administratorzy obszaru roboczego mogą zarządzać konfiguracjami. Wartości będą stosowane do notesów i definicji zadań platformy Spark, które są dołączane do ustawień obszaru roboczego. Aby uzyskać więcej informacji, zobacz Ustawienia obszaru roboczego sieci szkieletowej.

Przesyłanie aplikacji platformy Apache Spark i wyświetlanie dzienników i metryk

Aby przesłać aplikację platformy Apache Spark:

  1. Prześlij aplikację platformy Apache Spark ze skojarzonym środowiskiem, które zostało skonfigurowane w poprzednim kroku. Aby to zrobić, możesz użyć dowolnego z następujących sposobów:

    • Uruchom notes w sieci szkieletowej.
    • Prześlij zadanie wsadowe platformy Apache Spark za pomocą definicji zadania platformy Apache Spark.
    • Uruchom działania platformy Spark w potokach.
  2. Przejdź do określonego obszaru roboczego usługi Log Analytics, a następnie wyświetl metryki aplikacji i dzienniki po uruchomieniu aplikacji Platformy Apache Spark.

Zapisywanie niestandardowych dzienników aplikacji

Możesz użyć biblioteki Apache Log4j do zapisywania dzienników niestandardowych. Oto przykłady dla języka Scala i PySpark:

Przykład scala:

%%spark
val logger = org.apache.log4j.LogManager.getLogger("com.contoso.LoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
//log exception
try {
      1/0
 } catch {
      case e:Exception =>logger.warn("Exception", e)
}
// run job for task level metrics
val data = sc.parallelize(Seq(1,2,3,4)).toDF().count()

Przykład PySpark:

%%pyspark
logger = sc._jvm.org.apache.log4j.LogManager.getLogger("com.contoso.PythonLoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")

Wykonywanie zapytań dotyczących danych za pomocą usługi Kusto

Aby wykonywać zapytania dotyczące zdarzeń platformy Apache Spark:

SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

Aby wykonać zapytanie dotyczące sterownika aplikacji Platformy Spark i dzienników funkcji wykonawczej:

SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

Aby wykonywać zapytania dotyczące metryk platformy Apache Spark:

SparkMetrics_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc

Limity danych

Sieć szkieletowa wysyła dane dziennika do usługi Azure Monitor przy użyciu interfejsu API modułu zbierającego dane HTTP. Dane publikowane w interfejsie API zbierania danych usługi Azure Monitor podlegają pewnym ograniczeniom:

  • Maksymalnie 30 MB na post do interfejsu API modułu zbierającego dane usługi Azure Monitor. Jest to limit rozmiaru pojedynczego wpisu. Jeśli dane z pojedynczego wpisu przekraczają 30 MB, należy podzielić dane na fragmenty o mniejszym rozmiarze i wysłać je współbieżnie.
  • Maksymalnie 32 KB dla wartości pól. Jeśli wartość pola jest większa niż 32 KB, dane są obcięte.
  • Zalecane maksymalnie 50 pól dla danego typu. Jest to praktyczny limit z perspektywy użyteczności i środowiska wyszukiwania.
  • Tabele w obszarach roboczych usługi Log Analytics obsługują tylko 500 kolumn.
  • Maksymalnie 45 znaków dla nazw kolumn.

Tworzenie alertów i zarządzanie nimi

Użytkownicy mogą wykonywać zapytania dotyczące oceny metryk i dzienników z ustawioną częstotliwością oraz wyzwalać alert na podstawie wyników. Aby uzyskać więcej informacji, zobacz Tworzenie, wyświetlanie alertów dzienników i zarządzanie nimi przy użyciu usługi Azure Monitor.

Obszary robocze sieci szkieletowej z zarządzaną siecią wirtualną

Obecnie nie można wybrać usługi Azure Log Analytics jako miejsca docelowego dla dzienników platformy Spark i emisji metryk w zarządzanej sieci wirtualnej, ponieważ zarządzany prywatny punkt końcowy nie obsługuje usługi Log Analytics jako źródła danych.

Następne kroki