Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
In questo tutorial, imparerai come configurare e emettere i log e le metriche di Spark in Log Analytics di 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 seguenti proprietà Spark 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.
-
<EMITTER_NAME>
: Il nome per emettitore. -
<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: <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.
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
È 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:
Vai al tuo Key Vault nel portale di Azure.
Nella pagina di impostazioni dell'insieme di credenziali delle chiavi, selezionare Segreti, poi Genera/Importa.
Nella schermata Crea un segreto, inserire i seguenti valori:
-
Nome: immettere un nome per il segreto. Per impostazione predefinita, immettere
SparkLogAnalyticsSecret
. -
Valore: Inserisci il valore per il segreto
<LOG_ANALYTICS_WORKSPACE_KEY>
. - 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 seguenti proprietà Spark 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.
-
<EMITTER_NAME>
: il nome di emettitore. -
<LOG_ANALYTICS_WORKSPACE_ID>
: l'ID dell'area di lavoro di Log Analytics. -
<AZURE_KEY_VAULT_URI>
: L'URI della cassaforte delle chiavi che hai configurato. -
<AZURE_KEY_VAULT_SECRET_KEY_NAME>
(facoltativo): nome del segreto nell'archivio chiavi per la chiave dello spazio di lavoro. Il valore predefinito è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.
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_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.
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.-
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
Nota
Solo gli amministratori dell'area di lavoro possono designare un ambiente come predefinito per un'area di lavoro.
Una volta impostata, diventa l'ambiente predefinito per tutti i notebook e le definizioni dei processi Spark all'interno dell'area di lavoro. Per altre informazioni, vedere Impostazioni dell'area di lavoro Fabric.
Per collegare l'ambiente a notebook o a definizioni di attività Spark:
- Accedi alla definizione del tuo notebook o job 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.
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.
- Esegui 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 di 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 interrogare i log del driver e dell'executor dell'applicazione Spark:
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
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 ulteriori informazioni, vedere Creare, visualizzare e gestire gli avvisi di log utilizzando 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.
Configurazioni di Apache Spark disponibili
Uso del prefisso spark.synaspe.diagnostic.emitter.*
per configurare le informazioni di Log Analytics.
Configurazione | Descrizione |
---|---|
spark.synapse.diagnostic.emitters |
Obbligatorio. Nomi delle destinazioni degli emettitori di diagnostica separati da virgole. Ad esempio, MyDest1 ,MyDest2 . |
spark.synapse.diagnostic.emitter.<destination>.type |
Obbligatorio. Tipo di destinazione predefinito. Per abilitare la destinazione di Azure Log Analytics, AzureLogAnalytics deve essere incluso in questo campo. |
spark.synapse.diagnostic.emitter.<destination>.categories |
Opzionale. Categorie di log selezionate separate da virgole. I valori disponibili includono Log , EventLog , Metrics . Se non è impostato, il valore predefinito è tutte le categorie. |
spark.synapse.diagnostic.emitter.<destination>.workspaceId |
Obbligatorio. ID dell'area di lavoro Log Analytics di destinazione. |
spark.synapse.diagnostic.emitter.<destination>.secret |
Opzionale. Il contenuto segreto dell'area di lavoro. |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
Obbligatorio se non è specificato .secre t. L'insieme di credenziali delle chiavi di Azure , dove è conservato il segreto, ha l'URI. |
park.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
Obbligatorio se si specifica .secret.keyVault . Nome del segreto dell'insieme di credenziali delle chiavi di Azure in cui è archiviato il segreto dell'area di lavoro LA. |
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match |
Opzionale. I nomi degli eventi spark delimitati da virgole; è possibile specificare gli eventi da raccogliere. Ad esempio: SparkListenerApplicationStart,SparkListenerApplicationEnd . |
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match |
Opzionale. I nomi dei logger log4j delimitati da virgole; è possibile specificare i log da raccogliere. Ad esempio: org.apache.spark.SparkContext,org.example.Logger . |
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match |
Opzionale. I suffissi del nome della metrica Spark delimitati da virgole; è possibile specificare le metriche da raccogliere. Ad esempio: jvm.heap.used . |
spark.fabric.pools.skipStarterPools |
Obbligatorio. Questa proprietà Spark viene usata per forzare una sessione Spark su richiesta. È necessario impostare il valore su true quando si usa il pool predefinito per attivare le librerie per generare log e metriche. |
Utilizzo del prefisso spark.synapse.logAnalytics.*
per configurare le informazioni di Log Analytics.
Nome della configurazione | Valore predefinito | Descrizione |
---|---|---|
spark.synapse.logAnalytics.enabled |
falso | Per abilitare il sink di Log Analytics per le applicazioni Spark, true. Altrimenti, falso. |
spark.synapse.logAnalytics.workspaceId |
- | ID dell'area di lavoro Log Analytics di destinazione. |
spark.synapse.logAnalytics.secret |
- | Segreto dell'area di lavoro Log Analytics di destinazione. |
spark.synapse.logAnalytics.keyVault.name |
- | URI del Key Vault per l'ID e la chiave di Log Analytics. |
spark.synapse.logAnalytics.keyVault.key.workspaceId |
SparkLogAnalyticsWorkspaceId | Nome del segreto di Key Vault per l'identificativo dell'area di lavoro di Log Analytics. |
spark.synapse.logAnalytics.keyVault.key.secret |
SparkLogAnalyticsSecret | Nome del segreto di Key Vault per lo spazio di lavoro di Log Analytics. |
spark.synapse.logAnalytics.uriSuffix |
ods.opinsights.azure.com | Suffisso URI dell'area di lavoro Log Analytics di destinazione. Se l'area di lavoro non è presente in Azure globale, è necessario aggiornare il suffisso URI in base al rispettivo cloud. |
spark.synapse.logAnalytics.filter.eventName.match |
- | Opzionale. I nomi degli eventi spark delimitati da virgole; è possibile specificare gli eventi da raccogliere. Ad esempio: SparkListenerJobStart,SparkListenerJobEnd . |
spark.synapse.logAnalytics.filter.loggerName.match |
- | Opzionale. I nomi dei logger log4j delimitati da virgole; è possibile specificare i log da raccogliere. Ad esempio: org.apache.spark.SparkContext,org.example.Logger . |
spark.synapse.logAnalytics.filter.metricName.match |
- | Opzionale. I suffissi del nome della metrica Spark delimitati da virgole; è possibile specificare le metriche da raccogliere. Ad esempio: jvm.heap.used . |
spark.fabric.pools.skipStarterPools |
vero | Obbligatorio. Questa proprietà Spark viene usata per forzare una sessione Spark su richiesta. |
Nota
- Per Microsoft Azure gestito da 21Vianet, il parametro
spark.synapse.logAnalytics.uriSuffix
devebe ods.opinsights.azure.cn
. - Per Azure per enti pubblici, il parametro
spark.synapse.logAnalytics.uriSuffix
deve essereods.opinsights.azure.us
. - Per qualsiasi cloud ad eccezione di Azure, il parametro
spark.synapse.logAnalytics.keyVault.name
deve essere il nome di dominio completo (FQDN) del Key Vault. Ad esempio,AZURE_KEY_VAULT_NAME.vault.usgovcloudapi.net
per AzureUSGovernment.
Domande frequenti
Perché Log Analytics non riceve i log o genera la tabella Customer?
Se l'area di lavoro Log Analytics non riceve i log o la tabella Customer non viene generata, risolvere i problemi con la procedura seguente:
Verificare la configurazione di Log Analytics: assicurarsi che le informazioni dell'area di lavoro Log Analytics siano configurate correttamente nell'applicazione Spark. Per verificare la configurazione, passare all'interfaccia utente Spark o al server cronologia Spark, passare alla scheda "Ambiente" ed esaminare le impostazioni in "Proprietà Spark".
controllare le autorizzazioni:
- Verificare che Log Analytics disponga delle autorizzazioni di scrittura necessarie.
- Se il KeyVault è coinvolto, assicurarsi che le autorizzazioni di lettura siano assegnate correttamente al servizio o all'utente pertinente.
Esaminare i limiti dei dati: Fabric invia i dati di log ad Azure Monitor usando 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.
Come è possibile verificare che le autorizzazioni di Log Analytics siano configurate correttamente?
Per assicurarsi che Log Analytics possa ricevere i log, verificare le autorizzazioni seguenti:
Autorizzazioni di scrittura per Log Analytics:
- Accedere al portale di Azure e passare all'area di lavoro Log Analytics.
- Nella sezione "Controllo di accesso (IAM)" verificare che all'utente, all'entità servizio o all'applicazione sia stato assegnato il ruolo "Collaboratore Log Analytics" o "Collaboratore".
Permessi di lettura di KeyVault (se applicabile):
- Se i log coinvolgono KeyVault, passare alla sezione "Criteri di accesso" o "Controllo di accesso (IAM)" di KeyVault.
- Verificare che l'utente o l'entità servizio rilevante disponga di permessi di lettura, come il ruolo "Lettore Key Vault". Se le autorizzazioni sono configurate in modo errato, contattare l'amministratore di Azure per modificare le assegnazioni di ruolo e attendere che le autorizzazioni vengano sincronizzate (l'operazione potrebbe richiedere alcuni minuti).
Perché l'avvio di una sessione Spark diventa lento dopo la configurazione di queste proprietà spark?
Ciò si verifica perché è stato configurato spark.fabric.pools.skipStarterPool: true, che ignora il pool di avvio (un tipo di pool live) e usa invece un pool on demand per avviare la sessione Spark. L'avvio di una sessione Spark nel pool on demand richiede in genere circa 3 minuti per creare e inizializzare.
Il motivo è che la libreria di diagnostica richiede l'applicazione di configurazioni specifiche all'avvio della sessione Spark di un processo supportato solo dai pool on demand, in quanto vengono create dinamicamente durante l'avvio. Al contrario, le sessioni di Live Pool sono pre-avviate e non possono applicare queste configurazioni durante l'inizializzazione. Per ulteriori dettagli sul calcolo di Fabric Spark, consultare calcolo Apache Spark per ingegneria dei dati e scienza dei dati.