Colete seus logs e métricas de aplicativos Apache Spark usando a conta de armazenamento do Azure (visualização)
A extensão do emissor de diagnóstico do Fabric Apache Spark é uma biblioteca que permite que os aplicativos Apache Spark emitam logs, logs de eventos e métricas para vários 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 do Fabric Apache Spark para enviar logs de aplicativos, logs de eventos e métricas do 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 e métricas de diagnóstico, você pode usar uma conta de Armazenamento do Azure existente. 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 artefato de ambiente de malha com a configuração do Apache Spark
Opção 1: Configurar com o URI do Armazenamento do Azure e a chave de acesso
Criar um artefato de ambiente de malha na malha
Adicione as seguintes propriedades do Spark 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>
,<storage-access-key>
. Para obter mais detalhes sobre esses parâmetros, consulte Configurações de armazenamento do Azure.
Opção 2: Configurar com o Azure Key Vault
Nota
Problema conhecido: Não é possível iniciar uma sessão usando a Opção 2 provisoriamente. Atualmente, o armazenamento de segredos no Cofre de Chaves impede que as sessões do Spark sejam iniciadas. Priorize configurá-lo usando o método descrito na Opção 1.
Certifique-se de que os usuários que enviam aplicativos Apache Spark recebam permissões de segredo de leitura. Para obter mais informações, consulte Fornecer acesso a chaves, certificados e segredos do Cofre da Chave com um controle de acesso baseado em função do Azure.
Para configurar o Cofre da Chave do Azure para armazenar a chave do espaço de trabalho:
Crie e vá para 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.
No ecrã Criar um segredo, selecione os seguintes valores:
- Nome: introduza o nome para o segredo.
- Valor: Insira o
<storage-access-key>
para o segredo. - Deixe as outras opções com os valores predefinidos. Depois, selecione Criar.
Crie um artefato de ambiente de malha 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 de armazenamento do Azure.Salve e publique as alterações.
Etapa 3: anexar o artefato de ambiente a blocos de anotações ou definições de trabalho de faísca ou defini-lo como o padrão do espaço de trabalho
Para anexar o ambiente às definições de trabalho do Notebooks ou do Spark:
- Navegue até a definição de trabalho específica do bloco de anotações ou do Spark na Malha.
- 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 espaço de trabalho padrão:
- Navegue até Configurações do espaço de trabalho na malha.
- Encontre as configurações do Spark nas configurações do espaço de trabalho (configuração do espaço de trabalho -> Engenharia de dados/Ciência -> configurações do Spark).
- Selecione a guia Ambiente e escolha o ambiente com propriedades de faísca de diagnóstico configuradas e clique em Salvar.
Nota
Somente os administradores do espaço de trabalho podem gerenciar as configurações do espaço de trabalho. As alterações feitas aqui serão aplicadas a todos os blocos de anotações e definições de trabalho do Spark anexados às configurações do espaço de trabalho. Para obter mais informações, consulte Configurações do espaço de trabalho de malha.
Etapa 4: Exibir os arquivos de logs na conta de armazenamento do Azure
Depois de enviar um trabalho para a sessão do Spark configurada, você pode visualizar os logs e os arquivos de métricas na conta de armazenamento de destino. Os logs são armazenados em caminhos correspondentes com base em diferentes aplicativos, identificados por <workspaceId>.<fabricLivyId>
. Todos os arquivos de log estão no formato JSON Lines (também conhecido como newline-delimited JSON ou 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. AccessKey para 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>.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 |
spark.fabric.pools.skipStarterPools |
Obrigatório. Esta propriedade Spark é usada para forçar uma sessão Spark sob demanda. Você deve definir o valor como True ao usar o pool padrão para acionar as bibliotecas para emitir logs e métricas. |
Exemplo de dados de log
Aqui está um registro de log de exemplo 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 malha 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.