Monitorar aplicativos Apache Spark com a análise de logs do Azure (versão prévia)

A extensão do emissor de diagnóstico do Fabric Apache Spark é uma biblioteca que permite que o aplicativo Apache Spark emita logs, logs de eventos e métricas para um ou mais destinos, incluindo o Azure Log Analytics, a 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 o Log Analytics no Fabric. Após configurado, você poderá coletar e analisar as métricas e os logs do aplicativo Apache Spark no workspace do Log Analytics.

Configurar informações do workspace

Siga as etapas abaixo para configurar as informações necessárias no Fabric.

Etapa 1: criar um workspace do Log Analytics

Confira um dos seguintes recursos para criar esse workspace:

Etapa 2: criar um artefato de ambiente no Fabric com a configuração do Apache Spark

Para configurar o Spark, crie um Artefato de Ambiente do Fabric e escolha uma das seguintes opções:

Opção 1: configurar usando a ID e a Chave do Workspace do Log Analytics

  1. Crie um artefato de ambiente no Fabric

  2. Adicione as propriedades do Spark a seguir 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 workspace do Log Analytics.
    • <LOG_ANALYTICS_WORKSPACE_KEY>: chave do Log Analytics. Para localizá-los, abra o portal do Azure e acesse Workspace do Azure Log Analytics>Agentes>Chave primária.
    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 que o Azure Synapse, use as propriedades a seguir 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.
    
  3. Salve e publique as alterações.

Opção 2: configurar usando o Azure Key Vault

Observação

Problema conhecido: provisoriamente, não é possível iniciar uma sessão usando a Opção 2. Atualmente, o armazenamento de segredos no Key Vault impede que as sessões do Spark sejam iniciadas. Priorize a configuração usando o método descrito na Opção 1.

Você precisa conceder permissão de leitura de segredo para os usuários que enviarão aplicativos Apache Spark. Para obter mais informações, confira como Fornecer acesso a chaves, certificados e segredos do Key Vault usando um controle de acesso baseado em função do Azure.

Execute as seguintes etapas para configurar o Azure Key Vault a fim de armazenar a chave do workspace:

  1. Acesse o Key Vault no portal do Azure.

  2. Na página de configurações do cofre de chaves, selecione Segredos e, em seguida, Gerar/Importar.

  3. Na tela Criar segredo, Insira os seguintes valores:

    • Nome: insira um nome para o segredo. Insira SparkLogAnalyticsSecret como o nome padrão.
    • Valor: insira <LOG_ANALYTICS_WORKSPACE_KEY> para o segredo.
    • Deixe os outros valores com seus padrões. Em seguida, selecione Criar.
  4. Crie um artefato de ambiente no Fabric

  5. Adicione as propriedades do Spark a seguir 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 amostra que inclui as propriedades do Spark a seguir.

    • <LOG_ANALYTICS_WORKSPACE_ID>: a ID do workspace do Log Analytics.
    • <AZURE_KEY_VAULT_NAME>: o nome do cofre de chaves configurado.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (opcional): o nome secreto da chave do workspace no cofre de chaves. O padrã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 que o Azure Synapse, use as propriedades a seguir 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.
    

    Observação

    Também é possível armazenar a ID do workspace no Key Vault. Defina o nome do segredo como SparkLogAnalyticsWorkspaceId, ou use a configuração spark.synapse.logAnalytics.keyVault.key.workspaceId para especificar o nome do segredo da ID do espaço de trabalho.

    Para obter uma lista das configurações do Apache Spark, confira Configurações disponíveis do Apache Spark

  6. Salve e publique as alterações.

Etapa 3: anexar o artefato de ambiente a notebooks ou definições de trabalho do Spark ou defini-lo como o padrão do espaço de trabalho

Para anexar o ambiente a notebooks ou definições de trabalho do Spark:

  1. Navegue até o notebook ou a definição de trabalho do Spark no Fabric.
  2. Selecione o menu Ambiente no guia Página Inicial e selecione o ambiente configurado.
  3. A configuração será aplicada após iniciar uma sessão do Spark.

Para definir o ambiente como o padrão do espaço de trabalho:

  1. Navegue até as Configurações do espaço de trabalho no Fabric.
  2. Localize as Configurações do Spark em Configurações do espaço de trabalho (Configuração do espaço de trabalho –> Engenharia de Dados/Ciência –> Configurações do Spark).
  3. Selecione a guia Ambiente e escolha o ambiente com as propriedades do Spark de diagnóstico configuradas e clique em Salvar.

Observação

Somente os administradores do espaço de trabalho podem gerenciar as configurações. Os valores serão aplicados a notebooks e definições de trabalho do Spark que se anexam às Configurações do espaço de trabalho. Para obter mais detalhes, consulte as Configurações do espaço de trabalho do Fabric.

Enviar um aplicativo Apache Spark e exibir os logs e as métricas

Para enviar um aplicativo do Apache Spark:

  1. Envie um aplicativo do Apache Spark com o ambiente associado, que foi configurado na etapa anterior. É possível usar uma das opções abaixo para executar essa ação:

    • Execute um notebook no Fabric.
    • Envie um trabalho em lotes do Apache Spark por meio de uma definição de trabalho do Apache Spark.
    • Execute suas atividades do Spark em seus Pipelines.
  2. Acesse o workspace do Log Analytics indicado, depois veja as métricas e os logs do aplicativo ao iniciar a execução do aplicativo Apache Spark.

Gravar logs de aplicativo personalizados

Você pode usar a biblioteca do Apache Log4j para gravar logs personalizados. Veja exemplos do Scala e do 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 o 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 logs de driver de aplicativo e executor do Spark:

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

Para consultar as 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 certas restrições:

  • Máximo de 30 MB por post na API do Coletor de Dados do Azure Monitor. Este é um limite de tamanho para um único post. Se os dados de uma única postagem excederem 30 MB, divida-os em partes menores e envie-os simultaneamente.
  • Limite máximo de 32 KB para valores de campo. Se o valor do campo for maior do que 32 KB, os dados são truncados.
  • É recomendado um máximo de 50 campos para um determinado tipo. Este é um limite prático de uma perspectiva de experiência de pesquisa e usabilidade.
  • As tabelas nos workspaces do Log Analytics dão suporte apenas a até 500 colunas.
  • Máximo de 45 caracteres para nomes de colunas.

Criar e gerenciar alertas

Os usuários podem executar uma consulta para avaliar as métricas e os logs em uma frequência definida, bem como disparar um alerta com base nos resultados. Para obter mais informações, confira como Criar, ver e gerenciar alertas de logs usando o Azure Monitor.

Espaços de trabalho do Fabric com rede virtual gerenciada

No momento, o Log Analytics do Azure não pode ser selecionado como um destino para emissões de logs e métricas do Spark em uma rede virtual gerenciada porque o ponto de extremidade privado gerenciado não dá suporte ao Log Analytics como uma fonte de dados.

Próximas etapas