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.
Zaloguj się do obszaru roboczego usługi Azure Synapse Analytics jako Administracja istrator usługi Synapse
W programie Synapse Studio w okienku po lewej stronie wybierz pozycję Zarządzaj > kontrolą dostępu
Kliknij przycisk Dodaj w lewym górnym rogu, aby dodać przypisanie roli
W obszarze Zakres wybierz pozycję Obszar roboczy
W obszarze Rola wybierz pozycję Operator obliczeniowy usługi Synapse
W polu Wybierz użytkownika wprowadź <service_principal_name> i kliknij jednostkę usługi
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.