Delen via


Metrische gegevens van Apache Spark-toepassingen verzamelen met behulp van API's

Overzicht

In deze zelfstudie leert u hoe u uw bestaande on-premises Prometheus-server integreert met azure Synapse-werkruimte voor bijna realtime metrische gegevens van Apache Spark-toepassingen met behulp van de Synapse Prometheus-connector.

In deze zelfstudie worden ook de API's voor metrische gegevens van Azure Synapse REST geïntroduceerd. U kunt metrische gegevens van apache Spark-toepassingen ophalen via de REST API's om uw eigen bewakings- en diagnosetoolkit te bouwen of te integreren met uw bewakingssystemen.

Azure Synapse Prometheus-connector gebruiken voor uw on-premises Prometheus-servers

Azure Synapse Prometheus-connector is een opensource-project. De Synapse Prometheus-connector maakt gebruik van een op bestanden gebaseerde servicedetectiemethode waarmee u het volgende kunt doen:

  • Verifiëren bij Synapse-werkruimte via een Microsoft Entra-service-principal.
  • Lijst met Apache Spark-toepassingen voor werkruimte ophalen.
  • Pull Apache Spark application metrics through Prometheus file-based configuration.

1. Vereiste

U moet een Prometheus-server hebben geïmplementeerd op een Virtuele Linux-machine.

2. Een service-principal maken

Als u de Azure Synapse Prometheus-connector in uw on-premises Prometheus-server wilt gebruiken, volgt u de onderstaande stappen om een service-principal te maken.

2.1 Een service-principal maken:

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

Het resultaat moet er als volgt uitzien:

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

Noteer de appId, het wachtwoord en de tenant-id.

2.2 Voeg overeenkomstige machtigingen toe aan de service-principal die in de bovenstaande stap is gemaakt.

screenshot grant permission srbac

  1. Meld u aan bij uw Azure Synapse Analytics-werkruimte als Synapse Beheer istrator

  2. In Synapse Studio selecteert u in het linkerdeelvenster Toegangsbeheer beheren >

  3. Klik linksboven op de knop Toevoegen om een roltoewijzing toe te voegen

  4. Kies voor Bereik de optie Werkruimte

  5. Voor Rol kiest u Synapse Compute-operator

  6. Voer voor Gebruiker selecteren uw <service_principal_name> in en klik op uw service-principal

  7. Klik op Toepassen (wacht 3 minuten totdat de machtiging van kracht wordt.)

3. Download de Azure Synapse Prometheus-Verbinding maken or

Gebruik de opdrachten om de Azure Synapse Prometheus-Verbinding maken or te installeren.

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. Een configuratiebestand maken voor Azure Synapse-werkruimten

Maak een bestand config.yaml in de configuratiemap en vul de volgende velden in: workspace_name, tenant_id, service_principal_name en service_principal_password. U kunt meerdere werkruimten toevoegen in de yaml-configuratie.

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

5. De Prometheus-configuratie bijwerken

Voeg de volgende configuratiesectie toe aan uw Prometheus-scrape_config en vervang de your_workspace_name door de <naam van uw werkruimte en de <path_to_synapse_connector> aan de gekloonde map 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. Start de connector in de Prometheus-server-VM

Start als volgt een connectorserver in de Prometheus-server-VM.

python main.py

Wacht enkele seconden en de connector werkt nu. En u kunt de 'synapse-prometheus-connector' zien op de detectiepagina van de Prometheus-service.

Api's voor metrische gegevens van Azure Synapse Prometheus of REST gebruiken om metrische gegevens te verzamelen

1. Verificatie

U kunt de clientreferentiestroom gebruiken om een toegangstoken op te halen. Als u toegang wilt krijgen tot de API voor metrische gegevens, moet u een Microsoft Entra-toegangstoken ophalen voor de service-principal, die over de juiste machtigingen beschikt om toegang te krijgen tot de API's.

Parameter Vereist Beschrijving
tenant_id Waar De tenant-id van uw Azure-service-principal (toepassing)
grant_type Waar Hiermee geeft u het aangevraagde toekenningstype. In een stroom voor het verlenen van clientreferenties moet de waarde worden client_credentials.
client_id Waar De toepassings-id (service-principal) van de toepassing die u hebt geregistreerd in Azure Portal of Azure CLI.
client_secret Waar Het geheim dat is gegenereerd voor de toepassing (service-principal)
resource Waar Synapse-resource-URI moet 'https://dev.azuresynapse.net' zijn
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

Antwoord ziet er als volgt uit:

{
  "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. Lijst met actieve toepassingen in de Azure Synapse-werkruimte

Als u een lijst met Apache Spark-toepassingen voor een Synapse-werkruimte wilt ophalen, volgt u dit document bewaken - Apache Spark-takenlijst ophalen.

3. Metrische gegevens van Apache Spark-toepassingen verzamelen met de Prometheus- of REST-API's

Metrische gegevens van Apache Spark-toepassingen verzamelen met de Prometheus-API

De meest recente metrische gegevens ophalen van de opgegeven Apache Spark-toepassing door de Prometheus-API

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/metrics/executors/prometheus?format=html
Parameter Vereist Beschrijving
endpoint Waar Het eindpunt voor de ontwikkeling van de werkruimte, bijvoorbeeld https://myworkspace.dev.azuresynapse.net.
livyApiVersion Waar Geldige API-versie voor de aanvraag. Momenteel is het 2019-11-01-preview
sparkPoolName Waar Naam van de spark-pool.
sessionId Waar Id voor de sessie.
sparkApplicationId Waar Spark-toepassings-id

Voorbeeldaanvraag:

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

Voorbeeldantwoord:

Statuscode: 200-antwoord ziet er als volgt uit:

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

Metrische gegevens van Apache Spark-toepassingen verzamelen met de REST API

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/executors
Parameter Vereist Beschrijving
endpoint Waar Het eindpunt voor de ontwikkeling van de werkruimte, bijvoorbeeld https://myworkspace.dev.azuresynapse.net.
livyApiVersion Waar Geldige API-versie voor de aanvraag. Momenteel is het 2019-11-01-preview
sparkPoolName Waar Naam van de spark-pool.
sessionId Waar Id voor de sessie.
sparkApplicationId Waar Spark-toepassings-id

Voorbeeldaanvraag

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

Voorbeeld van antwoordstatuscode: 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. Uw eigen diagnose- en bewakingshulpprogramma's bouwen

De Prometheus-API en de REST API's bieden uitgebreide metrische gegevens over de Apache Spark-toepassing die wordt uitgevoerd. U kunt de toepassingsgerelateerde metrische gegevens verzamelen via de Prometheus-API en de REST API's. En bouw uw eigen diagnose- en bewakingshulpprogramma's die geschikter zijn voor uw behoeften.