Collecter les métriques des applications Apache Spark avec des API
Vue d’ensemble
Dans ce tutoriel, vous allez voir comment intégrer votre serveur Prometheus local à l’espace de travail Azure Synapse pour obtenir les métriques de l’application Apache Spark en quasi-temps réel grâce au connecteur Synapse Prometheus.
Ce tutoriel présente également les API de métriques REST Azure Synapse. Vous pouvez récupérer les données de métriques de l’application Apache Spark grâce aux API REST pour créer votre propre kit de ressources de supervision et de diagnostic, ou les intégrer à vos systèmes de supervision.
Utiliser le connecteur Azure Synapse Prometheus pour vos serveurs Prometheus locaux
Le connecteur Azure Synapse Prometheus est un projet open source. Le connecteur Synapse Prometheus utilise une méthode de découverte de service basée sur les fichiers pour vous permettre de :
- Vous authentifier auprès de l’espace de travail Synapse à l’aide d’un principal de service Microsoft Entra.
- Récupérer la liste des applications Apache Spark de l’espace de travail.
- Tirez (pull) les métriques de l’application Apache Spark à l’aide de la configuration basée sur les fichiers Prometheus.
1. Configuration requise
Vous devez avoir un serveur Prometheus déployé sur une machine virtuelle Linux.
2. Créer un principal du service
Pour utiliser le connecteur Azure Synapse Prometheus sur votre serveur Prometheus local, créez un principal de service en suivant les étapes ci-dessous.
2.1 Créer un principal de service :
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Le résultat doit avoir l’aspect suivant :
{
"appId": "abcdef...",
"displayName": "<service_principal_name>",
"name": "http://<service_principal_name>",
"password": "abc....",
"tenant": "<tenant_id>"
}
Notez l’appId, le mot de passe et l’ID de locataire.
2.2 Ajouter les autorisations correspondantes au principal de service créé lors de l’étape ci-dessus.
Connectez-vous à votre espace de travail Azure Synapse Analytics en tant qu’administrateur Synapse
Dans Synapse Studio, sélectionnez Gérer > Contrôle d’accès dans le volet de gauche
Cliquez sur le bouton Ajouter situé en haut à gauche pour ajouter une attribution de rôle
Pour Étendue, choisissez Espace de travail
Pour Rôle, choisissez Opérateur de capacité de calcul Synapse
Pour Sélectionner un utilisateur, entrez votre <service_principal_name> et cliquez sur votre principal de service
Cliquez sur Appliquer (attendez 3 minutes pour que l’autorisation prenne effet.)
3. Télécharger le connecteur Azure Synapse Prometheus
Utilisez les commandes pour installer le connecteur 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. Créer un fichier config pour les espaces de travail Azure Synapse
Créez un fichier config.yaml dans le dossier config et remplissez les champs suivants : workspace_name, tenant_id, service_principal_name et service_principal_password. Vous pouvez ajouter plusieurs espaces de travail dans la configuration yaml.
workspaces:
- workspace_name: <your_workspace_name>
tenant_id: <tenant_id>
service_principal_name: <service_principal_app_id>
service_principal_password: "<service_principal_password>"
5. Mettre à jour la configuration Prometheus
Ajoutez la section de configuration suivante dans votre scrape_config Prometheus et remplacez <your_workspace_name> par le nom de votre espace de travail et <path_to_synapse_connector> par votre dossier synapse-prometheus-connector cloné
- 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. Démarrer le connecteur dans la machine virtuelle du serveur Prometheus
Procédez comme suit pour démarrer un serveur de connecteur dans la machine virtuelle du serveur Prometheus.
python main.py
Le connecteur devrait fonctionner au bout de quelques secondes. Vous pouvez voir « synapse-prometheus-connector » dans la page de découverte du service Prometheus.
Utilisez Azure Synapse Prometheus ou les API de métriques REST pour collecter les données de métriques
1. Authentification
Vous pouvez utiliser le flux des informations d’identification du client pour obtenir un jeton d’accès. Pour accéder à l’API de métriques, vous devez obtenir un jeton d’accès Microsoft Entra pour le principal de service, qui dispose de l’autorisation nécessaire pour accéder aux API.
Paramètre | Obligatoire | Description |
---|---|---|
tenant_id | True | L’ID de locataire de votre principal de service (application) Azure |
grant_type | True | Spécifie le type d’autorisation demandée. Dans un flux d'octroi d'informations d'identification de client, la valeur doit être client_credentials. |
client_id | True | L’ID de l’application (principal de service) que vous avez inscrite dans le Portail Azure ou Azure CLI. |
client_secret | True | Le secret généré pour l’application (principal de service) |
resource | True | L’URI de ressource Synapse doit être « 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
La réponse se présente ainsi :
{
"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. Liste des applications en cours d’exécution dans l’espace de travail Azure Synapse
Si vous souhaitez obtenir la liste des applications Apache Spark pour un espace de travail Synapse, consultez ce document Supervision – Obtenir la liste des travaux Apache Spark.
3. Collecter les métriques de l’application Apache Spark avec les API REST ou Prometheus
Collecter les métriques de l’application Apache Spark avec l’API Prometheus
Obtenir les dernières métriques de l’application Apache Spark spécifiée grâce à l’API Prometheus
GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/metrics/executors/prometheus?format=html
Paramètre | Obligatoire | Description |
---|---|---|
endpoint | True | Point de terminaison de développement de l’espace de travail, par exemple, https://myworkspace.dev.azuresynapse.net. |
livyApiVersion | True | Version valide de l’API pour la requête. Il s’agit actuellement de la préversion 2019-11-01 |
sparkPoolName | True | Nom du pool Spark. |
sessionID | True | Identificateur de la session. |
sparkApplicationId | True | ID de l’application Spark |
Exemple de demande :
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
Exemple de réponse :
Code d’état : la réponse 200 se présente ainsi :
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
...
Collecter les métriques de l’application Apache Spark avec l’API REST
GET https://{endpoint}/livyApi/versions/{livyApiVersion}/sparkpools/{sparkPoolName}/sessions/{sessionId}/applications/{sparkApplicationId}/executors
Paramètre | Obligatoire | Description |
---|---|---|
endpoint | True | Point de terminaison de développement de l’espace de travail, par exemple, https://myworkspace.dev.azuresynapse.net. |
livyApiVersion | True | Version valide de l’API pour la requête. Il s’agit actuellement de la préversion 2019-11-01 |
sparkPoolName | True | Nom du pool Spark. |
sessionID | True | Identificateur de la session. |
sparkApplicationId | True | ID de l’application Spark |
Exemple de demande
GET https://myworkspace.dev.azuresynapse.net/livyApi/versions/2019-11-01-preview/sparkpools/mysparkpool/sessions/1/applications/application_1605509647837_0001/executors
Exemple du code d’état de la réponse : 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. Créer vos propres outils de diagnostic et de surveillance
L’API Prometheus et les API REST fournissent des données de métriques enrichies sur les informations d’exécution de l’application Apache Spark. Vous pouvez collecter les données de métriques relatives à l’application grâce à l’API Prometheus et aux API REST. Vous pouvez aussi créer vos propres outils de diagnostic et de surveillance qui sont plus adaptés à vos besoins.