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:
- Creare un'area di lavoro nel portale di Azure.
- Creare un'area di lavoro con l'interfaccia della riga di comando di Azure.
- Creare e configurare un'area di lavoro n Monitoraggio di Azure usando PowerShell.
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
Creare un artefatto dell'ambiente di Fabric in Fabric
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.
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:
Nel portale di Azure andare all'insieme di credenziali delle chiavi.
Nella pagina di impostazioni dell'insieme di credenziali delle chiavi selezionare Segreti, poi Genera importazione.
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.
- Nome: immettere un nome per il segreto. Per impostazione predefinita, immettere
Creare un artefatto dell'ambiente di Fabric in Fabric
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 configurazionespark.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
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:
- Passare alla definizione del notebook o del processo Spark in Fabric.
- Selezionare il menu Ambiente nella scheda Home e selezionare l'ambiente configurato.
- La configurazione verrà applicata dopo l'avvio di una sessione Spark.
Per impostare l'ambiente dell'area di lavoro come predefinito:
- Passare a Impostazioni dell'area di lavoro in Fabric.
- Trovare le impostazioni di Spark nelle impostazioni dell'area di lavoro (Impostazione area di lavoro -> Impostazioni Ingegneria/Scienza dei dati -> Impostazioni Spark)
- 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:
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.
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.