Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird das Azure Blob Storage Ziel für Fabric Apache Spark Diagnostic Emitter beschrieben.
Fabric Apache Spark Diagnostic Emitter bietet ein gemeinsames Konfigurationsmodell für Spark-Diagnostik über verschiedene Ziele hinweg. In diesem Lernprogramm konfigurieren Sie dieses Modell so, dass Apache Spark-Protokolle, Ereignisprotokolle und Metriken an Azure Blob Storage weitergeleitet werden.
Informationen zur Emitterarchitektur und Zielauswahl finden Sie unter Fabric Apache Spark Diagnostic Emitter overview.
Protokolle und Metriken im Speicherkonto sammeln
Schritt 1: Erstellen eines Speicherkontos
Um Diagnoseprotokolle und Metriken zu sammeln, können Sie ein vorhandenes Azure Storage Konto verwenden. Wenn Sie über kein Konto verfügen, können Sie ein Azure Blob Storage-Konto erstellen oder ein Speicherkonto zur Nutzung mit Azure Data Lake Storage Gen2 erstellen.
Schritt 2: Erstellen Sie ein Fabric Environment Item mit Apache Spark Konfiguration
Option 1: Konfiguration mit Azure Storage URI und Zugangsschlüssel
Erstelle ein Umgebungselement in Fabric
Füge die folgenden Spark-Eigenschaften mit den entsprechenden Werten zum Umgebungselement hinzu oder wähle im Ribbon "Von .yml hinzufügen , um die Beispiel-Yaml-Datei 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.MyStorageBlob.auth: "AccessKey" spark.synapse.diagnostic.emitter.MyStorageBlob.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
Stellen Sie sicher, dass Benutzern, die Apache Spark-Anwendungen übermitteln, Berechtigungen zum Lesen von Geheimnissen erteilt werden. Weitere Informationen finden Sie unter Bereitstellung von Zugriff auf Key Vault Schlüssel, Zertifikate und Geheimnisse mit rollenbasierter Azure-Zugriffssteuerung.
So konfigurieren Sie Azure Key Vault zum Speichern des Arbeitsbereichsschlüssels:
Erstellen und gehen 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.
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.
Erstelle ein Umgebungsitem 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_URI> 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_URI>,<AZURE_KEY_VAULT_SECRET_KEY_NAME>. Weitere Informationen zu diesen Parametern finden Sie unter Azure Storage-Konfigurationen.Speichern und veröffentlichen Sie die Änderungen.
Option 3: Konfiguration mit Service Principal-Zertifikatauthentifizierung
Nutzen Sie diese Option, um sich mit einem Microsoft Entra Service Principal und einem in Azure Key Vault gespeicherten Zertifikat bei Azure Storage zu authentifizieren.
Vor der Konfiguration der Spark-Eigenschaften:
- Erstellen oder importieren Sie ein Zertifikat in Azure Key Vault. Das Zertifikat muss einen exportierbaren privaten Schlüssel enthalten.
- Laden Sie nur das öffentliche Zertifikat im CER- oder PEM-Format herunter und laden Sie es in die Microsoft Entra-App-Registrierung unter Zertifikate & Geheimnisse
hoch. - Weisen Sie die Rolle Storage Blob Data Contributor dem Service Principal auf dem Zielspeicherkonto oder -container zu.
- Weise die Rolle des Key Vault Certificate User auf dem Azure Key Vault dem angemeldeten Fabric-Nutzer zu, der die Spark-Sitzung startet.
Important
Zertifikatsabruf und Speicherzugriff verwenden unterschiedliche Identitäten. Der angemeldete Fabric-Benutzer ruft das Zertifikat und seinen privaten Schlüssel aus dem Azure Key Vault ab. Der Service Principal verwendet das Zertifikat, um Diagnosedaten zu authentifizieren und in Azure Storage zu schreiben. Es reicht nicht aus, nur dem Dienstprinzipal Zugriff auf Key Vault zu gewähren.
Fügen Sie der Fabric-Umgebung folgende Spark-Eigenschaften hinzu:
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://<STORAGE_ACCOUNT>.blob.core.windows.net/<CONTAINER>/<FOLDER>"
spark.synapse.diagnostic.emitter.MyStorageBlob.auth: "ServicePrincipalCert"
spark.synapse.diagnostic.emitter.MyStorageBlob.certificate.keyVault.certificateName: "<CERTIFICATE_NAME>"
spark.synapse.diagnostic.emitter.MyStorageBlob.certificate.keyVault: "https://<KEY_VAULT_NAME>.vault.azure.net/"
spark.synapse.diagnostic.emitter.MyStorageBlob.tenantId: "<SERVICE_PRINCIPAL_TENANT_ID>"
spark.synapse.diagnostic.emitter.MyStorageBlob.clientId: "<SERVICE_PRINCIPAL_CLIENT_ID>"
spark.fabric.pools.skipStarterPools: "true"
Die URI-Eigenschaft identifiziert den Ziel-Blob Storage-Container und den optionalen Ordner. Der Zertifikatsname muss exakt mit dem Zertifikatsnamen in Azure Key Vault übereinstimmen.
Schritt 3: Verknüpfen Sie das Umgebungselement mit Notebooks oder Spark-Job-Definitionen, oder legen Sie es als Standard für den Arbeitsbereich fest.
Hinweis
Nur Arbeitsbereichsadministratoren können eine Umgebung als Standard für einen Arbeitsbereich festlegen.
Nach der Festlegung wird sie zur Standardumgebung für alle Notizbücher und Spark-Auftragsdefinitionen innerhalb des Arbeitsbereichs. Weitere Informationen finden Sie unter Fabric Workspace Settings.
So fügen Sie die Umgebung an Notebooks oder Spark-Auftragsdefinitionen an:
- Navigieren Sie in Fabric zur spezifischen Notizbuch- oder 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:
- Navigiere zu Arbeitsbereichseinstellungen in Fabric.
- Suchen Sie Spark-Einstellungen in Arbeitsbereichseinstellungen (Arbeitsbereichseinstellung>Data Engineering/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.
Schritt 4. Übermitteln einer Apache Spark-Anwendung und Anzeigen der Protokolle und Metriken
Sie können die Apache Log4j-Bibliothek verwenden, um benutzerdefinierte Protokolle zu schreiben.
Ein Beispiel für 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()
Ein Beispiel für 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")
Schritt 5: Anzeigen der Protokolldateien in 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 Azure Speicherziel zu aktivieren, muss AzureStorage in dieses Feld einbezogen werden. |
spark.synapse.diagnostic.emitter.<destination>.categories |
Optional. Kommagetrennte Liste der ausgewählten Protokollkategorien. Verfügbare Werte: DriverLog, ExecutorLog, EventLog, Metrics. Wenn nicht festgelegt, ist der Standardwert alle Kategorien. |
spark.synapse.diagnostic.emitter.<destination>.auth |
Erforderlich. Setzen Sie diesen Wert auf ServicePrincipalCert, wenn Sie die Microsoft Entra Service Principal Certificate Authentication verwenden. |
spark.synapse.diagnostic.emitter.<destination>.uri |
Erforderlich. Der Blob Storage-Container des Ziels und die URI des optionalen Ordners. Beispiel: https://<storage-account>.blob.core.windows.net/<container>/<folder> |
spark.synapse.diagnostic.emitter.<destination>.secret |
Optional. Der geheime Inhalt (AccessKey oder SAS). Erforderlich, wenn man .auth = AccessKey oder SAS verwendet und .secret.keyVault nicht angegeben ist. |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
Erforderlich, wenn man .auth = AccessKey oder SAS verwendet und .secret nicht angegeben ist. Der Azure Key Vault URI, in dem der geheime Schlüssel (AccessKey oder SAS) gespeichert ist. |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
Erforderlich, wenn .secret.keyVault angegeben wird. Der Name des Azure Key Vault Secrets, in dem das Geheimnis (AccessKey oder SAS) gespeichert ist. |
spark.synapse.diagnostic.emitter.<destination>.tenantId |
Erforderlich bei Verwendung von .auth = ServicePrincipalCert. Die Azure Active Directory Mandanten-ID des Dienstprinzipals. |
spark.synapse.diagnostic.emitter.<destination>.clientId |
Erforderlich bei Verwendung von .auth = ServicePrincipalCert. Die Anwendungs-ID (Client-ID) des Dienstprinzipals. |
spark.synapse.diagnostic.emitter.<destination>.certificate.keyVault.certificateName |
Erforderlich, wenn die Authentifizierung ServicePrincipalCert ist. Der Name des in Azure Key Vault gespeicherten Zertifikats. Das Zertifikat muss einen zugänglichen privaten Schlüssel enthalten, und sein öffentliches Zertifikat muss in der Microsoft Entra-App registriert sein. |
spark.synapse.diagnostic.emitter.<destination>.certificate.keyVault |
Erforderlich, wenn die Authentifizierung ServicePrincipalCert ist. Die Azure Key Vault-URL, die das Zertifikat speichert. Der angemeldete Fabric-Benutzer, der die Spark-Sitzung startet, muss die Berechtigung haben, das Zertifikat und seinen privaten Schlüssel abzurufen, wie zum Beispiel die Rolle des Key Vault Certificate Users. |
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 Kommas getrennten Log4j-Protokollierungsnamen können Sie angeben, welche Logs gesammelt werden sollen. Beispiel: org.apache.spark.SparkContext,org.example.Logger |
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match |
Optional. Liste von durch Kommas getrennten Spark-Metriknamensuffixen, mit der Sie angeben können, 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": "2025-02-28T09:13:57.978Z",
"category": "Log|EventLog|Metrics",
"fabricLivyId": "<fabric-livy-id>",
"applicationId": "<application-id>",
"applicationName": "<application-name>",
"executorId": "<driver-or-executor-id>",
"userId": "<the-submitter-user-id>",
"fabricTenantId": "<my-fabric-tenant-id>",
"capacityId": "<my-fabric-capacity-id>",
"artifactType": "SynapseNotebook|SparkJobDefinition",
"artifactId": "<my-fabric-item-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": "2025-02-28T09:13:57.941Z",
"message": "ApplicationAttemptId: appattempt_1740734011890_0001_000001",
"logger_name": "org.apache.spark.deploy.yarn.ApplicationMaster",
"level": "INFO",
"thread_name": "main"
// ...
}
}
Fabric Arbeitsbereiche mit verwaltetem virtuellen Netzwerk
Erstellen Sie einen verwalteten privaten Endpunkt für das Ziel Azure Blob Storage. Ausführliche Anweisungen finden Sie unter Erstellen und Verwenden verwalteter privater Endpunkte in Fabric.
Nachdem der verwaltete private Endpunkt genehmigt wurde, können Benutzer Protokolle und Metriken an das Ziel Azure Blob Storage senden.