Compartilhar via


Coletar métricas e logs de aplicativos Apache Spark usando os Hubs de Eventos do Azure

A extensão do emissor de diagnóstico do Synapse Apache Spark é uma biblioteca que permite que o aplicativo Apache Spark emita os logs, os logs de eventos e as métricas para um ou mais destinos, incluindo o Azure Log Analytics, o Armazenamento do Azure e os Hubs de Eventos do Azure.

Neste tutorial, você aprenderá a usar a extensão do emissor de diagnóstico do Synapse Apache Spark para emitir logs, logs de eventos e métricas de aplicativos Apache Spark para os Hubs de Eventos do Azure.

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

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

Para coletar os logs de diagnóstico e as métricas para os Hubs de Eventos do Azure, você pode usar a instância existente dos Hubs de Eventos do Azure. Ou, então, caso não tenha uma, crie um hub de eventos.

Etapa 2: Criar um arquivo de configuração do Apache Spark

Crie um diagnostic-emitter-azure-event-hub-conf.txt e copie o conteúdo a seguir para o arquivo. Ou, então, baixe um exemplo de arquivo de modelo para a configuração do Pool do Apache Spark.

spark.synapse.diagnostic.emitters MyDestination1
spark.synapse.diagnostic.emitter.MyDestination1.type AzureEventHub
spark.synapse.diagnostic.emitter.MyDestination1.categories Log,EventLog,Metrics
spark.synapse.diagnostic.emitter.MyDestination1.secret <connection-string>

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

Etapa 3: Carregar o arquivo de configuração do Apache Spark no Pool do Apache Spark

  1. Navegue até o Pool do Apache Spark no Synapse Studio (Gerenciar -> Pools do Apache Spark)
  2. Clique no botão "..." à direita do Pool do Apache Spark e selecione Configuração do Apache Spark
  3. Clique em Carregar, escolha o arquivo de configuração ".txt" e clique em Aplicar.

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>.secret.keyVault.linkedService Opcional. O nome do serviço vinculado do Azure Key Vault. Quando habilitado no pipeline do Synapse, isso é necessário para obter o segredo do AKV. (Verifique se o MSI tem permissão de leitura no AKV).
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": "2021-01-02T12:34:56.789Z",
    "category": "Log|EventLog|Metrics",
    "workspaceName": "<my-workspace-name>",
    "sparkPool": "<spark-pool-name>",
    "livyId": "<livy-session-id>",
    "applicationId": "<application-id>",
    "applicationName": "<application-name>",
    "executorId": "<driver-or-executor-id>",
    "properties": {
        // The message properties of logs, events and metrics.
        "timestamp": "2021-01-02T12:34:56.789Z",
        "message": "Registering signal handler for TERM",
        "logger_name": "org.apache.spark.util.SignalUtils",
        "level": "INFO",
        "thread_name": "main"
        // ...
    }
}

Workspace do Azure Synapse com a proteção contra exfiltração dos dados habilitada

Espaços de trabalho do Azure Synapse Analytics dão suporte à habilitação da proteção de vazamento de dados para espaços de trabalho. Com a proteção contra exfiltração, os logs e as métricas não podem ser enviados diretamente para os pontos de extremidade de destino. Você pode criar pontos de extremidade privados gerenciados correspondentes para diferentes pontos de extremidade de destino ou criar regras de firewall de IP nesse cenário.