Partilhar via


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.

screenshot grant permission srbac

  1. Inicie sessão na sua área de trabalho do Azure Synapse Analytics como Synapse Administrator

  2. No Synapse Studio, no painel esquerdo, selecione Gerenciar > controle de acesso

  3. Clique no botão Adicionar no canto superior esquerdo para adicionar uma atribuição de função

  4. Em Escopo, escolha Espaço de trabalho

  5. Em Role, escolha Synapse Compute Operator

  6. Em Selecionar usuário, insira o <service_principal_name> e clique na entidade de serviço

  7. 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.