Samle logger og metrikker med Azure Log Analytics

Denne artikkelen beskriver Azure Log Analytics-destinasjonen for Fabric Apache Spark Diagnostic Emitter ved å bruke Log Ingestion API.

Fabric Apache Spark Diagnostic Emitter gir en felles konfigurasjonsmodell for Spark-diagnostikk på tvers av destinasjoner. For Azure Log Analytics er Log Ingestion API den anbefalte inntaksmodellen.

Denne artikkelen viser hvordan man konfigurerer emitter-egenskaper, ruter Apache Spark-logger, hendelseslogger og målinger til Log Analytics, og spør de innsamlede dataene for overvåking og feilsøking.

For arkitektur og destinasjonsvalg på tvers av Fabric Apache Spark Diagnostic Emitter, se Fabric Apache Spark Diagnostic Emitter oversikt.

Migrer fra Data Collector API-et

Hvis du for øyeblikket bruker HTTP Data Collector API, migrer til Log Ingestion API for å tilpasse deg nåværende Azure Monitor-inntaksmønstre.

Viktige endringer i den nye modellen:

  • Skjemadefinisjoner er eksplisitte gjennom Data Collection Rules (DCR), som gir deg forutsigbar skjemavalidering og mer konsistente spørringsresultater enn den eldre friformede nyttelastmetoden.
  • Inntaket rutes gjennom Data Collection Endpoints (DCEs) og DCR-mappinger, som gir en mer kontrollert inntastingsvei enn å poste direkte til Data Collector API-endepunktet.
  • Autentisering støtter både service principal client secret og sertifikatbaserte alternativer.
  • Emittertypen endres fra AzureLogAnalytics til AzureLogIngestion.

Migrering inkluderer vanligvis opprettelse av DCR- og DCE-ressurser, oppdatering av Fabric-miljø Spark-egenskaper, og validering av datainntak i tilpassede Log Analytics-tabeller.

Oversikt over logginntaks-API-et

For Apache Spark-diagnostikk i Microsoft Fabric tilbyr Log Ingestion API en strukturert inntaksmodell for autentisering, skjemadefinisjon, ruting og tabelllevering i Azure Log Analytics.

Nøkkelkomponenter

Komponent Formål
App-registreringsinformasjon Gir Microsoft Entra-appidentitet som brukes til å autentisere Log Ingestion API-forespørsler med enten en klienthemmelighet eller et sertifikat.
Log Analytics-tabell Gir den måltilpassede tabellen hvor innkjøpte Spark-diagnostikk lagres for forespørsler og overvåking.
Datainnsamlingsregel (DCR) Definerer inndatastrømmer, skjemakartlegging og valgfrie transformasjoner for inntasting.
Datainnsamlingsendepunkt (DCE) Gir inntastingsendepunktet URI (dceUri) som klienter bruker for å sende data gjennom DCR-basert ruting.

Kun brukeropprettede DCR-er konfigurert for Log Ingestion API kan brukes til programmatisk inntasting.

Trinnvis konfigurasjon

Trinn 1. Forbered Log Analytics-arbeidsområdet

Et Log Analytics-arbeidsområde kreves for å motta Spark-diagnostikk. Det er den grunnleggende lagrings- og spørringsenheten for Azure Monitor Logs.

Hvis du ikke har en, opprett et Log Analytics arbeidsområde i Azure-portalen.

Viktig!

Når du fullfører følgende steg, oppretter ressursene Data Collection Endpoint (DCE) og Data Collection Rule (DCR) i samme region som Log Analytics-arbeidsområdet.

Trinn 2. Opprett et datainnsamlingsendepunkt (DCE)

Create a Data Collection Endpoint (DCE) i Azure portal. DCE-en gir endepunkts-URI-en som du konfigurerer i Spark-egenskapene for Log Ingestion API. Regionen til DCE-en må være den samme som regionen til ditt Log Analytics-arbeidsområde.

  1. I portalen Azure, gå til Monitor i venstre navigasjonspanel.

  2. Under Innstillinger, velg datainnsamlingsendepunkter, og velg deretter Opprette.

    Skjermbilde som viser å opprette et datainnsamlingsendepunkt.

  3. Opprett endepunktet, og merk deretter DCE-navnet (for eksempel DCEdemo).

Trinn 3. Forbered eksempel på JSON-skjema

Når du lager tilpassede loggtabeller, må du konfigurere en Data Collection Rule (DCR). Basert på datastrømdefinisjonene spesifisert i DCR, genererer systemet automatisk det tilsvarende tabellskjemaet i ditt Log Analytics-arbeidsområde.

Følgende forhåndsdefinerte JSON-skjema prøver hver kart til en spesifikk datatype. Last ned eksempelet som passer til ditt scenario, og last det opp når du oppretter den tilhørende tilpassede tabellen og DCR.

Her er et eksempel på en loggtabell med JSON-skjema for Spark-driver- og executorlogger i Azure Log Analytics. Bruk dette skjemaet som referanse når du lager dine egendefinerte tabeller og DCR-er for logginntak.

[
  {
    "applicationId_s": "<APPLICATION_ID>",
    "applicationName_s": "<NOTEBOOK_NAME>",
    "artifactId_g": "<ARTIFACT_GUID>",
    "artifactType_s": "SynapseNotebook",
    "capacityId_g": "<CAPACITY_GUID>",
    "Category": "Log",
    "executorId_s": "driver",
    "executorMax_s": 9,
    "executorMin_s": 1,
    "ExtraFields": {
      "Category": "Log",
      "JobId": "1"
    },
    "fabricEnvId_g": "<FABRIC_ENV_GUID>",
    "fabricLivyId_g": "<FABRIC_LIVY_GUID>",
    "fabricTenantId_g": "<FABRIC_TENANT_GUID>",
    "fabricWorkspaceId_g": "<FABRIC_WORKSPACE_GUID>",
    "isHighConcurrencyEnabled_s": false,
    "Level": "INFO",
    "logger_name_s": "org.apache.spark.scheduler.dynalloc.ExecutorMonitor",
    "Message": "Executor 1 is removed.",
    "thread_name_s": "spark-listener-group-executorManagement",
    "TimeGenerated": "<TIME_GENERATED>",
    "userId_g": "<USER_ID>"
  }
]

Trinn 4. Opprett egendefinert tabell (Direct Ingest)

Opprett en tilpasset tabell i Log Analytics-arbeidsområdet ditt med alternativet Log Ingestion API, og last opp JSON-skjemaeksempelet til den tilknyttede DCR-en. Dette steget kreves for å sette opp destinasjonen for Spark-diagnostikk og sikre at de innsamlede dataene følger det forventede skjemaet. Området for Log Analytics-arbeidsområdet, DCE og DCR må være det samme for vellykket inntak.

  1. I portalen Azure portal åpner du arbeidsområdet ditt Log Analytics (for eksempel loganalyticsworkspacedemo).

  2. Velg tabeller>Opprett>ny tilpasset logg (Direct Ingest).

    Skjermbilde som viser å opprette en egendefinert tabell direkte.

  3. Inn i bordinnstillingene:

    • Tabellnavn: For eksempel SparkLogTest (suffikset "_CL" legges automatisk til).
    • Tabellplan: Analyse
    • Datainnsamlingsregel: Opprett en ny DCR (for eksempel SparkLogTestrule).
    • Datainnsamlingsendepunkt: Velg DCE fra steget Opprett et datainnsamlingsendepunkt (DCE) (for eksempel DCEdemo).

    Skjermbilde som viser opprettelse av egendefinert tabell, direkte inntasting, konfigurer.

  4. Velg Neste.

  5. I Schema og Transformasjon, last opp JSON-skjemaprøven. Du trenger ikke konfigurere DCR-transformasjon fordi skjemaet er fullt stabilisert på klientsiden.

Trinn 5. Forbered tjenesteprinsippet for autentisering

  1. Registrer en app på Microsoft Entra ID.

    Skjermbilde som viser tenantId og clientId.

  2. Registrer TenantId, ClientId og ClientSecret (hvis du bruker Client Secret-autentisering). Du bruker disse verdiene i Spark-konfigurasjonen i steg 6.

  3. Gi appen rollen Monitoring Metrics Publisher på hver tabells DCR-ressurs. For rollefordelingssteg, se Tildel Azure roller ved å bruke Azure-portalen.

    Skjermbilde som viser overvåkingsmålinger Publisher rollefordeling.

Trinn 6. Konfigurer Spark-egenskaper

For å konfigurere Spark, opprett et miljø i Fabric og velg ett av følgende autentiseringsalternativer. Bruk kun ett alternativ for en gitt emitter.

Et miljø i Fabric lagrer Spark-innstillinger og biblioteker som notatbøker og Spark-jobbdefinisjoner bruker under kjøring. For steg for å opprette en, se Lag, konfigurer og bruk et miljø i Fabric.

  • Velg alternativ 1 hvis du vil ha en enklere oppsett ved å bruke en klienthemmelighet.
  • Velg Alternativ 2 hvis organisasjonen din krever sertifikatbasert autentisering og sentralisert sertifikathåndtering i Azure Key Vault.

I begge alternativene kan du velge Legg til fra .yml i miljøet for å importere en .yml konfigurasjonsfil.

Alternativ 1: Konfigurer med tjenesteprinsipp og klienthemmelig

Bruk dette alternativet for rask oppsett med tjenesteprincipal-legitimasjon og en klienthemmelighet.

  1. Lag et miljø i Fabric.

  2. Legg til følgende Spark-egenskaper med passende verdier i miljøet, eller velg Legg til fra .yml i båndet for å importere en .yml konfigurasjonsfil.

    spark.synapse.diagnostic.emitters: <EMITTER_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: AzureLogIngestion
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: DriverLog,ExecutorLog,EventLog,Metrics
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.dceUri: https://<DCE_NAME>.<REGION>.ingest.monitor.azure.com
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.logDcr: <LOG_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.logStream: <LOG_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.eventDcr: <EVENT_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.eventStream: <EVENT_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metricDcr: <METRIC_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metricStream: <METRIC_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metaDcr: <META_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metaStream: <META_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.secret: <SP_CLIENT_SECRET>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.tenantId: <SP_TENANT_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.clientId: <SP_CLIENT_ID>
    spark.fabric.pools.skipStarterPools: 'true'
    
  3. Lagre og publiser endringene.

Alternativ 2: Konfigurer med autentisering av tjenesteprincipal-sertifikat

Bruk dette alternativet når organisasjonen din krever sertifikatbasert autentisering.

Før du begynner, sørg for at tjenesteansvarlig er opprettet med et sertifikat. For mer informasjon, se Opprett en tjenesteprinsipp som inneholder et sertifikat ved å bruke Azure CLI.

  1. Lag et miljø i Fabric.

  2. Legg til følgende Spark-egenskaper med passende verdier i miljøet, eller velg Legg til fra .yml i båndet for å importere en .yml konfigurasjonsfil.

    spark.synapse.diagnostic.emitters: <EMITTER_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: AzureLogIngestion
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: DriverLog,ExecutorLog,EventLog,Metrics
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.dceUri: https://<DCE_NAME>.<REGION>.ingest.monitor.azure.com
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.logDcr: <LOG_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.logStream: <LOG_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.eventDcr: <EVENT_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.eventStream: <EVENT_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metricDcr: <METRIC_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metricStream: <METRIC_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metaDcr: <META_DCR_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metaStream: <META_STREAM_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.certificate.keyVault.certificateName: <SP_CERT-NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.certificate.keyVault: https://<KEYVAULT_NAME>.vault.azure.net/
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.tenantId: <SP_TENANT_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.clientId: <SP_CLIENT_ID>
    spark.fabric.pools.skipStarterPools: 'true'
    
  3. Lagre og publiser endringer.

Trinn 7. Koble miljøet til notatbøker eller Spark-jobbdefinisjoner, eller sett det som arbeidsområdestandard

Bruk en av følgende tilnærminger basert på ditt ansvarsområde:

  • Legg miljøet til spesifikke notatbøker eller Spark-jobbdefinisjoner når du ønsker målrettet utrulling, testing eller kontroll per punkt.
  • Sett miljøet som arbeidsområdestandard når du vil ha konsistente Spark-diagnostikkinnstillinger brukt på tvers av arbeidsområdet.

For å knytte miljøet til notatbøker eller Spark-jobbdefinisjoner:

  1. Naviger til notatboken din 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.

For å sette miljøet som standard arbeidsområde:

  1. Gå til Workspace-innstillinger i Fabric.
  2. Finn Spark-innstillinger i arbeidsområdeinnstillinger (arbeidsområdeinnstilling>Data Engineering/Science>Spark-innstillinger).
  3. Velg Miljø-fanen , og velg miljøet med egenskaper for diagnosegnistegenskap konfigurert, og velg Lagre.

Trinn 8. Kjør Spark-arbeidsbelastninger og verifiser logger og måleparametere

Bruk miljøet du opprettet og la ved i forrige seksjon, kjør deretter Spark-arbeidsbelastninger og verifiser inntastingen i Log Analytics.

  1. Kjør Spark-arbeidsbelastninger ved å bruke miljøet som var konfigurert i forrige avsnitt. Du kan bruke en av følgende metoder:
    • Kjør en notatbok i Fabric.
    • Send inn en Spark-batchjobb gjennom en Spark-jobbdefinisjon.
    • Kjør Spark-aktiviteter i en pipeline.
  2. Åpne det målrettede arbeidsområdet Log Analytics og verifiser at logger og målinger er hentet inn for den kjørende arbeidsbelastningen.
  3. For å validere inntasting og inspisere poster, bruk Kusto-eksemplene i Query data with Kusto.

Skrive egendefinerte programlogger

Bruk egendefinerte applikasjonslogger når du ønsker hendelser på forretningsnivå eller app-spesifikke i tillegg til plattformdiagnostikk. Disse loggene sendes gjennom samme diagnostiske pipeline og vises i Log Analytics sammen med Spark-logger, hendelseslogger og måleparametere.

Bruk Apache Log4j i Spark-koden din for å sende ut tilpassede loggmeldinger. Følgende eksempler viser et minimalt mønster for Scala og PySpark.

Scala-eksempel:

%%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-eksempel:

%%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

Bruk Kusto-spørringer for å validere at inntaket fungerer og for å undersøke Spark-eksekveringsatferd. Erstatt plassholderverdier som {FabricWorkspaceId}, {ArtifactId}, og {LivyId} med verdier fra din egen gjennomspilling.

Start med hendelses- og loggforespørsler for å bekrefte dataankomst, og bruk deretter metriske spørringer for ytelsesanalyse.

Slik spør du Apache Spark-hendelser:

SparkEventTest_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:

SparkLogTest_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:

SparkMetricsTest_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

For å spørre plattformmetadata:

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

Fabric-arbeidsområder med administrert virtuelt nettverk

Fabric-støtte som muliggjør beskyttelse mot dataeksfiltrasjon for arbeidsområder. Med eksfiltrasjonsbeskyttelse kan ikke logger og metrikker sendes direkte til destinasjonsendepunktene. Du kan opprette tilsvarende administrerte private endepunkter for forskjellige destinasjonsendepunkter i dette scenariet.

Tilgjengelige Apache Spark-konfigurasjoner

Tabellen nedenfor viser Spark-konfigurasjoner for å sende logger og metrikker til Azure Log Analytics ved å bruke Log Ingestion API.

Viktig!

For Azure Log Analytics, sett spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type til AzureLogIngestion. AzureLogAnalytics er den eldre HTTP Data Collector API-typen. For legacy-veiledning, se Monitor Apache Spark-applikasjoner med Azure Log Analytics.

Konfigurasjon Beskrivelse
spark.synapse.diagnostic.emitters De kommadelte målnavnene for diagnosedemittere. For eksempel MyDest1,MyDest2.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type Innebygd måltype. For å aktivere Azure Log Analytics via Log Ingestion API, sett denne verdien til AzureLogIngestion.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories De kommadelte valgte loggkategoriene. Tilgjengelige verdier inkluderer DriverLog, , ExecutorLog, EventLogMetrics. Hvis ikke satt, er standardverdien alle kategorier.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.dceUri Data Collection Endpoint (DCE) URI brukes til inntasting når data rutes via Data Collection Rules (DCR).
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.logDcr Data Collection Rule (DCR)-ressurs-ID-en som brukes til å rute Spark-logger til destinasjonen.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.logStream Strømnavnet er definert i Data Collection Rule (DCR) for Spark-logger.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.eventDcr Data Collection Rule (DCR)-ressurs-ID-en som brukes til å rute Spark-hendelseslogger.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.eventStream Strømnavnet er definert i Data Collection Rule (DCR) for Spark-hendelseslogger.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metricDcr Data Collection Rule (DCR)-ressurs-ID-en som brukes til å rute Spark-metrikker.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metricStream Strømnavnet definert i Data Collection Rule (DCR) for Spark-metrikker.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metaDcr Data Collection Rule (DCR)-ressurs-ID-en som brukes til å rute Spark-metadata.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.metaStream Strømnavnet definert i Data Collection Rule (DCR) for Spark-metadata.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.certificate.keyVault.certificateName Navnet på sertifikatet lagret i Azure Key Vault, brukt til autentisering.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.certificate.keyVault Azure Key Vault URI som lagrer autentiseringssertifikatet.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.tenantId Microsoft Entra-leietaker-ID-en som brukes til autentisering.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.clientId Klient-ID-en (applikasjons-ID-en) registrert i Microsoft Entra ID.
spark.fabric.pools.skipStarterPools Denne Spark-egenskapen brukes til å fremtvinge en behovsbetinget Spark-økt. Sett verdien til når true du bruker standardpoolen for å utløse bibliotekene til å sende logger og metrikker.
spark.synapse.diagnostic.emitter.<EMITTER_NAME>.secret Klienthemmeligheten knyttet til Microsoft Entra ID (Azure AD)-applikasjonen, brukt sammen med leietaker-ID og klient-ID for å autentisere senderen ved sending av diagnostiske data. Denne innstillingen er gjensidig utelukkende med sertifikatbasert autentisering—konfigurer enten klienthemmeligheten eller sertifikatet, men ikke begge.