Freigeben über


Überwachen von Apache Spark-Anwendungen mit Azure Log Analytics (Vorschau)

Die Diagnoseemittererweiterung von Fabric Apache Spark ist eine Bibliothek, die es Apache Spark-Anwendungen ermöglicht, Protokolle, Ereignisprotokolle und Metriken an mehrere Ziele wie Azure Log Analytics, Azure Storage und Azure Event Hubs auszugeben.

In diesem Tutorial erfahren Sie, wie Sie in Fabric Spark-Protokolle und -Metriken konfigurieren und in Log Analytics ausgeben. Nach der Konfiguration können Sie Apache Spark-Anwendungsmetriken und -protokolle in Ihrem Log Analytics-Arbeitsbereich sammeln und analysieren.

Konfigurieren von Arbeitsbereichsinformationen

Führen Sie die folgenden Schritte aus, um die erforderlichen Informationen in Fabric zu konfigurieren.

Schritt 1: Erstellen eines Log Analytics-Arbeitsbereichs

Informationen zum Erstellen dieses Arbeitsbereichs finden Sie in den folgenden Ressourcen:

Schritt 2: Erstellen eines Fabric-Umgebungsartefakts mit Apache Spark-Konfiguration

Um Spark zu konfigurieren, erstellen Sie ein Fabric-Umgebungsartefakt, und wählen Sie eine der folgenden Optionen aus:

Option 1: Konfigurieren mit der ID und dem Schlüssel des Log Analytics-Arbeitsbereichs

  1. Erstellen eines Fabric-Umgebungsartefakts in Fabric

  2. Fügen Sie die folgenden Spark-Eigenschaften mit den entsprechenden Werten zum Umgebungsartefakt hinzu, oder wählen Sie im Menüband Aus YML hinzufügen aus, um die YAML-Beispieldatei herunterzuladen, die bereits die erforderlichen Eigenschaften enthält.

    • <LOG_ANALYTICS_WORKSPACE_ID>: ID des Log Analytics-Arbeitsbereichs
    • <LOG_ANALYTICS_WORKSPACE_KEY>: Log Analytics-Schlüssel. Diesen Schlüssel finden Sie im Azure-Portal unter Azure Log Analytics-Arbeitsbereich>Agents>Primärschlüssel.
    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.
    

    Wenn Sie die gleiche Konfiguration wie Azure Synapse anwenden möchten, verwenden Sie die folgenden Eigenschaften, oder wählen Sie im Menüband Aus YML hinzufügen aus, um die YAML-Beispieldatei herunterzuladen.

    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. Speichern und veröffentlichen Sie die Änderungen.

Option 2: Konfigurieren mit Azure Key Vault

Hinweis

Bekanntes Problem: Es kann vorläufig keine Sitzung mit Option 2 gestartet werden. Derzeit verhindert das Speichern von Geheimnissen im Schlüsseltresor, dass Spark-Sitzungen gestartet werden. Priorisieren Sie die Konfiguration mithilfe der in Option 1 beschriebenen Methode.

Benutzern, die Apache Spark-Anwendungen übermitteln, muss die Berechtigung zum Lesen von Geheimnissen erteilt werden. Weitere Informationen finden Sie unter Gewähren des Zugriffs auf Key Vault-Schlüssel, -Zertifikate und -Geheimnisse mit der rollenbasierten Zugriffssteuerung in Azure.

Führen Sie die folgenden Schritte aus, um Azure Key Vault zum Speichern des Arbeitsbereichsschlüssels zu konfigurieren:

  1. Navigieren Sie im Azure-Portal zu Ihrem Schlüsseltresor.

  2. Wählen Sie auf der Seite mit den Einstellungen des Schlüsseltresors Geheimnisse und dann Generieren/Importieren aus.

  3. Geben Sie auf dem Bildschirm Geheimnis erstellen die folgenden Werte ein:

    • Name: Geben Sie einen Namen für das Geheimnis ein. Geben Sie als Standardeinstellung SparkLogAnalyticsSecret ein.
    • Wert: Geben Sie als Geheimnis <LOG_ANALYTICS_WORKSPACE_KEY> ein.
    • Behalten Sie bei den anderen Optionen die Standardwerte bei. Wählen Sie dann Erstellen aus.
  4. Erstellen eines Fabric-Umgebungsartefakts in Fabric

  5. Fügen Sie die folgenden Spark-Eigenschaften mit den entsprechenden Werten zum Umgebungsartefakt hinzu, oder wählen Sie Aus YML hinzufügen im Menüband im Umgebungsartefakt aus, um die YAML-Beispieldatei herunterzuladen, die die folgenden Spark-Eigenschaften enthält.

    • <LOG_ANALYTICS_WORKSPACE_ID>: Die ID des Log Analytics-Arbeitsbereichs
    • <AZURE_KEY_VAULT_NAME>: Der von Ihnen konfigurierte Schlüsseltresorname
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (optional): Der Geheimnisname im Schlüsseltresor für den Arbeitsbereichsschlüssel. Der Standardwert ist 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.
    

    Wenn Sie die gleiche Konfiguration wie Azure Synapse anwenden möchten, verwenden Sie die folgenden Eigenschaften, oder wählen Sie im Menüband „Aus YML hinzufügen“ aus, um die YAML-Beispieldatei herunterzuladen.

    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.
    

    Hinweis

    Sie können auch die Arbeitsbereichs-ID in Key Vault speichern. Legen Sie den Geheimnisnamen auf SparkLogAnalyticsWorkspaceId fest, oder verwenden Sie die Konfiguration spark.synapse.logAnalytics.keyVault.key.workspaceId, um den Geheimnisnamen der Arbeitsbereichs-ID anzugeben.

    Eine Liste der Apache Spark-Konfigurationen finden Sie unter Verfügbare Apache Spark-Konfigurationen.

  6. Speichern und veröffentlichen Sie die Änderungen.

Schritt 3: Anfügen des Umgebungsartefakts an Notebooks oder Spark-Auftragsdefinitionen oder Festlegen des Umgebungsartefakts als Arbeitsbereichsstandard

So fügen Sie die Umgebung an Notebooks oder Spark-Auftragsdefinitionen an

  1. Navigieren Sie in Fabric zu Ihrem Notebook oder Ihrer Spark-Auftragsdefinition.
  2. Wählen Sie auf der Registerkarte „Start“ das Menü Umgebung und dann die konfigurierte Umgebung aus.
  3. Die Konfiguration wird nach dem Starten einer Spark-Sitzung angewendet.

So legen Sie die Umgebung als Arbeitsbereichsstandard fest

  1. Navigieren Sie in Fabric zu Arbeitsbereichseinstellungen.
  2. Suchen Sie die Spark-Einstellungen in Ihren Arbeitsbereichseinstellungen (Arbeitsbereichseinstellung -> Datentechnik/Data Science -> Spark-Einstellungen).
  3. Wählen Sie die Registerkarte Umgebung aus, wählen Sie die Umgebung mit konfigurierten Spark-Diagnoseeigenschaften aus, und klicken Sie auf Speichern.

Hinweis

Nur Arbeitsbereichsadministratoren können Konfigurationen verwalten. Die Werte gelten für Notebooks und Spark-Auftragsdefinitionen, die den Arbeitsbereichseinstellungen zugeordnet sind. Weitere Informationen finden Sie unter Fabric-Arbeitsbereichseinstellungen.

Übermitteln einer Apache Spark-Anwendung und Anzeigen der Protokolle und Metriken

So übermitteln Sie eine Apache Spark-Anwendung

  1. Übermitteln Sie eine Apache Spark-Anwendung mit der zugeordneten Umgebung, die im vorherigen Schritt konfiguriert wurde. Sie können dazu eine der folgenden Methoden verwenden:

    • Führen Sie ein Notebook in Fabric aus.
    • Übermitteln Sie einen Apache Spark-Batchauftrag über eine Apache Spark-Auftragsdefinition.
    • Führen Sie Ihre Spark-Aktivitäten in Ihren Pipelines aus.
  2. Navigieren Sie zum angegebenen Log Analytics-Arbeitsbereich, und sehen Sie sich die Anwendungsmetriken und -protokolle an, wenn die Apache Spark-Anwendung gestartet wird.

Schreiben von benutzerdefinierten Anwendungsprotokollen

Sie können die Apache Log4j-Bibliothek verwenden, um benutzerdefinierte Protokolle zu schreiben. Hier finden Sie Beispiele für Scala und PySpark:

Scala-Beispiel:

%%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()

PySpark-Beispiel:

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

Abfragen von Daten mit Kusto

So fragen Sie Apache Spark-Ereignisse ab

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

So fragen Sie Spark-Anwendungstreiber und -Executorprotokolle ab

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

So fragen Sie Apache Spark-Metriken ab

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

Datengrenzwerte

Fabric sendet Protokolldaten mithilfe der HTTP-Datensammler-API an Azure Monitor. Für Daten, die an die Datensammlungs-API von Azure Monitor gesendet werden, gelten bestimmte Einschränkungen:

  • Maximal 30 MB pro Sendung an die Datensammlungs-API von Azure Monitor. Diese Größenbeschränkung gilt für eine einzelne Sendung. Wenn eine einzelne Sendung mehr als 30 MB Daten enthält, teilen Sie die Daten auf, und senden Sie kleinere Datenblöcke gleichzeitig.
  • Maximal 32 KB für Feldwerte. Wenn ein Feldwert größer ist als 32 KB, werden die Daten abgeschnitten.
  • Es werden maximal 50 Felder pro Typ empfohlen. Dies ist aus Sicht der Benutzerfreundlichkeit und Suchleistung ein praktikabler Wert.
  • Tabellen in Log Analytics-Arbeitsbereichen unterstützen maximal 500 Spalten.
  • Maximal 45 Zeichen für Spaltennamen.

Erstellen und Verwalten von Warnungen

Benutzer können Abfragen ausführen, um Metriken und Protokolle mit einer bestimmten Häufigkeit auszuwerten und basierend auf den Ergebnissen eine Warnung auszulösen. Weitere Informationen finden Sie unter Erstellen, Anzeigen und Verwalten von Protokollwarnungen mithilfe von Azure Monitor.

Fabric-Arbeitsbereiche mit einem verwalteten virtuellen Netzwerk

Azure Log Analytics kann derzeit nicht als Ziel für die Ausgabe von Spark-Protokollen und -Metriken in einem verwalteten virtuellen Netzwerk ausgewählt werden, da der verwaltete private Endpunkt Log Analytics nicht als Datenquelle unterstützt.

Nächste Schritte