Coletar métricas de aplicativos Apache Spark usando APIs
Descrição geral
Neste tutorial, você aprenderá como integrar seu servidor Prometheus local existente com o espaço de trabalho do Azure Synapse para métricas de aplicativo Apache Spark quase em tempo real usando o conector Synapse Prometheus.
Este tutorial também apresenta as APIs de métricas REST do Azure Synapse. Você pode buscar dados de métricas de aplicativos Apache Spark por meio das APIs REST para criar seu próprio kit de ferramentas de monitoramento e diagnóstico ou integrar com seus sistemas de monitoramento.
Usar o conector Azure Synapse Prometheus para seus servidores Prometheus locais
O conector Azure Synapse Prometheus é um projeto de código aberto. O conector Synapse Prometheus usa um método de descoberta de serviço baseado em arquivo para permitir que você:
- Autentique-se no espaço de trabalho Synapse por meio de uma entidade de serviço Microsoft Entra.
- Buscar espaço de trabalho Lista de aplicativos Apache Spark.
- Puxe métricas de aplicativos Apache Spark por meio da configuração baseada em arquivos Prometheus.
1. Pré-requisito
Você precisa ter um servidor Prometheus implantado em uma VM Linux.
2. Criar uma entidade de serviço
Para usar o conector Azure Synapse Prometheus em seu servidor Prometheus local, siga as etapas abaixo para criar uma entidade de serviço.
2.1 Crie uma entidade de serviço:
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
O resultado deve ser parecido com:
{
"appId": "abcdef...",
"displayName": "<service_principal_name>",
"name": "http://<service_principal_name>",
"password": "abc....",
"tenant": "<tenant_id>"
}
Anote o appId, a senha e o ID do locatário.
2.2 Adicione as permissões correspondentes à entidade de serviço criada na etapa acima.
Inicie sessão na sua área de trabalho do Azure Synapse Analytics como Synapse Administrator
No Synapse Studio, no painel esquerdo, selecione Gerenciar > controle de acesso
Clique no botão Adicionar no canto superior esquerdo para adicionar uma atribuição de função
Em Escopo, escolha Espaço de trabalho
Em Role, escolha Synapse Compute Operator
Em Selecionar usuário, insira o <service_principal_name> e clique na entidade de serviço
Clique em Aplicar (Aguarde 3 minutos para que a permissão entre em vigor.)
3. Baixe o Azure Synapse Prometheus Connector
Use os comandos para instalar o Azure Synapse Prometheus Connector.
git clone https://github.com/microsoft/azure-synapse-spark-metrics.git
cd ./azure-synapse-spark-metrics/synapse-prometheus-connector/src
python pip install -r requirements.txt
4. Criar um arquivo de configuração para espaços de trabalho do Azure Synapse
Crie um arquivo config.yaml na pasta config e preencha os seguintes campos: workspace_name, tenant_id, service_principal_name e service_principal_password. Você pode adicionar vários espaços de trabalho na configuração do yaml.
workspaces:
- workspace_name: <your_workspace_name>
tenant_id: <tenant_id>
service_principal_name: <service_principal_app_id>
service_principal_password: "<service_principal_password>"
5. Atualize a configuração do Prometheus
Adicione a seguinte seção de configuração em seu scrape_config Prometheus e substitua o your_workspace_name> ao nome do espaço de trabalho e o <<path_to_synapse_connector> à pasta clonada synapse-prometheus-connector
- job_name: synapse-prometheus-connector
static_configs:
- labels:
__metrics_path__: /metrics
__scheme__: http
targets:
- localhost:8000
- job_name: synapse-workspace-<your_workspace_name>
bearer_token_file: <path_to_synapse_connector>/output/workspace/<your_workspace_name>/bearer_token
file_sd_configs:
- files:
- <path_to_synapse_connector>/output/workspace/<your_workspace_name>/application_discovery.json
refresh_interval: 10s
metric_relabel_configs:
- source_labels: [ __name__ ]
target_label: __name__
regex: metrics_application_[0-9]+_[0-9]+_(.+)
replacement: spark_$1
- source_labels: [ __name__ ]
target_label: __name__
regex: metrics_(.+)
replacement: spark_$1
6. Inicie o conector na VM do servidor Prometheus
Inicie um servidor conector na VM do servidor Prometheus da seguinte maneira.
python main.py
Aguarde alguns segundos e o conector deve começar a funcionar. E você pode ver o "synapse-prometheus-connector" na página de descoberta do serviço Prometheus.
Usar as APIs de métricas do Azure Synapse Prometheus ou REST para coletar dados de métricas
1. Autenticação
Você pode usar o fluxo de credenciais do cliente para obter um token de acesso. Para acessar a API de métricas, você deve obter um token de acesso do Microsoft Entra para a entidade de serviço, que tem permissão adequada para acessar as APIs.
Parâmetro | Obrigatório | Descrição |
---|---|---|
tenant_id | True | Sua ID de locatário da entidade de serviço (aplicativo) do Azure |
grant_type | True | Especifica o tipo de concessão solicitado. Em um fluxo de Concessão de Credenciais de Cliente, o valor deve ser client_credentials. |
client_id | True | A ID do aplicativo (entidade de serviço) do aplicativo que você registrou no portal do Azure ou na CLI do Azure. |
client_secret | True | O segredo gerado para o aplicativo (entidade de serviço) |
recurso | True | Synapse resource uri, deve ser ''https://dev.azuresynapse.net |
curl -X GET -H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&client_id=<service_principal_app_id>&resource=<azure_synapse_resource_id>&client_secret=<service_principal_secret>' \
https://login.microsoftonline.com/<tenant_id>/oauth2/token
A resposta tem a seguinte aparência:
{
"token_type": "Bearer",
"expires_in": "599",
"ext_expires_in": "599",
"expires_on": "1575500666",
"not_before": "1575499766",
"resource": "2ff8...f879c1d",
"access_token": "ABC0eXAiOiJKV1Q......un_f1mSgCHlA"
}
2. Listar aplicativos em execução no espaço de trabalho do Azure Synapse
Para obter uma lista de aplicativos Apache Spark para um espaço de trabalho Synapse, você pode seguir este documento Monitoring - Get Apache Spark Job List.
3. Colete métricas de aplicativos Apache Spark com as APIs Prometheus ou REST
Colete métricas do aplicativo Apache Spark com a API Prometheus
Obtenha as métricas mais recentes do aplicativo Apache Spark especificado pela API Prometheus
GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/metrics/executors/prometheus?format=html
Parâmetro | Obrigatório | Descrição |
---|---|---|
endpoint | True | O ponto de extremidade de desenvolvimento do espaço de trabalho, por exemplo https://myworkspace.dev.azuresynapse.net. |
livyApiVersion | True | Versão api válida para a solicitação. Atualmente, é 2019-11-01-preview |
sparkPoolName | True | Nome da piscina de faíscas. |
sessionId | True | Identificador da sessão. |
sparkApplicationId | True | ID do aplicativo Spark |
Pedido de amostra:
GET https://myworkspace.dev.azuresynapse.net/livyApi/versions/2019-11-01-preview/sparkpools/mysparkpool/sessions/1/applications/application_1605509647837_0001/metrics/executors/prometheus?format=html
Exemplo de resposta:
Código de status: 200 A resposta se parece com:
metrics_executor_rddBlocks{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_memoryUsed_bytes{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 74992
metrics_executor_diskUsed_bytes{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_totalCores{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_maxTasks{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_activeTasks{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 1
metrics_executor_failedTasks_total{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 0
metrics_executor_completedTasks_total{application_id="application_1605509647837_0001", application_name="mynotebook_mysparkpool_1605509570802", executor_id="driver"} 2
...
Coletar métricas do aplicativo Apache Spark com a API REST
GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/executors
Parâmetro | Obrigatório | Descrição |
---|---|---|
endpoint | True | O ponto de extremidade de desenvolvimento do espaço de trabalho, por exemplo https://myworkspace.dev.azuresynapse.net. |
livyApiVersion | True | Versão api válida para a solicitação. Atualmente, é 2019-11-01-preview |
sparkPoolName | True | Nome da piscina de faíscas. |
sessionId | True | Identificador da sessão. |
sparkApplicationId | True | ID do aplicativo Spark |
Pedido de Amostra
GET https://myworkspace.dev.azuresynapse.net/livyApi/versions/2019-11-01-preview/sparkpools/mysparkpool/sessions/1/applications/application_1605509647837_0001/executors
Código de status de resposta de exemplo: 200
[
{
"id": "driver",
"hostPort": "f98b8fc2aea84e9095bf2616208eb672007bde57624:45889",
"isActive": true,
"rddBlocks": 0,
"memoryUsed": 75014,
"diskUsed": 0,
"totalCores": 0,
"maxTasks": 0,
"activeTasks": 0,
"failedTasks": 0,
"completedTasks": 0,
"totalTasks": 0,
"totalDuration": 0,
"totalGCTime": 0,
"totalInputBytes": 0,
"totalShuffleRead": 0,
"totalShuffleWrite": 0,
"isBlacklisted": false,
"maxMemory": 15845975654,
"addTime": "2020-11-16T06:55:06.718GMT",
"executorLogs": {
"stdout": "http://f98b8fc2aea84e9095bf2616208eb672007bde57624:8042/node/containerlogs/container_1605509647837_0001_01_000001/trusted-service-user/stdout?start=-4096",
"stderr": "http://f98b8fc2aea84e9095bf2616208eb672007bde57624:8042/node/containerlogs/container_1605509647837_0001_01_000001/trusted-service-user/stderr?start=-4096"
},
"memoryMetrics": {
"usedOnHeapStorageMemory": 75014,
"usedOffHeapStorageMemory": 0,
"totalOnHeapStorageMemory": 15845975654,
"totalOffHeapStorageMemory": 0
},
"blacklistedInStages": []
},
// ...
]
4. Crie as suas próprias ferramentas de diagnóstico e monitorização
A API Prometheus e as APIs REST fornecem dados de métricas avançados sobre as informações de execução do aplicativo Apache Spark. Você pode coletar os dados de métricas relacionados ao aplicativo por meio da API Prometheus e das APIs REST. E construa as suas próprias ferramentas de diagnóstico e monitorização que são mais adequadas às suas necessidades.