Sammeln Ihrer Apache Spark-Anwendungsprotokolle und -Metriken mithilfe eines Azure Storage-Kontos (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 die Diagnoseemittererweiterung von Fabric Apache Spark verwenden, um Anwendungsprotokolle, Ereignisprotokolle und Metriken von Apache Spark an Ihr Azure Storage-Konto zu senden.
Sammeln von Protokollen und Metriken im Speicherkonto
Schritt 1: Erstellen eines Speicherkontos
Um Diagnoseprotokolle und Metriken zu sammeln, können Sie ein vorhandenes Azure Storage-Konto verwenden. Sollten Sie über kein Konto verfügen, können Sie ein Azure Blob Storage-Konto oder ein Speicherkonto für die Verwendung mit Azure Data Lake Storage Gen2 erstellen.
Schritt 2: Erstellen eines Fabric-Umgebungsartefakts mit Apache Spark-Konfiguration
Option 1: Konfigurieren mit Azure Storage-URI und Zugriffsschlüssel
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 folgenden Eigenschaften enthält.
spark.synapse.diagnostic.emitters: MyStorageBlob spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage" spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyStorageBlob.uri: "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>" spark.synapse.diagnostic.emitter.MyDestination1.auth: "AccessKey" spark.synapse.diagnostic.emitter.MyDestination1.secret: <storage-access-key> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Geben Sie in der Konfigurationsdatei die folgenden Parameter an:
<my-blob-storage>
,<container-name>
,<folder-name>
,<storage-access-key>
. Weitere Informationen zu diesen Parametern finden Sie unter Azure Storage-Konfigurationen.
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.
Stellen Sie sicher, dass Benutzern, die Apache Spark-Anwendungen übermitteln, Berechtigungen 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.
So konfigurieren Sie Azure Key Vault zum Speichern des Arbeitsbereichsschlüssels
Erstellen Sie im Azure-Portal einen Schlüsseltresor, und navigieren Sie dorthin.
Wählen Sie auf der Seite mit den Einstellungen des Schlüsseltresors Geheimnisse und dann Generieren/Importieren aus.
Wählen Sie auf dem Bildschirm Geheimnis erstellen folgende Werte aus:
- Name: Geben Sie einen Namen für das Geheimnis ein.
- Wert: Geben Sie als Geheimnis
<storage-access-key>
ein. - Behalten Sie bei den anderen Optionen die Standardwerte bei. Wählen Sie dann Erstellen aus.
Erstellen Sie ein Fabric-Umgebungsartefakt in Fabric.
Fügen Sie die folgenden Spark-Eigenschaften hinzu. Oder wählen Sie im Menüband Aus YML hinzufügen aus, um die YAML-Beispieldatei hochzuladen, die die folgenden Spark-Eigenschaften enthält.
spark.synapse.diagnostic.emitters: <MyStorageBlob> spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage" spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyStorageBlob.uri: "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>" spark.synapse.diagnostic.emitter.MyStorageBlob.auth: "AccessKey" spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault: <AZURE_KEY_VAULT_NAME> spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Geben Sie in der Konfigurationsdatei den folgenden Parameter an:
<my-blob-storage>
,<container-name>
,<folder-name>
,<AZURE_KEY_VAULT_NAME>
,<AZURE_KEY_VAULT_SECRET_KEY_NAME>
. Weitere Informationen zu diesen Parametern finden Sie unter Azure Storage-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 zum spezifischen Notebook oder zur Spark-Auftragsdefinition.
- Wählen Sie auf der Registerkarte „Start“ das Menü Umgebung aus, und wählen Sie die Umgebung mit den konfigurierten Spark-Diagnoseeigenschaften aus.
- Die Konfiguration wird angewendet, wenn Sie eine Spark-Sitzung starten.
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 Arbeitsbereichskonfigurationen verwalten. Änderungen, die hier vorgenommen werden, gelten für alle Notebooks und Spark-Auftragsdefinitionen, die den Arbeitsbereichseinstellungen zugeordnet sind. Weitere Informationen finden Sie unter Fabric-Arbeitsbereichseinstellungen.
Schritt 4: Anzeigen der Protokolldateien im Azure-Speicherkonto
Nachdem Sie einen Auftrag an die konfigurierte Spark-Sitzung übermittelt haben, können Sie die Protokolle und Metrikdateien im Zielspeicherkonto anzeigen. Die Protokolle werden basierend auf verschiedenen Anwendungen, die mit <workspaceId>.<fabricLivyId>
identifiziert werden, in entsprechenden Pfaden gespeichert. Alle Protokolldateien haben das JSON-Zeilenformat (wird auch als „newline-delimited JSON“ oder „ndjson“ bezeichnet), das für die Datenverarbeitung geeignet ist.
Verfügbare Konfigurationen
Konfiguration | BESCHREIBUNG |
---|---|
spark.synapse.diagnostic.emitters |
Erforderlich. Kommagetrennte Liste der Zielnamen von Diagnoseemittern. Zum Beispiel, MyDest1,MyDest2 |
spark.synapse.diagnostic.emitter.<destination>.type |
Erforderlich. Integrierter Zieltyp. Um das Azure-Speicherziel zu aktivieren, muss AzureStorage in dieses Feld eingeschlossen werden. |
spark.synapse.diagnostic.emitter.<destination>.categories |
Optional. Kommagetrennte Liste der ausgewählten Protokollkategorien. Verfügbare Werte: DriverLog , ExecutorLog , EventLog , Metrics . Ist diese Option nicht festgelegt, werden standardmäßig alle Kategorien verwendet. |
spark.synapse.diagnostic.emitter.<destination>.auth |
Erforderlich. AccessKey für die Verwendung der Speicherkontoautorisierung per Zugriffsschlüssel. SAS für die Autorisierung mit Shared Access Signatures (SAS). |
spark.synapse.diagnostic.emitter.<destination>.uri |
Erforderlich. Der Ordner-URI des Zielblobcontainers. Muss dem folgenden Muster entsprechen: https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name> . |
spark.synapse.diagnostic.emitter.<destination>.secret |
Optional. Der Inhalt des Geheimnisses: Zugriffsschlüssel (AccessKey) oder SAS. |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
Erforderlich, wenn .secret nicht angegeben ist. Der Name der Azure Key Vault-Instanz, in der das Geheimnis (Zugriffsschlüssel oder SAS) gespeichert ist. |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
Erforderlich, wenn .secret.keyVault angegeben wird. Der Name des Azure Key Vault-Geheimnisses, in dem das Geheimnis (Zugriffsschlüssel oder SAS) gespeichert ist. |
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match |
Optional. Kommagetrennte Liste mit Spark-Ereignisnamen, um anzugeben, welche Ereignisse gesammelt werden sollen. Beispiel: SparkListenerApplicationStart,SparkListenerApplicationEnd |
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match |
Optional. Mit den durch Trennzeichen getrennten Log4j-Protokollierungsnamen können Sie angeben, welche Ereignisse gesammelt werden sollen. Beispiel: org.apache.spark.SparkContext,org.example.Logger |
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match |
Optional. Kommagetrennte Liste mit Spark-Metriknamensuffixen, um anzugeben, welche Metriken gesammelt werden sollen. Beispiel: jvm.heap.used |
spark.fabric.pools.skipStarterPools |
Erforderlich. Diese Spark-Eigenschaft wird verwendet, um eine Spark-Sitzung bei Bedarf zu erzwingen. Sie sollten den Wert auf True festlegen, wenn Sie den Standardpool verwenden, um das Ausgeben von Protokollen und Metriken aus den Bibliotheken auszulösen. |
Beispiel für Protokolldaten
Hier sehen Sie einen exemplarischen Protokolldatensatz im JSON-Format:
{
"timestamp": "2024-09-06T03:09:37.235Z",
"category": "Log|EventLog|Metrics",
"fabricLivyId": "<fabric-livy-id>",
"applicationId": "<application-id>",
"applicationName": "<application-name>",
"executorId": "<driver-or-executor-id>",
"fabricTenantId": "<my-fabric-tenant-id>",
"capacityId": "<my-fabric-capacity-id>",
"artifactType": "SynapseNotebook|SparkJobDefinition",
"artifactId": "<my-fabric-artifact-id>",
"fabricWorkspaceId": "<my-fabric-workspace-id>",
"fabricEnvId": "<my-fabric-environment-id>",
"executorMin": "<executor-min>",
"executorMax": "<executor-max>",
"isHighConcurrencyEnabled": "true|false",
"properties": {
// The message properties of logs, events and metrics.
"timestamp": "2024-09-06T03:09:37.235Z",
"message": "Initialized BlockManager: BlockManagerId(1, vm-04b22223, 34319, None)",
"logger_name": "org.apache.spark.storage.BlockManager",
"level": "INFO",
"thread_name": "dispatcher-Executor"
//...
}
}
Fabric-Arbeitsbereiche mit einem verwalteten virtuellen Netzwerk
Erstellen Sie einen verwalteten privaten Endpunkt für das Azure Blob Storage-Ziel. Ausführliche Anweisungen finden Sie unter Erstellen und Verwenden verwalteter privater Endpunkte in Microsoft Fabric – Microsoft Fabric.
Nachdem der verwaltete private Endpunkt genehmigt wurde, können Benutzer Protokolle und Metriken an das Azure Blob Storage-Ziel ausgeben.