Compartilhar via


Coletar métricas e logs de aplicativos Apache Spark usando os Hubs de Eventos do Azure (versão prévia)

A extensão do emissor de diagnóstico do Fabric Apache Spark é uma biblioteca que permite que aplicativos Apache Spark emitam logs, logs de eventos e métricas para vários destinos, incluindo Azure Log Analytics, Armazenamento do Microsoft Azure e Hubs de Eventos do Azure.

Nesse tutorial, você aprenderá a usar a extensão do emissor de diagnóstico do Fabric Apache Spark para enviar logs de aplicativos, logs de eventos e métricas do Apache Spark para seus Hubs de Eventos do Azure.

Coletar logs e métricas para os Hubs de Eventos do Azure

Etapa 1: criar uma instância do Hubs de Eventos do Azure

Para coletar logs e métricas de diagnóstico, você pode usar uma instância existente do Hubs de Eventos do Azure. Se você não tiver um, você pode criar um hub de eventos.

Etapa 2: Crie um artefato de ambiente de malha com a configuração do Apache Spark

Opção 1: Configurar com a cadeia de conexão do Hubs de Eventos do Azure

  1. Crie um artefato de ambiente de tecido no Fabric

  2. Adicione as seguintes propriedades do Spark com os valores apropriados ao artefato do ambiente ou selecione Adicionar de .yml na faixa de opções para baixar o arquivo yaml de amostra que já contém as seguintes propriedades.

    spark.synapse.diagnostic.emitters: MyEventHub
    spark.synapse.diagnostic.emitter.MyEventHub.type: "AzureEventHub"
    spark.synapse.diagnostic.emitter.MyEventHub.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyEventHub.secret: <connection-string>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Preencha os parâmetros <connection-string> no arquivo de configuração. Para obter mais informações, veja Configurações do Hubs de Eventos do Azure.

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.

Verifique se os usuários que enviam aplicativos Apache Spark receberam permissões de segredo de leitura. 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.

Para configurar o Azure Key Vault para armazenar a chave do workspace:

  1. Crie e acesse o seu cofre de chaves 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 um segredo, selecione os seguintes valores:

    • Nome: insira um nome para o segredo.
    • Valor: insira <connection-string> para o segredo.
    • Deixe os outros valores com seus padrões. Em seguida, selecione Criar.
  4. Criar um artefato de ambiente no Fabric.

  5. Adicione as seguintes propriedades do Spark. Ou selecione Adicionar de .yml na faixa de opções para baixar o arquivo yaml de exemplo, que inclui as seguintes propriedades do Spark.

    spark.synapse.diagnostic.emitters: MyEventHub
    spark.synapse.diagnostic.emitter.MyEventHub.type: "AzureEventHub"
    spark.synapse.diagnostic.emitter.MyEventHub.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyEventHub.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.MyEventHub.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Preencha os seguintes parâmetros no arquivo de configuração: <AZURE_KEY_VAULT_NAME>, <AZURE_KEY_VAULT_SECRET_KEY_NAME>. Para obter mais detalhes sobre esses parâmetros, consulte Configurações do Hubs de Eventos do Azure.

  6. Salve e publique as alterações.

Etapa 3: Anexe o artefato do ambiente aos notebooks ou às definições de trabalho do Spark ou defina-o 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 específico ou a definição de trabalho do Spark no Fabric.
  2. Selecione o menu Ambiente na guia Página Inicial e selecione o ambiente com as propriedades do Spark de diagnóstico configuradas.
  3. A configuração é aplicada quando você inicia uma sessão do Spark.

Para definir o ambiente como o padrão do workspace:

  1. Navegue até as Configurações do workspace no Fabric.
  2. Localize as Configurações do Spark em Configurações do workspace (Configuração do workspace –> 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 workspace podem gerenciar as configurações do workspace. As alterações feitas aqui se aplicarão a todos os notebooks e definições de trabalho do Spark anexadas às configurações do workspace. Para obter mais informações, veja Configurações do Fabric Workspace.

Configurações disponíveis

Configuração Descrição
spark.synapse.diagnostic.emitters Obrigatórios. Os nomes de destino separados por vírgula dos emissores de diagnóstico.
spark.synapse.diagnostic.emitter.<destination>.type Obrigatórios. Tipo de destino interno. Para habilitar o destino dos Hubs de Eventos do Azure, o valor deve ser AzureEventHub.
spark.synapse.diagnostic.emitter.<destination>.categories Opcional. As categorias de log selecionadas separadas por vírgula. Os valores disponíveis incluem DriverLog, ExecutorLog, EventLog e Metrics. Se ele não for definido, o valor padrão será todas as categorias.
spark.synapse.diagnostic.emitter.<destination>.secret Opcional. A cadeia de conexão da instância dos Hubs de Eventos do Azure. Esse campo deve corresponder ao padrão Endpoint=sb://<FQDN>/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>;EntityPath=<PathName>
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault Obrigatório se .secret não for especificado. O nome do Azure Key Vault em que o segredo (cadeia de conexão) está armazenado.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName Obrigatório se .secret.keyVault for especificado. O nome do segredo do Azure Key Vault em que o segredo (cadeia de conexão) está armazenado.
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match Opcional. Os nomes de eventos do Spark separados por vírgula. Você pode especificar quais eventos serão coletados. Por exemplo: SparkListenerApplicationStart,SparkListenerApplicationEnd
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match Opcional. Os nomes dos agentes Log4j separados por vírgula. Você pode especificar os logs que serão coletados. Por exemplo: org.apache.spark.SparkContext,org.example.Logger
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match Opcional. Os sufixos de nome de métrica do Spark separados por vírgula. Você pode especificar as métricas que serão coletadas. Por exemplo: jvm.heap.used

Observação

A cadeia de conexão da instância do Hub de Eventos do Azure sempre deve conter o EntityPath, que é o nome da instância dos Hubs de Eventos do Azure.

Exemplo de dados de log

Este é um exemplo de registro de log no formato JSON:

{
  "timestamp": "2024-09-06T03:09:37.235Z",
  "category": "Log|EventLog|Metrics",
  "fabricLivyId": "<fabric-livy-id>",
  "applicationId": "<application-id>",
  "applicationName": "<application-name>",
  "executorId": "<driver-or-executor-id>",
  "fabricTenantId": "<my-fabric-tenant-id>",
  "capacityId": "<my-fabric-capacity-id>",
  "artifactType": "SynapseNotebook|SparkJobDefinition",
  "artifactId": "<my-fabric-artifact-id>",
  "fabricWorkspaceId": "<my-fabric-workspace-id>",
  "fabricEnvId": "<my-fabric-environment-id>",
  "executorMin": "<executor-min>",
  "executorMax": "<executor-max>",
  "isHighConcurrencyEnabled": "true|false",
  "properties": {
    // The message properties of logs, events and metrics.
    "timestamp": "2024-09-06T03:09:37.235Z",
    "message": "Initialized BlockManager: BlockManagerId(1, vm-04b22223, 34319, None)",
    "logger_name": "org.apache.spark.storage.BlockManager",
    "level": "INFO",
    "thread_name": "dispatcher-Executor"
    //...
  }
}

Espaços de trabalho de tecido com rede virtual gerenciada

Crie um ponto de extremidade privado gerenciado para os Hubs de Eventos do Azure de destino. Para obter instruções detalhadas, veja Criar e usar pontos de extremidade privados gerenciados no Microsoft Fabric - Microsoft Fabric.

Depois que o ponto de extremidade privado gerenciado for aprovado, os usuários poderão começar a emitir logs e métricas para os Hubs de Eventos do Azure de destino.

Próximas etapas