Partilhar via


Colete seus logs e métricas de aplicativos Apache Spark usando a conta de Armazenamento do Azure

A extensão do emissor de diagnóstico Synapse 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, o Armazenamento do Azure e os Hubs de Eventos do Azure.

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

Coletar logs e métricas para a conta de armazenamento

Etapa 1: Criar uma conta de armazenamento

Para coletar logs de diagnóstico e métricas para a conta de armazenamento, você pode usar contas de Armazenamento do Azure existentes. Ou, se você não tiver uma, poderá criar uma conta de armazenamento de blob do Azure ou criar uma conta de armazenamento para usar com o Azure Data Lake Storage Gen2.

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

Crie um diagnostic-emitter-azure-storage-conf.txt e copie o seguinte conteúdo para o arquivo. Ou baixe um arquivo de modelo de exemplo para a configuração do pool do Apache Spark.

spark.synapse.diagnostic.emitters MyDestination1
spark.synapse.diagnostic.emitter.MyDestination1.type AzureStorage
spark.synapse.diagnostic.emitter.MyDestination1.categories Log,EventLog,Metrics
spark.synapse.diagnostic.emitter.MyDestination1.uri https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>
spark.synapse.diagnostic.emitter.MyDestination1.auth AccessKey
spark.synapse.diagnostic.emitter.MyDestination1.secret <storage-access-key>

Preencha os seguintes parâmetros no arquivo de configuração: <my-blob-storage>, <container-name>, <folder-name>, <storage-access-key>. Para obter mais descrição dos parâmetros, consulte as configurações de Armazenamento do Azure

Etapa 3: Carregue o arquivo de configuração do Apache Spark no Synapse Studio e use-o no pool do Spark

  1. Abra a página Configurações do Apache Spark (Gerenciar -> Configurações do Apache Spark).
  2. Clique no botão Importar para carregar o arquivo de configuração do Apache Spark para o Synapse Studio.
  3. Navegue até o pool do Apache Spark no Synapse Studio (Gerenciar -> pools do Apache Spark).
  4. Clique no botão "..." à direita do seu pool do Apache Spark e selecione Configuração do Apache Spark.
  5. Você pode selecionar o arquivo de configuração que acabou de carregar no menu suspenso.
  6. Clique em Aplicar depois de selecionar o arquivo de configuração.

Etapa 4: Exibir os arquivos de logs na conta de armazenamento do Azure

Depois de enviar um trabalho para o pool do Apache Spark configurado, você poderá ver os logs e os arquivos de métricas na conta de armazenamento de destino. Os logs serão colocados em caminhos correspondentes de acordo com diferentes aplicações por <workspaceName>.<sparkPoolName>.<livySessionId>. Todos os arquivos de logs estarão no formato de linhas JSON (também chamado de newline-delimited JSON, ndjson), o que é conveniente para o processamento de dados.

Configurações disponíveis

Configuração Description
spark.synapse.diagnostic.emitters Obrigatório. Os nomes de destino separados por vírgulas dos emissores de diagnóstico. Por exemplo, MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type Obrigatório. Tipo de destino incorporado. Para habilitar o destino de armazenamento do Azure, AzureStorage precisa ser incluído neste campo.
spark.synapse.diagnostic.emitter.<destination>.categories Opcional. As categorias de log selecionadas separadas por vírgula. Os valores disponíveis incluem DriverLog, ExecutorLog, EventLog, Metrics. Se não estiver definido, o valor padrão será todas as categorias.
spark.synapse.diagnostic.emitter.<destination>.auth Obrigatório. AccessKeypara usar a autorização de chave de acesso da conta de armazenamento. SAS para autorização de assinaturas de acesso compartilhado.
spark.synapse.diagnostic.emitter.<destination>.uri Obrigatório. O uri da pasta do contêiner de blob de destino. Deve corresponder ao padrão https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>.
spark.synapse.diagnostic.emitter.<destination>.secret Opcional. O conteúdo secreto (AccessKey ou SAS).
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault Obrigatório se .secret não for especificado. O nome do cofre da Chave do Azure onde o segredo (AccessKey ou SAS) está armazenado.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName Obrigatório se .secret.keyVault for especificado. O nome secreto do cofre da Chave do Azure onde o segredo (AccessKey ou SAS) está armazenado.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.linkedService Opcional. O nome do serviço vinculado do Cofre da Chave do Azure. Quando ativado no pipeline Synapse, isso é necessário para obter o segredo do AKV. (Por favor, certifique-se de que a MSI tem permissão de leitura no AKV).
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match Opcional. Os nomes de eventos de faísca separados por vírgula, você pode especificar quais eventos coletar. Por exemplo: SparkListenerApplicationStart,SparkListenerApplicationEnd
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match Opcional. Os nomes de logger log4j separados por vírgula, você pode especificar quais logs coletar. 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 de faísca separados por vírgula, você pode especificar quais métricas coletar. Por exemplo: jvm.heap.used

Exemplo de dados de log

Aqui está um registro de log de exemplo 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"
        // ...
    }
}

Espaço de trabalho Sinapse com proteção contra exfiltração de dados ativada

A área de trabalho do Azure Synapse Analytics suporta a ativação da proteção contra a transferência de dados não autorizada na área de trabalho. Com a proteção contra exfiltração, os logs e 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 IP nesse cenário.

  1. Navegue até Synapse Studio > Manage > Managed private endpoints, clique no botão Novo , selecione Azure Blob Storage ou Azure Data Lake Storage Gen2 e continue.

    Criar ponto de extremidade privado gerenciado 1

    Nota

    Podemos oferecer suporte ao Armazenamento de Blobs do Azure e ao Azure Data Lake Storage Gen2. Mas não conseguimos analisar o formato abfss:// . Os pontos de extremidade do Azure Data Lake Storage Gen2 devem ser formatados como uma URL de blob:

    https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name> 
    
  2. Escolha sua conta de Armazenamento do Azure no nome da conta de armazenamento e clique no botão Criar.

    Criar ponto de extremidade privado gerenciado 2

  3. Aguarde alguns minutos para o provisionamento de ponto de extremidade privado.

  4. Navegue até sua conta de armazenamento no portal do Azure, na página Conexões de Ponto de Extremidade Privado de Rede>, selecione a conexão provisionada e Aprove.