Del via


Overvåk Apache Spark-programmer med Azure-logganalyse (forhåndsversjon)

Utvidelsen Fabric Apache Spark-diagnosedemitter er et bibliotek som gjør det mulig for Apache Spark-programmer å avgi logger, hendelseslogger og måledata til flere destinasjoner, inkludert Azure Log Analytics, Azure Storage og Azure-hendelseshuber.

I denne opplæringen lærer du hvordan du konfigurerer og avgir Spark-logger og -måledata til Logganalyse i Stoff. Når du er konfigurert, kan du samle inn og analysere Apache Spark-programmetrikk og -logger i arbeidsområdet for logganalyse.

Konfigurer arbeidsområdeinformasjon

Følg disse trinnene for å konfigurere nødvendig informasjon i Fabric.

Trinn 1: Opprette et arbeidsområde for logganalyse

Se en av følgende ressurser for å opprette dette arbeidsområdet:

Trinn 2: Opprette en stoffmiljøartefakt med Apache Spark-konfigurasjon

Hvis du vil konfigurere Spark, oppretter du en stoffmiljøartefakt og velger ett av følgende alternativer:

Alternativ 1: Konfigurer med Arbeidsområde-ID for logganalyse og nøkkel

  1. Opprett en stoffmiljøartefakt i stoff

  2. Legg til følgende Spark-egenskaper med de riktige verdiene i miljøartefakten, eller velg Legg til fra .yml på båndet for å laste ned eksempelfilen yaml, som allerede inneholder de nødvendige egenskapene.

    • <EMITTER_NAME>: Navnet på emmiter.
    • <LOG_ANALYTICS_WORKSPACE_ID>: Arbeidsområde-ID for logganalyse.
    • <LOG_ANALYTICS_WORKSPACE_KEY>: Logganalysenøkkel. Hvis du vil finne dette, går du til i Azure-portalen.
    spark.synapse.diagnostic.emitters: <EMITTER_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Alternativt kan du bruke samme konfigurasjon som Azure Synapse, bruke følgende egenskaper eller velge Legg til fra .yml på båndet for å laste ned eksempelfilen for yaml.

    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. Lagre og publiser endringer.

Alternativ 2: Konfigurer med Azure Key Vault

Merk

Du må gi lesehemmelig tillatelse til brukerne som skal sende Inn Apache Spark-programmer. Hvis du vil ha mer informasjon, kan du se Gi tilgang til Key Vault-nøkler, sertifikater og hemmeligheter med en rollebasert tilgangskontroll i Azure.

Følg disse trinnene for å konfigurere Azure Key Vault til å lagre arbeidsområdenøkkelen:

  1. Gå til Key Vault i Azure-portalen.

  2. Velg Hemmeligheter på innstillingssiden for nøkkelhvelvet, og generer /importer.

  3. Skriv inn følgende verdier på skjermbildet Opprett en hemmelig skjerm:

    • Navn: Skriv inn et navn for hemmeligheten. Skriv inn SparkLogAnalyticsSecretfor standardverdien.
    • Verdi: Skriv inn <LOG_ANALYTICS_WORKSPACE_KEY> for hemmeligheten.
    • La de andre verdiene stå som standard. Velg deretter Opprett.
  4. Opprett en stoffmiljøartefakt i stoff

  5. Legg til følgende Spark-egenskaper med tilsvarende verdier i miljøartefakten, eller velg Legg til fra .yml på båndet i miljøartefakten for å laste ned eksempel-yaml-filen som inkluderer følgende Spark-egenskaper.

    • <EMITTER_NAME>: Navnet på emmiter.
    • <LOG_ANALYTICS_WORKSPACE_ID>: Arbeidsområde-ID for logganalyse.
    • <AZURE_KEY_VAULT_URI>: Nøkkelhvelv-urien du konfigurerte.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (valgfritt): Det hemmelige navnet i nøkkelhvelvet for arbeidsområdenøkkelen. Standardverdien er SparkLogAnalyticsSecret.
    // Spark properties for EMITTER_NAME
    spark.synapse.diagnostic.emitters <EMITTER_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.secret.keyVault: <AZURE_KEY_VAULT_URI>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Alternativt kan du bruke samme konfigurasjon som Azure Synapse, bruke følgende egenskaper eller velge Legg til fra .yml på båndet for å laste ned eksempelfilen for yaml.

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.keyVault.name: <AZURE_KEY_VAULT_URI>
    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.
    

    Merk

    Du kan også lagre arbeidsområde-ID-en i Key Vault. Angi det hemmelige navnet til SparkLogAnalyticsWorkspaceId, eller bruk konfigurasjonen spark.synapse.logAnalytics.keyVault.key.workspaceId til å angi det hemmelige navnet på arbeidsområde-ID-en.

  6. Lagre og publiser endringer.

Trinn 3: Legg til miljøartefakten i notatblokker eller spark-jobbdefinisjoner, eller angi den som standard for arbeidsområdet

Merk

Bare administratorer av arbeidsområdet kan angi et miljø som standard for et arbeidsområde.

Når det er angitt, blir det standardmiljøet for alle notatblokker og Spark-jobbdefinisjoner i arbeidsområdet. Hvis du vil ha mer informasjon, kan du se Innstillinger for stoffarbeidsområde.

Slik legger du til miljøet i notatblokker eller Spark-jobbdefinisjoner:

  1. Gå til notatblokken eller Spark-jobbdefinisjonen i Fabric.
  2. Velg Miljø-menyen på Hjem-fanen, og velg det konfigurerte miljøet.
  3. Konfigurasjonen vil bli brukt etter at du har startet en Spark-økt.

Slik angir du miljøet som standard for arbeidsområdet:

  1. Gå til innstillinger for arbeidsområde i Fabric.
  2. Finn Spark-innstillingene i innstillingene for arbeidsområdet (arbeidsområdeinnstilling –> Dataingeniør ing/Science –> Spark-innstillinger)
  3. Velg Miljø-fanen , og velg miljøet med egenskaper for diagnosegnistegenskap konfigurert, og klikk Lagre.

Send inn et Apache Spark-program og vis loggene og måledataene

Slik sender du inn et Apache Spark-program:

  1. Send inn et Apache Spark-program, med det tilknyttede miljøet, som ble konfigurert i forrige trinn. Du kan bruke følgende måter å gjøre dette på:

    • Kjør en notatblokk i Fabric.
    • Send inn en kjørseljobb for Apache Spark gjennom en Apache Spark-jobbdefinisjon.
    • Kjør Spark-aktivitetene dine i Pipelines.
  2. Gå til det angitte logganalysearbeidsområdet, og vis deretter programmetrikkene og loggene når Apache Spark-programmet begynner å kjøre.

Skrive egendefinerte programlogger

Du kan bruke Apache Log4j-biblioteket til å skrive egendefinerte logger. Her er eksempler for Scala og PySpark:

Skaleraeksempel:

%%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 på 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")

Spørringsdata med Kusto

Slik spør du Apache Spark-hendelser:

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

Slik spør du spark-programdriveren og executor-loggene:

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

Slik spør du Apache Spark-måledata:

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

Opprette og behandle varsler

Brukere kan spørre for å evaluere måledata og logger med en angitt frekvens, og utløse et varsel basert på resultatene. Hvis du vil ha mer informasjon, kan du se Opprette, vise og behandle loggvarsler ved hjelp av Azure Monitor.

Stoffarbeidsområder med administrert virtuelt nettverk

Azure Log Analytics kan for øyeblikket ikke velges som et mål for Spark-logger og måledata i et administrert virtuelt nettverk fordi det administrerte private endepunktet ikke støtter Log Analytics som datakilde.

Tilgjengelige Apache Spark-konfigurasjoner

Bruk spark.synaspe.diagnostic.emitter.* prefiks til å konfigurere logganalyseinformasjonen.

Konfigurasjon Beskrivelse
spark.synapse.diagnostic.emitters Påkrevd. De kommadelte målnavnene for diagnosedemittere. For eksempel MyDest1,MyDest2.
spark.synapse.diagnostic.emitter.<destination>.type Påkrevd. Innebygd måltype. For å aktivere Azure Log Analytics-destinasjonen må AzureLogAnalytics inkluderes i dette feltet.
spark.synapse.diagnostic.emitter.<destination>.categories Valgfritt. De kommadelte valgte loggkategoriene. Tilgjengelige verdier inkluderer Log, EventLog, Metrics. Hvis den ikke er angitt, er standardverdien alle kategorier.
spark.synapse.diagnostic.emitter.<destination>.workspaceId Påkrevd. Arbeidsområde-ID for mållogganalyse.
spark.synapse.diagnostic.emitter.<destination>.secret Valgfritt. Det hemmelige innholdet i arbeidsområdet.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault Obligatorisk hvis .secret ikke er angitt. Det Azure Key-hvelvet URI der hemmeligheten er lagret.
park.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName Obligatorisk hvis .secret.keyVault er angitt. Det hemmelige navnet på Azure Key-hvelvet der LA-arbeidsområdehemmeligheten er lagret.
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match Valgfritt. Med kommadelt spark-hendelsesnavn kan du angi hvilke hendelser som skal samles inn. Eksempel: SparkListenerApplicationStart,SparkListenerApplicationEnd.
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match Valgfritt. De kommadelte log4j-loggernavnene, kan du angi hvilke logger som skal samles inn. Eksempel: org.apache.spark.SparkContext,org.example.Logger.
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match Valgfritt. De kommadelte spark-metriske navnesuffiksene kan du angi hvilke måledata som skal samles inn. Eksempel: jvm.heap.used.
spark.fabric.pools.skipStarterPools Påkrevd. Denne Spark-egenskapen brukes til å fremtvinge en behovsbetinget Spark-økt. Du bør angi verdien til true når du bruker standardutvalget for å utløse bibliotekene til å avgi logger og måledata.

Bruk spark.synapse.logAnalytics.* prefiks til å konfigurere logganalyseinformasjonen.

Konfigurasjonsnavn Default value Beskrivelse
spark.synapse.logAnalytics.enabled usann Hvis du vil aktivere Log Analytics-vasken for Spark-programmene, er sann. Ellers usann.
spark.synapse.logAnalytics.workspaceId - Arbeidsområde-ID for mållogganalyse.
spark.synapse.logAnalytics.secret - Arbeidsområdehemmeligheten for mållogganalyse.
spark.synapse.logAnalytics.keyVault.name - Nøkkelhvelv-URI-en for Log Analytics-ID-en og nøkkelen.
spark.synapse.logAnalytics.keyVault.key.workspaceId SparkLogAnalyticsWorkspaceId Det hemmelige navnet på nøkkelhvelvet for arbeidsområde-ID-en for logganalyse.
spark.synapse.logAnalytics.keyVault.key.secret SparkLogAnalyticsSecret Det hemmelige navnet på Key Vault for arbeidsområdet logganalyse.
spark.synapse.logAnalytics.uriSuffix ods.opinsights.azure.com Arbeidsområdet log analytics URI suffiks. Hvis arbeidsområdet ikke er globalt i Azure, må du oppdatere URI-suffikset i henhold til den respektive skyen.
spark.synapse.logAnalytics.filter.eventName.match - Valgfritt. Med kommadelt spark-hendelsesnavn kan du angi hvilke hendelser som skal samles inn. Eksempel: SparkListenerJobStart,SparkListenerJobEnd.
spark.synapse.logAnalytics.filter.loggerName.match - Valgfritt. De kommadelte log4j-loggernavnene, kan du angi hvilke logger som skal samles inn. Eksempel: org.apache.spark.SparkContext,org.example.Logger.
spark.synapse.logAnalytics.filter.metricName.match - Valgfritt. De kommadelte spark-metriske navnesuffiksene kan du angi hvilke måledata som skal samles inn. Eksempel: jvm.heap.used.
spark.fabric.pools.skipStarterPools sann Påkrevd. Denne Spark-egenskapen brukes til å fremtvinge en behovsbetinget Spark-økt.

Merk

  • For Microsoft Azure drevet av 21Vianet bør spark.synapse.logAnalytics.uriSuffix-parameteren be ods.opinsights.azure.cn.
  • For Azure Government bør spark.synapse.logAnalytics.uriSuffix-parameteren være ods.opinsights.azure.us.
  • For alle skyer unntatt Azure, bør spark.synapse.logAnalytics.keyVault.name-parameteren være det fullstendige domenenavnet (FQDN) i Key Vault. For eksempel AZURE_KEY_VAULT_NAME.vault.usgovcloudapi.net for AzureUSGovernment.

Vanlige spørsmål

  1. Hvorfor mottar ikke Logganalyse logger eller genererer kundetabellen?

    Hvis logganalysearbeidsområdet ikke mottar logger eller kundetabellen ikke genereres, kan du feilsøke med følgende fremgangsmåte:

    1. Kontroller logganalysekonfigurasjon: Kontroller at informasjonen om logganalysearbeidsområdet er riktig konfigurert i Spark-programmet. Hvis du vil bekrefte konfigurasjonen, går du til Spark UI eller Spark History Server, går til «Miljø»-fanen og ser gjennom innstillingene under Spark-egenskaper.

    2. Kontroller tillatelser:

      • Bekreft at Log Analytics har de nødvendige skrivetillatelsene.
      • Hvis KeyVault er involvert, må du kontrollere at keyvault-lesetillatelsene er riktig tilordnet til den aktuelle tjenesten eller brukeren.
    3. Undersøk datagrenser: Fabric sender loggdata til Azure Monitor ved hjelp av HTTP Data Collector-API-en. Dataene som er lagt inn i API-en for Azure Monitor Data-innsamling, er underlagt visse begrensninger:

      • Maksimalt 30 MB per innlegg i Azure Monitor Data Collector API. Dette er en størrelsesgrense for ett enkelt innlegg. Hvis dataene fra ett enkelt innlegg overskrider 30 MB, bør du dele dataene i mindre størrelser og sende dem samtidig.
      • Maksimum 32 kB for feltverdier. Hvis feltverdien er større enn 32 kB, avkortes dataene.
      • Anbefalt maksimalt 50 felt for en gitt type. Dette er en praktisk grense fra et brukervennlighets- og søkeopplevelsesperspektiv.
      • Tabeller i Logganalyse-arbeidsområder støtter bare opptil 500 kolonner.
      • Maksimalt 45 tegn for kolonnenavn.
  2. Hvordan kan jeg bekrefte at Logganalyse-tillatelser er riktig konfigurert?

    Kontroller følgende tillatelser for å sikre at Log Analytics kan motta logger:

    1. skrivetillatelser for logganalyse:

      • Logg på Azure-portalen, og gå til logganalysearbeidsområdet.
      • Bekreft at brukeren, tjenestekontohaveren eller programmet er tilordnet rollen «Logganalysebidragsyter» eller Bidragsyter i delen «Tilgangskontroll)».
    2. Lesetillatelser for KeyVault (hvis aktuelt):

      • Hvis logger involverer KeyVault, kan du gå til Inndelingen KeyVaults «Access-policyer» eller «Tilgangskontroll (IAM)».
      • Sørg for at den aktuelle brukeren eller tjenestekontohaveren har lesetillatelser, for eksempel «Key Vault Reader»-rollen. Hvis tillatelsene er feilkonfigurert, kan du kontakte Azure-administratoren for å justere rolletilordningene og vente på at tillatelsene synkroniseres (dette kan ta noen minutter).
  3. Hvorfor blir det tregt å starte en Spark-økt når du konfigurerer disse spark-egenskapene?

    Dette skjer fordi du har konfigurert spark.fabric.pools.skipStarterPool: true, som hopper over startutvalget (en type live pool) og i stedet bruker et behovsbetinget utvalg for å starte Spark-økten. Det tar vanligvis rundt 3 minutter å opprette og initialisere å starte en spark-økt i on-demand-utvalget.

    Årsaken er at diagnosebiblioteket krever at bestemte konfigurasjoner brukes ved oppstart av Spark-økt, en prosess som bare støttes av behovsbetingede utvalg, ettersom de opprettes dynamisk under oppstart. Live Pool-økter er derimot forhåndsbe startet og kan ikke bruke disse konfigurasjonene under initialiseringen. Hvis du vil ha mer informasjon om Fabric Spark-databehandling, kan du se Apache Spark-databehandling for datateknikk og datavitenskap.

Neste trinn