Coletar métricas e logs de aplicativos Apache Spark usando a conta do Armazenamento do Microsoft 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, o Armazenamento do Microsoft Azure e os Hubs de Eventos do Azure.
Neste tutorial, você aprenderá a usar a extensão do emissor de diagnóstico do Fabric Apache Spark para emitir logs, logs de eventos e métricas de aplicativos Apache Spark para sua conta do Armazenamento do Microsoft 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, você pode usar uma conta de Armazenamento do Microsoft Azure existente. Ou, então, caso não tenha uma, você pode criar uma conta de Armazenamento de Blobs do Azure ou criar uma conta de armazenamento para usar com o Azure Data Lake Storage Gen2.
Etapa 2: criar um artefato de ambiente no Fabric com a configuração do Apache Spark
Opção 1: configurar com o URI do Armazenamento do Microsoft Azure e a chave de acesso
Crie um artefato de ambiente no Fabric
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 seguintes propriedades.
spark.synapse.diagnostic.emitters: MyStorageBlob spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage" spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyStorageBlob.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> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Preencha os seguintes parâmetros no arquivo de configuração:
<my-blob-storage>
,<container-name>
,<folder-name>
e<storage-access-key>
. Para obter mais detalhes sobre esses parâmetros, consulte Configurações do Armazenamento do Microsoft 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:
Crie e acesse o seu cofre de chaves 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, selecione os seguintes valores:
- Nome: insira um nome para o segredo.
- Valor: insira
<storage-access-key>
para o segredo. - Deixe os outros valores com seus padrões. Em seguida, selecione Criar.
Criar um artefato de ambiente no Fabric.
Adicione as seguintes propriedades do Spark. Ou selecione Adicionar de .yml na faixa de opções para carregar o arquivo yaml de exemplo que inclui as seguintes propriedades do Spark.
spark.synapse.diagnostic.emitters: <MyStorageBlob> spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage" spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyStorageBlob.uri: "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>" spark.synapse.diagnostic.emitter.MyStorageBlob.auth: "AccessKey" spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault: <AZURE_KEY_VAULT_NAME> spark.synapse.diagnostic.emitter.MyStorageBlob.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:
<my-blob-storage>
,<container-name>
,<folder-name>
,<AZURE_KEY_VAULT_NAME>
,<AZURE_KEY_VAULT_SECRET_KEY_NAME>
. Para obter mais detalhes sobre esses parâmetros, consulte Configurações do Armazenamento do Microsoft Azure.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:
- Navegue até o notebook específico ou a definição de trabalho do Spark no Fabric.
- Selecione o menu Ambiente na guia Página Inicial e selecione o ambiente com as propriedades do Spark de diagnóstico configuradas.
- A configuração é aplicada quando você inicia uma sessão do Spark.
Para definir o ambiente como o padrão do workspace:
- Navegue até as Configurações do workspace no Fabric.
- Localize as Configurações do Spark em Configurações do workspace (Configuração do workspace –> Engenharia de Dados/Ciência –> Configurações do Spark).
- 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 saber mais, confira Configurações de workspaces do Fabric.
Etapa 4: Exibir os arquivos de logs na conta de armazenamento do Azure
Depois de enviar um trabalho para a sessão configurada do Spark, você pode exibir os arquivos de logs e métricas na conta de armazenamento de destino. Os logs são armazenados em caminhos correspondentes com base em aplicativos diferentes, identificados por <workspaceId>.<fabricLivyId>
. Todos os arquivos de log estão no formato JSON Lines (também conhecido como JSON delimitado por nova linha ou ndjson), o que é conveniente para o processamento de dados.
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. Por exemplo, MyDest1,MyDest2 |
spark.synapse.diagnostic.emitter.<destination>.type |
Obrigatórios. Tipo de destino interno. Para habilitar o destino do armazenamento do Azure, AzureStorage precisa ser incluído nesse 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 e Metrics . Se ele não for definido, o valor padrão será todas as categorias. |
spark.synapse.diagnostic.emitter.<destination>.auth |
Obrigatórios. AccessKey para usar a autorização de chave de acesso da conta de armazenamento. SAS para autorização com assinaturas de acesso compartilhado. |
spark.synapse.diagnostic.emitter.<destination>.uri |
Obrigatórios. O URI da pasta de contêiner de blobs 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 do segredo (AccessKey ou SAS). |
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 (AccessKey ou SAS) 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 (AccessKey ou SAS) 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 |
spark.fabric.pools.skipStarterPools |
Obrigatória. Essa propriedade do Spark é usada para forçar uma sessão do Spark sob demanda. Você deve definir o valor como True ao usar o pool padrão para disparar as bibliotecas para emitir logs e métricas. |
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"
//...
}
}
Workspaces do Fabric com rede virtual gerenciada
Crie um ponto de extremidade privado gerenciado para o Armazenamento de Blobs do Azure de destino. Para obter instruções detalhadas, consulte 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 o Armazenamento de Blobs do Azure de destino.