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
- Navegue até o Pool do Apache Spark no Synapse Studio (Gerenciar -> Pools do Apache Spark)
- Clique no botão "..." à direita do Pool do Apache Spark e selecione Configuração do Apache Spark
- 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.