Ü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:
- Erstellen eines Arbeitsbereichs im Azure-Portal
- Erstellen eines Arbeitsbereichs mit der Azure CLI
- Erstellen und Konfigurieren eines Arbeitsbereichs in Azure Monitor mithilfe von PowerShell
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
Erstellen eines Fabric-Umgebungsartefakts in Fabric
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.
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:
Navigieren Sie im Azure-Portal zu Ihrem Schlüsseltresor.
Wählen Sie auf der Seite mit den Einstellungen des Schlüsseltresors Geheimnisse und dann Generieren/Importieren aus.
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.
- Name: Geben Sie einen Namen für das Geheimnis ein. Geben Sie als Standardeinstellung
Erstellen eines Fabric-Umgebungsartefakts in Fabric
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 istSparkLogAnalyticsSecret
.
// 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 Konfigurationspark.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.
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
- Navigieren Sie in Fabric zu Ihrem Notebook oder Ihrer Spark-Auftragsdefinition.
- Wählen Sie auf der Registerkarte „Start“ das Menü Umgebung und dann die konfigurierte Umgebung aus.
- Die Konfiguration wird nach dem Starten einer Spark-Sitzung angewendet.
So legen Sie die Umgebung als Arbeitsbereichsstandard fest
- Navigieren Sie in Fabric zu Arbeitsbereichseinstellungen.
- Suchen Sie die Spark-Einstellungen in Ihren Arbeitsbereichseinstellungen (Arbeitsbereichseinstellung -> Datentechnik/Data Science -> Spark-Einstellungen).
- 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
Ü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.
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.