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.
Přihlaste se k pracovnímu prostoru Azure Synapse Analytics jako Správa istrator Synapse
V nástroji Synapse Studio v levém podokně vyberte Spravovat > řízení přístupu.
Kliknutím na tlačítko Přidat vlevo nahoře přidejte přiřazení role.
Jako obor zvolte Pracovní prostor.
Jako roli zvolte Operátor služby Synapse Compute.
V části Vybrat uživatele zadejte service_principal_name <> a klikněte na instanční objekt.
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.