Indsaml dine Apache Spark-applikationslogs og metrics ved hjælp af Azure Storage-kontoen

Denne artikel beskriver Azure Blob Storage-destinationen for Fabric Apache Spark Diagnostic Emitter.

Fabric Apache Spark Diagnostic Emitter leverer en fælles konfigurationsmodel for Spark-diagnostik på tværs af destinationer. I denne tutorial konfigurerer du modellen til at rute Apache Spark-logs, hændelseslogs og metrikker til Azure Blob Storage.

For emitterarkitektur og vejledning i destinationsvalg, se Fabric Oversigt over Apache Spark Diagnostic Emitter.

Indsaml logge og målepunkter til lagerkonto

Trin 1: Opret en lagerkonto

For at indsamle diagnostiske logfiler og metrikker kan du bruge en eksisterende Azure Storage-konto. Hvis du ikke har en, kan du oprette en Azure blob storage-konto eller oprette en lagringskonto til brug med Azure Data Lake Storage Gen2.

Trin 2: Opret et Fabric Environment Item med Apache Spark-konfiguration

Mulighed 1: Konfigurér med Azure Storage URI og Access key

  1. Opret et miljøobjekt i Fabric

  2. Tilføj følgende Spark-egenskaber med de relevante værdier til miljøelementet, eller vælg Add from .yml i båndet for at downloade eksempelfilen yaml, som allerede indeholder følgende egenskaber.

    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.
    

    Udfyld følgende parametre i konfigurationsfilen: <my-blob-storage>, <container-name>, <folder-name>, <storage-access-key>. For flere detaljer om disse parametre, se Azure Storage konfigurationer.

Mulighed 2: Konfigurér med Azure Key Vault

Bemærk

Sørg for, at brugere, der indsender Apache Spark-programmer, får læsehemmelige tilladelser. For mere information, se Giv adgang til Key Vault nøgler, certifikater og hemmeligheder med en Azure rollebaseret adgangskontrol.

Sådan konfigurerer du Azure Key Vault til at gemme arbejdsområdenøglen:

  1. Opret og gå til dit nøglearkiv i Azure-portalen.

  2. På siden med indstillinger for key vault skal du vælge Hemmeligheder og derefter Generér/importér.

  3. På skærmen Opret en hemmelighed skal du vælge følgende værdier:

    • Navn: Angiv et navn til hemmeligheden.
    • Værdi: Angiv <storage-access-key> for hemmeligheden.
    • Lad de andre værdier være deres standardværdier. Vælg derefter Opret.
  4. Opret et miljøobjekt i Fabric.

  5. Tilføj følgende Spark-egenskaber. Eller vælg Tilføj fra .yml på båndet for at uploade yaml-eksempelfilen , som omfatter følgende Spark-egenskaber.

    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.
    

    Udfyld følgende parametre i konfigurationsfilen: <my-blob-storage>, <container-name>, <folder-name>, <AZURE_KEY_VAULT_URI>, <AZURE_KEY_VAULT_SECRET_KEY_NAME>. For flere detaljer om disse parametre, se Azure Storage konfigurationer.

  6. Gem og publicer ændringerne.

Mulighed 3: Konfigurér med service principal certifikatautentificering

Brug denne mulighed til at autentificere til Azure Storage med en Microsoft Entra service principal og et certifikat gemt i Azure Key Vault.

Før du konfigurerer Spark-egenskaberne:

  • Opret eller importer et certifikat i Azure Key Vault. Certifikatet skal indeholde en eksportbar privat nøgle.
  • Download kun det offentlige certifikat i CER- eller PEM-format, og upload det til Microsoft Entra-appens registrering under Certificates & secrets Certificates.
  • Tildel rollen Storage Blob Data Contributor til tjenesteprincipalen på mållagringskontoen eller containeren.
  • Tildel rollen som Key Vault Certificate User på Azure Key Vault til den indloggede Fabric-bruger, som starter Spark-sessionen.

Vigtigt!

Certifikathentning og adgang til lagring bruger forskellige identiteter. Den indloggede Fabric-bruger henter certifikatet og dets private nøgle fra Azure Key Vault. Servicechefen bruger certifikatet til at autentificere og skrive diagnostiske data til Azure Storage. At give Key Vault-adgang kun til servicehovedet er ikke tilstrækkeligt.

Tilføj følgende Spark-egenskaber til Fabric-miljøet:

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" 

Ui-egenskaben identificerer destinationsbeholderen Blob Storage og den valgfrie mappe. Certifikatnavnet skal nøjagtigt matche certifikatnavnet i Azure Key Vault.

Trin 3: Vedhæft miljøelementet til notesbøger eller spark-jobdefinitioner, eller sæt det som arbejdsområdestandarden

Bemærk

Det er kun administratorer af arbejdsområdet, der kan angive et miljø som standard for et arbejdsområde.

Når den er angivet, bliver den standardmiljøet for alle notesbøger og Spark-jobdefinitioner i arbejdsområdet. For flere detaljer, se Fabric Workspace Settings.

Sådan vedhæfter du miljøet til definitioner af notesbøger eller Spark-job:

  1. Naviger til den specifikke notebook- eller Spark-jobdefinition i Fabric.
  2. Vælg menuen Miljø under fanen Hjem, og vælg miljøet med de konfigurerede egenskaber for Diagnosticering Spark.
  3. Konfigurationen anvendes, når du starter en Spark-session.

Sådan angiver du miljøet som standard for arbejdsområdet:

  1. Gå til arbejdsområdeindstillinger i Fabric.
  2. Find Spark-indstillinger i arbejdsområdeindstillinger (arbejdsområdeindstilling>Data Engineering/Science>Spark-indstillinger).
  3. Vælg fanen Miljø , og vælg miljøet med konfigurerede egenskaber for diagnosticerings spark, og klik på Gem.

Trin 4. Indsend et Apache Spark-program, og få vist loggene og målepunkterne

Du kan bruge Apache Log4j-biblioteket til at skrive brugerdefinerede logge.

Eksempel for 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()

Eksempel for 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")

Trin 5: Se logfilerne i Azure Storage Account

Når du har sendt et job til den konfigurerede Spark-session, kan du få vist logfilerne og målepunkterne på destinationslagerkontoen. Loggene gemmes i tilsvarende stier baseret på forskellige programmer, der identificeres af <workspaceId>.<fabricLivyId>. Alle logfiler er i JSON Lines-format (også kendt som newline-afgrænset JSON eller ndjson), hvilket er praktisk til databehandling.

Tilgængelige konfigurationer

Variantkonfiguration Beskrivelse
spark.synapse.diagnostic.emitters Krævet. De kommaseparerede destinationsnavne for diagnosticeringsudledere. F.eks. MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type Krævet. Indbygget destinationstype. For at aktivere Azure lagringsdestination skal AzureStorage inkluderes i dette felt.
spark.synapse.diagnostic.emitter.<destination>.categories Valgfrit. De markerede logkategorier med kommasepareret. Tilgængelige værdier omfatter DriverLog, ExecutorLog, EventLog, Metrics. Hvis den ikke er sat, er standardværdien alle kategorier.
spark.synapse.diagnostic.emitter.<destination>.auth Krævet. Sæt denne værdi til ServicePrincipalCert, når du bruger Microsoft Entra service principal certificate authentication.
spark.synapse.diagnostic.emitter.<destination>.uri Krævet. Destinationsbeholderen Blob Storage og den valgfrie mappe-URI. F.eks., https://&lt;storage-account&gt;.blob.core.windows.net/<container>/<folder>.
spark.synapse.diagnostic.emitter.<destination>.secret Valgfrit. Det hemmelige indhold (AccessKey eller SAS). Påkrævet hvis man bruger .auth = AccessKey or SAS og .secret.keyVault er ikke specificeret.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault Påkrævet hvis man bruger .auth = AccessKey or SAS og .secret er ikke specificeret. Azure Key Vault-ui'en, hvor hemmeligheden (AccessKey eller SAS) er gemt.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName Påkrævet, hvis .secret.keyVault er angivet. Det hemmelige navn for Azure Key Vault, hvor hemmeligheden (AccessKey eller SAS) er gemt.
spark.synapse.diagnostic.emitter.<destination>.tenantId Påkrævet ved brug .auth = ServicePrincipalCertaf . Azure Active Directory-lejer-ID for Service Principal.
spark.synapse.diagnostic.emitter.<destination>.clientId Påkrævet ved brug .auth = ServicePrincipalCertaf . Applikations-ID'et (klient-)ID'et for Service Principal.
spark.synapse.diagnostic.emitter.<destination>.certificate.keyVault.certificateName Påkrævet, når godkendelsen er ServicePrincipalCert. Navnet på certifikatet, der er gemt i Azure Key Vault. Certifikatet skal indeholde en tilgængelig privat nøgle, og dets offentlige certifikat skal være registreret i Microsoft Entra-appen.
spark.synapse.diagnostic.emitter.<destination>.certificate.keyVault Påkrævet, når godkendelsen er ServicePrincipalCert. Azure Key Vault URL'en, der gemmer certifikatet. Den indloggede Fabric-bruger, der starter Spark-sessionen, skal have tilladelse til at hente certifikatet og dets private nøgle, såsom rollen som Key Vault Certificate User.
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match Valgfrit. Navnene på de kommaseparerede spark-hændelser kan du angive, hvilke hændelser der skal indsamles. Eksempel: SparkListenerApplicationStart,SparkListenerApplicationEnd
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match Valgfrit. De kommaseparerede Log4j-logføringsnavne kan du angive, hvilke logge der skal indsamles. Eksempel: org.apache.spark.SparkContext,org.example.Logger
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match Valgfrit. De kommaseparerede navnesuffikser for minimetrikværdier kan du angive, hvilke målepunkter der skal indsamles. Eksempel: jvm.heap.used
spark.fabric.pools.skipStarterPools Krævet. Denne Spark-egenskab bruges til at gennemtvinge en Spark-session efter behov. Du skal angive værdien til true , når du bruger standardgruppen, for at udløse bibliotekerne for at sende logge og målepunkter.

Logfør dataeksempel

Her er et eksempel på en logpost i 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-arbejdsområder med administreret virtuelt netværk

Opret et administreret privat endpoint for mål-Azure Blob Storage. For detaljerede instruktioner, se Opret og brug administrerede private endpoints i Fabric.

Når det administrerede private endpoint er godkendt, kan brugere begynde at udsende logfiler og metrikker til mål-Azure Blob Storage.

Næste trin