Condividi tramite


Monitorare le applicazioni Apache Spark con Azure Log Analytics (anteprima)

L'estensione dell'emettitore di diagnostica Apache Spark di Fabric è una libreria che consente alle applicazioni Apache Spark di generare i log, i registri eventi e le metriche in più destinazioni, tra cui Azure Log Analytics, Archiviazione di Azure e Hub eventi di Azure.

Questa esercitazione illustra come configurare e generare log e metriche Spark in Log Analytics in Fabric. Una volta configurata, è quindi possibile raccogliere e inviare metriche e log dell'applicazione Apache Spark all'area di lavoro Log Analytics.

Configurare informazioni sull'area di lavoro

Seguire questa procedura per configurare le informazioni necessarie in Fabric.

Passaggio 1: creare un'area di lavoro Log Analytics

Per creare questa area di lavoro, vedere una delle risorse seguenti:

Passaggio 2: Creare un artefatto dell'ambiente Fabric con la configurazione di Apache Spark

Per configurare Spark, creare un artefatto dell'ambiente Fabric e scegliere una delle opzioni seguenti:

Opzione 1: configurare con l'ID e la chiave dell'area di lavoro Log Analytics

  1. Creare un artefatto dell'ambiente di Fabric in Fabric

  2. Aggiungere le proprietà Spark seguenti con i valori appropriati all'artefatto dell'ambiente oppure selezionare Aggiungi da .yml nella barra multifunzione per scaricare il file yaml di esempio, che contiene già le proprietà necessarie.

    • <LOG_ANALYTICS_WORKSPACE_ID>: ID dell'area di lavoro Log Analytics.
    • <LOG_ANALYTICS_WORKSPACE_KEY>: chiave di Log Analytics. Per trovarla, nel portale di Azure andare a Area di lavoro Log Analytics>Agenti>Chiave primaria.
    spark.synapse.diagnostic.emitters: LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    In alternativa, per applicare la stessa configurazione di Azure Synapse, usare le proprietà seguenti oppure selezionare Aggiungi da .yml nella barra multifunzione per scaricare il file yaml di esempio.

    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. Salva e pubblica le modifiche.

Opzione 2: configurare con Azure Key Vault

Nota

Problema noto: impossibile avviare una sessione usando l'opzione 2 provvisoriamente. Attualmente, l'archiviazione dei segreti in Key Vault impedisce l'avvio delle sessioni Spark. Assegnare priorità alla configurazione usando il metodo descritto nell'opzione 1.

È necessario concedere l'autorizzazione del segreto di lettura agli utenti che invieranno applicazioni Apache Spark. Per ulteriori informazioni, vedere Fornire l'accesso a chiavi, certificati e segreti di Key Vault con un controllo degli accessi in base al ruolo di Azure.

Per configurare Azure Key Vault per archiviare la chiave dell'area di lavoro, seguire questa procedura:

  1. Nel portale di Azure andare all'insieme di credenziali delle chiavi.

  2. Nella pagina di impostazioni dell'insieme di credenziali delle chiavi selezionare Segreti, poi Genera importazione.

  3. Nella schermata Crea un segreto, inserire i seguenti valori:

    • Nome: immettere un nome per il segreto. Per impostazione predefinita, immettere SparkLogAnalyticsSecret.
    • Valore: immettere per <LOG_ANALYTICS_WORKSPACE_KEY> il segreto.
    • Lasciare invariati gli altri valori predefiniti. Selezionare Crea.
  4. Creare un artefatto dell'ambiente di Fabric in Fabric

  5. Aggiungere le proprietà Spark seguenti con i valori corrispondenti all'artefatto dell'ambiente oppure selezionare Aggiungi da .yml sulla barra multifunzione nell'artefatto Ambiente per scaricare il file yaml di esempio che include le proprietà spark seguenti.

    • <LOG_ANALYTICS_WORKSPACE_ID>: l'ID area di lavoro Azure Log Analytics.
    • <AZURE_KEY_VAULT_NAME>: nome dell'insieme di credenziali delle chiavi configurato.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (facoltativo): nome del segreto nell'insieme di credenziali delle chiavi per la chiave dell'area di lavoro. Il valore predefinito è SparkLogAnalyticsSecret.
    // Spark properties for LA
    spark.synapse.diagnostic.emitters LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    In alternativa, per applicare la stessa configurazione di Azure Synapse, usare le proprietà seguenti oppure selezionare Aggiungi da .yml nella barra multifunzione per scaricare il file yaml di esempio.

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

    Nota

    È anche possibile archiviare l'ID dell'area di lavoro in Key Vault. Impostare il nome del segreto su SparkLogAnalyticsWorkspaceId o usare la configurazione spark.synapse.logAnalytics.keyVault.key.workspaceId per specificare il nome del segreto ID dell'area di lavoro.

    Per un elenco delle configurazioni di Apache Spark, vedere Configurazioni di Apache Spark disponibili

  6. Salva e pubblica le modifiche.

Passaggio 3: Collegare l'artefatto dell'ambiente ai notebook o alle definizioni dei processi Spark oppure impostarlo come predefinito per l'area di lavoro

Per collegare l'ambiente a notebook o a definizioni di processi Spark:

  1. Passare alla definizione del notebook o del processo Spark in Fabric.
  2. Selezionare il menu Ambiente nella scheda Home e selezionare l'ambiente configurato.
  3. La configurazione verrà applicata dopo l'avvio di una sessione Spark.

Per impostare l'ambiente dell'area di lavoro come predefinito:

  1. Passare a Impostazioni dell'area di lavoro in Fabric.
  2. Trovare le impostazioni di Spark nelle impostazioni dell'area di lavoro (Impostazione area di lavoro -> Impostazioni Ingegneria/Scienza dei dati -> Impostazioni Spark)
  3. Selezionare la scheda Ambiente e scegliere l'ambiente con le proprietà Spark di diagnostica configurate e fare clic su Salva.

Nota

Solo gli amministratori dell'area di lavoro possono gestire le configurazioni. I valori verranno applicati ai notebook e alle definizioni dei processi Spark associate alle impostazioni dell'area di lavoro. Per altre informazioni, vedere Impostazioni dell'area di lavoro Fabric.

Inviare un'applicazione Apache Spark e visualizzare i log e le metriche

Per inviare un'applicazione Apache Spark:

  1. Inviare un'applicazione Apache Spark, con l'ambiente associato, che è stato configurata nel passaggio precedente. È possibile usare uno dei modi seguenti per eseguire questa operazione:

    • Eseguire un notebook in Fabric.
    • Inviare un processo batch Apache Spark tramite una definizione del processo Apache Spark.
    • Eseguire le attività Spark nelle pipeline.
  2. Andare all'area di lavoro Log Analytics specificata e visualizzare le metriche e i log dell'applicazione all'avvio dell'esecuzione dell'applicazione Apache Spark.

Scrivere log di applicazioni personalizzati

È possibile usare la libreria Apache Log4j per scrivere log personalizzati. Ecco alcuni esempi per Scala e PySpark:

Esempio per 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()

Esempio per 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")

Eseguire query sui dati con Kusto

Per eseguire query sugli eventi di Apache Spark:

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

Per eseguire query sui log del driver dell'applicazione Spark e dell'executor:

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

Per eseguire query sulle metriche di Apache Spark:

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

Limiti dei dati

Fabric invia dati di log a Monitoraggio di Azure con l'API di raccolta dati HTTP. I dati inviati all'API di raccolta dati di Monitoraggio di Azure sono soggetti a determinati vincoli:

  • Limite di 30 MB per post nell'API per la raccolta dei dati di Monitoraggio di Azure. Questo limite riguarda le dimensioni di ogni messaggio. Se i dati di un singolo post superano i 30 MB, è necessario suddividerli in blocchi di dimensioni inferiori, che andranno inviati contemporaneamente.
  • Massimo 32 KB per i valori dei campi. Se il valore del campo è superiore a 32 KB, i dati vengono troncati.
  • Il numero massimo di campi consigliato per un determinato tipo è 50. Si tratta di un limite pratico dal punto di vista dell'usabilità e dell'esperienza di ricerca.
  • Una tabella in un'area di lavoro Log Analytics supporta solo fino a 500 colonne.
  • Massimo 45 caratteri per i nomi di colonna.

Creare e gestire avvisi

Gli utenti possono eseguire query per valutare metriche e log a una frequenza impostata e generare un avviso in base ai risultati. Per altre informazioni, vedere Creare, visualizzare e gestire i registri con Monitoraggio di Azure.

Aree di lavoro di Fabric con rete virtuale gestita

Azure Log Analytics non può attualmente essere selezionato come destinazione per i log di Spark e le emissioni di metriche in una rete virtuale gestita perché l'endpoint privato gestito non supporta Log Analytics come origine dati.

Passaggi successivi