Udostępnij za pośrednictwem


Zbieranie metryk aplikacji platformy Apache Spark przy użyciu interfejsów API

Omówienie

Z tego samouczka dowiesz się, jak zintegrować istniejący lokalny serwer Prometheus z obszarem roboczym usługi Azure Synapse na potrzeby metryk aplikacji platformy Apache Spark niemal w czasie rzeczywistym przy użyciu łącznika usługi Synapse Prometheus.

W tym samouczku przedstawiono również interfejsy API metryk REST usługi Azure Synapse. Możesz pobrać dane metryk aplikacji platformy Apache Spark za pomocą interfejsów API REST, aby utworzyć własny zestaw narzędzi do monitorowania i diagnostyki lub zintegrować je z systemami monitorowania.

Używanie łącznika Usługi Azure Synapse Prometheus dla lokalnych serwerów Prometheus

Łącznik usługi Azure Synapse Prometheus to projekt typu open source. Łącznik Synapse Prometheus używa metody odnajdywania usługi opartej na plikach, aby umożliwić:

  • Uwierzytelnianie w obszarze roboczym usługi Synapse za pośrednictwem jednostki usługi Microsoft Entra.
  • Pobieranie listy aplikacji platformy Apache Spark w obszarze roboczym.
  • Ściąganie metryk aplikacji platformy Apache Spark za pomocą konfiguracji opartej na plikach Rozwiązania Prometheus.

1. Wymaganie wstępne

Musisz mieć serwer Prometheus wdrożony na maszynie wirtualnej z systemem Linux.

2. Tworzenie jednostki usługi

Aby użyć łącznika usługi Azure Synapse Prometheus na lokalnym serwerze Prometheus, wykonaj poniższe kroki, aby utworzyć jednostkę usługi.

2.1. Utwórz jednostkę usługi:

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

Wynik powinien wyglądać następująco:

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

Zanotuj identyfikator aplikacji, hasło i identyfikator dzierżawy.

2.2 Dodaj odpowiednie uprawnienia do jednostki usługi utworzonej w powyższym kroku.

screenshot grant permission srbac

  1. Zaloguj się do obszaru roboczego usługi Azure Synapse Analytics jako Administracja istrator usługi Synapse

  2. W programie Synapse Studio w okienku po lewej stronie wybierz pozycję Zarządzaj > kontrolą dostępu

  3. Kliknij przycisk Dodaj w lewym górnym rogu, aby dodać przypisanie roli

  4. W obszarze Zakres wybierz pozycję Obszar roboczy

  5. W obszarze Rola wybierz pozycję Operator obliczeniowy usługi Synapse

  6. W polu Wybierz użytkownika wprowadź <service_principal_name> i kliknij jednostkę usługi

  7. Kliknij przycisk Zastosuj (poczekaj 3 minuty, aby uprawnienia zaczęły obowiązywać).

3. Pobierz Połączenie or usługi Azure Synapse Prometheus

Użyj poleceń, aby zainstalować Połączenie or usługi Azure Synapse Prometheus.

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. Tworzenie pliku konfiguracji dla obszarów roboczych usługi Azure Synapse

Utwórz plik config.yaml w folderze config i wypełnij następujące pola: workspace_name, tenant_id, service_principal_name i service_principal_password. W konfiguracji yaml można dodać wiele obszarów roboczych.

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

5. Aktualizowanie konfiguracji rozwiązania Prometheus

Dodaj następującą sekcję konfiguracji w scrape_config Prometheus i zastąp <your_workspace_name> nazwą obszaru roboczego i <path_to_synapse_connector> sklonowanym folderem 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. Uruchom łącznik na maszynie wirtualnej serwera Prometheus

Uruchom serwer łącznika na maszynie wirtualnej serwera Prometheus w następujący sposób.

python main.py

Poczekaj kilka sekund, a łącznik powinien zacząć działać. Na stronie odnajdywania usługi Prometheus można zobaczyć "synapse-prometheus-connector".

Zbieranie danych metryk przy użyciu usługi Azure Synapse Prometheus lub interfejsów API metryk REST

1. Uwierzytelnianie

Aby uzyskać token dostępu, możesz użyć przepływu poświadczeń klienta. Aby uzyskać dostęp do interfejsu API metryk, należy uzyskać token dostępu firmy Microsoft dla jednostki usługi, która ma odpowiednie uprawnienia dostępu do interfejsów API.

Parametr Wymagania opis
tenant_id Prawda Identyfikator dzierżawy jednostki usługi platformy Azure (aplikacji)
grant_type Prawda Określa żądany typ udzielenia. W przepływie udzielanie poświadczeń klienta wartość musi być client_credentials.
client_id Prawda Identyfikator aplikacji (jednostki usługi) aplikacji zarejestrowanej w witrynie Azure Portal lub interfejsie wiersza polecenia platformy Azure.
client_secret Prawda Wpis tajny wygenerowany dla aplikacji (jednostka usługi)
zasób Prawda Identyfikator URI zasobu usługi Synapse powinien mieć wartość "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

Odpowiedź wygląda następująco:

{
  "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. Wyświetlanie listy uruchomionych aplikacji w obszarze roboczym usługi Azure Synapse

Aby uzyskać listę aplikacji platformy Apache Spark dla obszaru roboczego usługi Synapse, możesz skorzystać z tego dokumentu Monitorowanie — pobierz listę zadań platformy Apache Spark.

3. Zbieranie metryk aplikacji platformy Apache Spark przy użyciu interfejsów API Prometheus lub REST

Zbieranie metryk aplikacji platformy Apache Spark przy użyciu interfejsu API Rozwiązania Prometheus

Pobieranie najnowszych metryk określonej aplikacji Platformy Apache Spark przez interfejs API Prometheus

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/metrics/executors/prometheus?format=html
Parametr Wymagania opis
endpoint Prawda Punkt końcowy programowania obszaru roboczego, na przykład https://myworkspace.dev.azuresynapse.net.
livyApiVersion Prawda Prawidłowa wersja interfejsu API dla żądania. Obecnie jest to 2019-11-01-preview
sparkPoolName Prawda Nazwa puli spark.
sessionId Prawda Identyfikator sesji.
sparkApplicationId Prawda Identyfikator aplikacji platformy Spark

Przykładowe żądanie:

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

Przykładowa odpowiedź:

Kod stanu: 200 Odpowiedź wygląda następująco:

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

Zbieranie metryk aplikacji platformy Apache Spark za pomocą interfejsu API REST

GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/executors
Parametr Wymagania opis
endpoint Prawda Punkt końcowy programowania obszaru roboczego, na przykład https://myworkspace.dev.azuresynapse.net.
livyApiVersion Prawda Prawidłowa wersja interfejsu API dla żądania. Obecnie jest to 2019-11-01-preview
sparkPoolName Prawda Nazwa puli spark.
sessionId Prawda Identyfikator sesji.
sparkApplicationId Prawda Identyfikator aplikacji platformy Spark

Przykładowe żądanie

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

Przykładowy kod stanu odpowiedzi: 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. Tworzenie własnych narzędzi do diagnostyki i monitorowania

Interfejs API Prometheus i interfejsy API REST udostępniają zaawansowane dane metryk dotyczące uruchomionej aplikacji Apache Spark. Dane metryk związanych z aplikacją można zbierać za pomocą interfejsu API Prometheus i interfejsów API REST. Utwórz własne narzędzia do diagnostyki i monitorowania, które są bardziej odpowiednie dla Twoich potrzeb.