Sdílet prostřednictvím


Shromažďování metrik aplikací Apache Spark pomocí rozhraní API

Přehled

V tomto kurzu se dozvíte, jak integrovat stávající místní server Prometheus s pracovním prostorem Azure Synapse pro metriky aplikací Apache Spark téměř v reálném čase pomocí konektoru Synapse Prometheus.

V tomto kurzu se také seznámíte s rozhraními API pro metriky REST Azure Synapse. Data metrik aplikací Apache Spark můžete načíst prostřednictvím rozhraní REST API a vytvořit vlastní sadu nástrojů pro monitorování a diagnostiku nebo integrovat se systémy monitorování.

Použití konektoru Azure Synapse Prometheus pro místní servery Prometheus

Konektor Azure Synapse Prometheus je opensourcový projekt. Konektor Synapse Prometheus používá metodu zjišťování souborové služby, která umožňuje:

  • Ověřte se v pracovním prostoru Synapse prostřednictvím instančního objektu Microsoft Entra.
  • Seznam aplikací Apache Sparku pro načtení pracovního prostoru
  • Stáhněte si metriky aplikací Apache Spark prostřednictvím konfigurace založené na souborech Prometheus.

1. Předpoklad

Musíte mít server Prometheus nasazený na virtuálním počítači s Linuxem.

2. Vytvoření instančního objektu

Pokud chcete používat konektor Azure Synapse Prometheus na místním serveru Prometheus, měli byste k vytvoření instančního objektu použít následující postup.

2.1 Vytvoření instančního objektu:

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

Výsledek by měl vypadat takto:

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

Poznamenejte si ID aplikace, heslo a ID tenanta.

2.2 Přidejte odpovídající oprávnění k instančnímu objektu vytvořenému v předchozím kroku.

screenshot grant permission srbac

  1. Přihlaste se k pracovnímu prostoru Azure Synapse Analytics jako Správa istrator Synapse

  2. V nástroji Synapse Studio v levém podokně vyberte Spravovat > řízení přístupu.

  3. Kliknutím na tlačítko Přidat vlevo nahoře přidejte přiřazení role.

  4. Jako obor zvolte Pracovní prostor.

  5. Jako roli zvolte Operátor služby Synapse Compute.

  6. V části Vybrat uživatele zadejte service_principal_name <> a klikněte na instanční objekt.

  7. Klikněte na Použít (počkejte 3 minuty, než se oprávnění projeví.)

3. Stáhněte si azure Synapse Prometheus Připojení or

Pomocí příkazů nainstalujte azure Synapse Prometheus Připojení 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. Vytvoření konfiguračního souboru pro pracovní prostory Azure Synapse

V konfigurační složce vytvořte soubor config.yaml a vyplňte následující pole: workspace_name, tenant_id, service_principal_name a service_principal_password. V konfiguraci yaml můžete přidat více pracovních prostorů.

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

5. Aktualizace konfigurace Prometheus

Do scrape_config prometheus přidejte následující oddíl konfigurace a nahraďte <your_workspace_name> názvem pracovního prostoru a <path_to_synapse_connector> do naklonované složky 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. Spuštění konektoru na virtuálním počítači serveru Prometheus

Na virtuálním počítači serveru Prometheus spusťte server konektoru následujícím způsobem.

python main.py

Počkejte několik sekund a konektor by měl začít fungovat. A na stránce zjišťování služby Prometheus se můžete podívat na synapse-prometheus-connector.

Shromažďování dat metrik pomocí rozhraní API metrik Azure Synapse Prometheus nebo REST

1. Ověřování

K získání přístupového tokenu můžete použít tok přihlašovacích údajů klienta. Pokud chcete získat přístup k rozhraní API pro metriky, měli byste získat přístupový token Microsoft Entra pro instanční objekt, který má správná oprávnění pro přístup k rozhraním API.

Parametr Požadováno Popis
tenant_id True ID tenanta instančního objektu Azure (aplikace)
typ grantu True Určuje požadovaný typ udělení. V toku udělení přihlašovacích údajů klienta musí být hodnota client_credentials.
client_id True ID aplikace (instančního objektu) aplikace, kterou jste zaregistrovali na webu Azure Portal nebo v Azure CLI.
tajný klíč klienta True Tajný klíč vygenerovaný pro aplikaci (instanční objekt)
resource True Identifikátor URI prostředku Synapse by měl být '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

Odpověď vypadá takto:

{
  "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. Výpis spuštěných aplikací v pracovním prostoru Azure Synapse

Pokud chcete získat seznam aplikací Apache Spark pro pracovní prostor Synapse, můžete postupovat podle tohoto dokumentu Monitorování – Získat seznam úloh Apache Sparku.

3. Shromažďování metrik aplikací Apache Spark pomocí rozhraní Prometheus nebo REST API

Shromažďování metrik aplikací Apache Sparku pomocí rozhraní API Prometheus

Získání nejnovějších metrik zadané aplikace Apache Sparku pomocí rozhraní API prometheus

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/metrics/executors/prometheus?format=html
Parametr Požadováno Popis
endpoint True Koncový bod vývoje pracovního prostoru, například https://myworkspace.dev.azuresynapse.net.
livyApiVersion True Platná verze rozhraní API pro požadavek. V současné době je to 11. 11. 2019 ve verzi Preview.
sparkPoolName True Název fondu Spark.
sessionId True Identifikátor relace.
sparkApplicationId True ID aplikace Spark

Ukázkový požadavek:

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

Ukázková odpověď:

Stavový kód: Odpověď 200 vypadá takto:

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

Shromažďování metrik aplikací Apache Sparku pomocí rozhraní REST API

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/executors
Parametr Požadováno Popis
endpoint True Koncový bod vývoje pracovního prostoru, například https://myworkspace.dev.azuresynapse.net.
livyApiVersion True Platná verze rozhraní API pro požadavek. V současné době je to 11. 11. 2019 ve verzi Preview.
sparkPoolName True Název fondu Spark.
sessionId True Identifikátor relace.
sparkApplicationId True ID aplikace Spark

Ukázkový požadavek

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

Vzorový stavový kód odpovědi: 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. Vytvoření vlastních diagnostických a monitorovacích nástrojů

Rozhraní API Prometheus a rozhraní REST API poskytují bohatá data metrik o spuštěných informacích o aplikaci Apache Spark. Data metrik souvisejících s aplikacemi můžete shromažďovat prostřednictvím rozhraní API Prometheus a rozhraní REST API. A vytvořte si vlastní diagnostické a monitorovací nástroje, které jsou vhodnější pro vaše potřeby.