Samla in mått för Apache Spark-program med API:er

Översikt

I den här självstudien får du lära dig hur du integrerar din befintliga lokala Prometheus-server med Azure Synapse-arbetsytan för Apache Spark-programmått i nära realtid med hjälp av Synapse Prometheus-anslutningsappen.

I den här självstudien beskrivs även API:er för Azure Synapse REST-mått. Du kan hämta Apache Spark-programstatistikdata via REST-API:erna för att skapa en egen verktygslåda för övervakning och diagnos eller integrera med dina övervakningssystem.

Använda Azure Synapse Prometheus-anslutningsappen för dina lokala Prometheus-servrar

Azure Synapse Prometheus-anslutningsprogrammet är ett projekt med öppen källkod. Synapse Prometheus-anslutningsappen använder en filbaserad tjänstidentifieringsmetod så att du kan:

  • Autentisera till Synapse-arbetsytan via tjänstens huvudnamn för Microsoft Entra.
  • Hämta listan med Apache Spark-program på arbetsytan.
  • Hämta Apache Spark-programmått via Prometheus-filbaserad konfiguration.

1. Krav

Du måste ha en Prometheus-server distribuerad på en virtuell Linux-dator.

2. Skapa ett huvudnamn för tjänsten

Om du vill använda Azure Synapse Prometheus-anslutningsappen på din lokala Prometheus-server bör du följa stegen nedan för att skapa ett huvudnamn för tjänsten.

2.1 Skapa ett huvudnamn för tjänsten:

az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>

Resultatet bör se ut så här:

{
  "appId": "abcdef...",
  "displayName": "<service_principal_name>",
  "name": "http://<service_principal_name>",
  "password": "abc....",
  "tenant": "<tenant_id>"
}

Anteckna appId, lösenord och klientorganisations-ID.

2.2 Lägg till motsvarande behörigheter till tjänstens huvudnamn som skapades i ovanstående steg.

screenshot grant permission srbac

  1. Logga in på din Azure Synapse Analytics-arbetsyta som Synapse-administratör

  2. I Synapse Studio går du till fönstret till vänster och väljer Hantera > åtkomstkontroll

  3. Klicka på knappen Lägg till längst upp till vänster för att lägga till en rolltilldelning

  4. För Omfång väljer du Arbetsyta

  5. För Roll väljer du Synapse Compute Operator

  6. För Välj användare anger du service_principal_name <> och klickar på tjänstens huvudnamn

  7. Klicka på Använd (Vänta 3 minuter för att behörigheten ska börja gälla.)

3. Ladda ned Azure Synapse Prometheus Anslut eller

Använd kommandona för att installera Azure Synapse Prometheus Anslut or.

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. Skapa en konfigurationsfil för Azure Synapse-arbetsytor

Skapa en config.yaml-fil i mappen config och fyll i följande fält: workspace_name, tenant_id, service_principal_name och service_principal_password. Du kan lägga till flera arbetsytor i yaml-konfigurationen.

workspaces:
  - workspace_name: <your_workspace_name>
    tenant_id: <tenant_id>
    service_principal_name: <service_principal_app_id>
    service_principal_password: "<service_principal_password>"

5. Uppdatera Prometheus-konfigurationen

Lägg till följande konfigurationsavsnitt i din Prometheus-scrape_config och ersätt <your_workspace_name> till arbetsytans namn och <path_to_synapse_connector> till din klonade mapp 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. Starta anslutningsappen på den virtuella Datorn Prometheus-servern

Starta en anslutningsserver på den virtuella Prometheus-serverdatorn enligt följande.

python main.py

Vänta några sekunder och anslutningsappen bör börja fungera. Och du kan se "synapse-prometheus-connector" på sidan För identifiering av Prometheus-tjänsten.

Använda API:er för Azure Synapse Prometheus eller REST-mått för att samla in måttdata

1. Autentisering

Du kan använda flödet för klientautentiseringsuppgifter för att hämta en åtkomsttoken. För att få åtkomst till mått-API:et bör du få en Microsoft Entra-åtkomsttoken för tjänstens huvudnamn, som har rätt behörighet att komma åt API:erna.

Parameter Obligatoriskt Beskrivning
tenant_id Sant Ditt klient-ID för Azure-tjänstens huvudnamn (program)
grant_type Sant Anger den begärda beviljandetypen. I ett flöde för beviljande av klientautentiseringsuppgifter måste värdet vara client_credentials.
client_id Sant Programmets (tjänstens huvudnamn) ID för det program som du registrerade i Azure-portalen eller Azure CLI.
client_secret Sant Hemligheten som genereras för programmet (tjänstens huvudnamn)
resource Sant Synapse-resurs-URI bör vara "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

Svaret ser ut så här:

{
  "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. Lista program som körs på Azure Synapse-arbetsytan

Om du vill hämta en lista över Apache Spark-program för en Synapse-arbetsyta kan du följa det här dokumentet Övervakning – Hämta Apache Spark-jobblista.

3. Samla in Apache Spark-programmått med Prometheus- eller REST-API:er

Samla in Apache Spark-programmått med Prometheus API

Hämta de senaste måtten för det angivna Apache Spark-programmet av Prometheus API

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/metrics/executors/prometheus?format=html
Parameter Obligatoriskt Beskrivning
slutpunkt Sant Slutpunkten för arbetsytans utveckling, till exempel https://myworkspace.dev.azuresynapse.net.
livyApiVersion Sant Giltig API-version för begäran. För närvarande är det 2019-11-01-preview
sparkPoolName Sant Namnet på spark-poolen.
sessionId Sant Identifierare för sessionen.
sparkApplicationId Sant Spark-program-ID

Exempelbegäran:

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

Exempelsvar:

Statuskod: 200 Svar ser ut så här:

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

Samla in Apache Spark-programmått med REST-API:et

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/executors
Parameter Obligatoriskt Beskrivning
slutpunkt Sant Slutpunkten för arbetsytans utveckling, till exempel https://myworkspace.dev.azuresynapse.net.
livyApiVersion Sant Giltig API-version för begäran. För närvarande är det 2019-11-01-preview
sparkPoolName Sant Namnet på spark-poolen.
sessionId Sant Identifierare för sessionen.
sparkApplicationId Sant Spark-program-ID

Exempelförfrågan

GET https://myworkspace.dev.azuresynapse.net/livyApi/versions/2019-11-01-preview/sparkpools/mysparkpool/sessions/1/applications/application_1605509647837_0001/executors

Exempel på svarsstatuskod: 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. Skapa egna diagnos- och övervakningsverktyg

Prometheus-API:et och REST-API:erna innehåller omfattande måttdata om apache Spark-programmet som kör information. Du kan samla in programrelaterade måttdata via Prometheus-API:et och REST-API:erna. Och skapa dina egna diagnos- och övervakningsverktyg som passar bättre för dina behov.