Monitorar aplicativos Apache Spark com a análise de log do Azure (visualização)
A extensão do emissor de diagnóstico do Fabric Apache Spark é uma biblioteca que permite que os aplicativos Apache Spark emitam logs, logs de eventos e métricas para vários destinos, incluindo análise de log do Azure, armazenamento do Azure e hubs de eventos do Azure.
Neste tutorial, você aprenderá a configurar e emitir logs e métricas do Spark para a análise de log no Fabric. Uma vez configurado, você pode coletar e analisar métricas e logs do aplicativo Apache Spark em seu espaço de trabalho de análise de log.
Configurar informações do espaço de trabalho
Siga estas etapas para configurar as informações necessárias no Fabric.
Etapa 1: Criar um espaço de trabalho do Log Analytics
Consulte um dos seguintes recursos para criar este espaço de trabalho:
- Crie um espaço de trabalho no portal do Azure.
- Crie um espaço de trabalho com a CLI do Azure.
- Crie e configure um espaço de trabalho no Azure Monitor usando o PowerShell.
Etapa 2: Criar um artefato de ambiente de malha com a configuração do Apache Spark
Para configurar o Spark, crie um artefato de ambiente de malha e escolha uma das seguintes opções:
Opção 1: Configurar com ID e chave do espaço de trabalho do Log Analytics
Criar um artefato de ambiente de malha na malha
Adicione as seguintes propriedades do Spark com os valores apropriados ao artefato de ambiente ou selecione Adicionar de .yml na faixa de opções para baixar o arquivo yaml de exemplo, que já contém as propriedades necessárias.
-
<LOG_ANALYTICS_WORKSPACE_ID>
: ID do espaço de trabalho do Log Analytics. -
<LOG_ANALYTICS_WORKSPACE_KEY>
: Chave do Log Analytics. Para encontrar isso, no portal do Azure, vá para Chave primária dos agentes do espaço de trabalho>
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.
Como alternativa, para aplicar a mesma configuração do Azure Synapse, use as seguintes propriedades ou selecione Adicionar de .yml na faixa de opções para baixar o arquivo yaml de exemplo.
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.
-
Salve e publique as alterações.
Opção 2: Configurar com o Azure Key Vault
Nota
Problema conhecido: Não é possível iniciar uma sessão usando a Opção 2 provisoriamente. Atualmente, o armazenamento de segredos no Cofre de Chaves impede que as sessões do Spark sejam iniciadas. Priorize configurá-lo usando o método descrito na Opção 1.
Você precisa conceder permissão de leitura secreta aos usuários que enviarão aplicativos Apache Spark. Para obter mais informações, consulte Fornecer acesso a chaves, certificados e segredos do Cofre da Chave com um controle de acesso baseado em função do Azure.
Para configurar o Cofre da Chave do Azure para armazenar a chave do espaço de trabalho, siga estas etapas:
Vá para o Cofre da Chave no portal do Azure.
Na página de configurações do cofre de chaves, selecione Segredos e, em seguida , Gerar/Importar.
Na tela Criar um segredo, insira os seguintes valores:
-
Nome: introduza o nome para o segredo. Para o padrão, digite
SparkLogAnalyticsSecret
. -
Valor: Insira o
<LOG_ANALYTICS_WORKSPACE_KEY>
para o segredo. - Deixe as outras opções com os valores predefinidos. Depois, selecione Criar.
-
Nome: introduza o nome para o segredo. Para o padrão, digite
Criar um artefato de ambiente de malha na malha
Adicione as seguintes propriedades do Spark com os valores correspondentes ao artefato de ambiente ou selecione Adicionar de .yml na faixa de opções no artefato Ambiente para baixar o arquivo yaml de exemplo que inclui as seguintes propriedades do Spark.
-
<LOG_ANALYTICS_WORKSPACE_ID>
: O ID do espaço de trabalho do Log Analytics. -
<AZURE_KEY_VAULT_NAME>
: O nome do cofre de chaves que você configurou. -
<AZURE_KEY_VAULT_SECRET_KEY_NAME>
(opcional): O nome secreto no cofre de chaves da chave do espaço de trabalho. A predefinição é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.
Como alternativa, para aplicar a mesma configuração do Azure Synapse, use as seguintes propriedades ou selecione Adicionar de .yml na faixa de opções para baixar o arquivo yaml de exemplo.
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
Você também pode armazenar o ID do espaço de trabalho no Cofre da Chave. Defina o nome secreto como
SparkLogAnalyticsWorkspaceId
, ou use a configuraçãospark.synapse.logAnalytics.keyVault.key.workspaceId
para especificar o nome secreto do ID do espaço de trabalho.Para obter uma lista de configurações do Apache Spark, consulte Configurações disponíveis do Apache Spark
-
Salve e publique as alterações.
Etapa 3: anexar o artefato de ambiente a blocos de anotações ou definições de trabalho de faísca ou defini-lo como o padrão do espaço de trabalho
Para anexar o ambiente a blocos de anotações ou definições de trabalho do Spark:
- Navegue até a definição de trabalho do bloco de anotações ou do Spark na Malha.
- Selecione o menu Ambiente na guia Página Inicial e selecione o ambiente configurado.
- A configuração será aplicada após o início de uma sessão do Spark.
Para definir o ambiente como o espaço de trabalho padrão:
- Navegue até Configurações do espaço de trabalho na malha.
- Encontre as configurações do Spark nas configurações do espaço de trabalho (configuração do espaço de trabalho -> Engenharia de dados/Ciência -> Configurações do Spark)
- Selecione a guia Ambiente e escolha o ambiente com propriedades de faísca de diagnóstico configuradas e clique em Salvar.
Nota
Somente os administradores do espaço de trabalho podem gerenciar configurações. Os valores serão aplicados a blocos de anotações e definições de trabalho do Spark que se anexam às Configurações do Espaço de Trabalho. Para obter mais detalhes, consulte Configurações do espaço de trabalho de malha.
Envie um aplicativo Apache Spark e visualize os logs e métricas
Para enviar um aplicativo Apache Spark:
Envie um aplicativo Apache Spark, com o ambiente associado, que foi configurado na etapa anterior. Você pode usar qualquer uma das seguintes maneiras de fazer isso:
- Execute um bloco de anotações no Fabric.
- Envie um trabalho em lote do Apache Spark por meio de uma definição de trabalho do Apache Spark.
- Execute suas atividades do Spark em seus Pipelines.
Vá para o espaço de trabalho especificado do Log Analytics e visualize as métricas e os logs do aplicativo quando o aplicativo Apache Spark começar a ser executado.
Escrever logs de aplicativos personalizados
Você pode usar a biblioteca Apache Log4j para escrever logs personalizados. Aqui estão exemplos para Scala e PySpark:
Exemplo de 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()
Exemplo do 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")
Consultar dados com Kusto
Para consultar eventos do Apache Spark:
SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Para consultar o driver do aplicativo Spark e os logs do executor:
SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Para consultar métricas do 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
Limites de dados
O Fabric envia dados de log para o Azure Monitor usando a API do Coletor de Dados HTTP. Os dados postados na API de coleta de dados do Azure Monitor estão sujeitos a determinadas restrições:
- Máximo de 30 MB por postagem na API do Azure Monitor Data Collector. Este é um limite de tamanho para uma única publicação. Se os dados de uma única postagem excederem 30 MB, você deve dividir os dados em blocos de tamanho menor e enviá-los simultaneamente.
- Máximo de 32 KB para valores de campo. Se o valor do campo for maior que 32 KB, os dados serão truncados.
- Máximo recomendado de 50 campos para um determinado tipo. Este é um limite prático de uma perspetiva de experiência de pesquisa e usabilidade.
- As tabelas nos espaços de trabalho do Log Analytics suportam apenas até 500 colunas.
- Máximo de 45 caracteres para nomes de colunas.
Criar e gerenciar alertas
Os usuários podem consultar para avaliar métricas e logs em uma frequência definida e disparar um alerta com base nos resultados. Para obter mais informações, consulte Criar, exibir e gerenciar alertas de log usando o Azure Monitor.
Espaços de trabalho de malha com rede virtual gerenciada
Atualmente, o Azure Log Analytics não pode ser selecionado como um destino para a emissão de logs e métricas do Spark em uma rede virtual gerenciada porque o ponto de extremidade privado gerenciado não oferece suporte ao Log Analytics como fonte de dados.