View a markdown version of this page

Collecte Slurm métriques avec un gestionnaire Prometheus collectionneur - AWS PIÈCES

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Collecte Slurm métriques avec un gestionnaire Prometheus collectionneur

Après avoir activé Slurm les métriques sur votre cluster AWS PCS (voirSlurm métriques dans AWS PIÈCES), vous pouvez utiliser un Prometheus collecteur géré pour extraire automatiquement les points de terminaison des métriques et fournir les données pour PromQL les requêtes. Le collecteur géré crée des interfaces réseau élastiques dans vos sous-réseaux VPC pour atteindre les points de terminaison des métriques du contrôleur de cluster sur le port 6817.

Le collecteur peut fournir des métriques vers l'une des destinations suivantes :

  • Amazon Managed Service for Prometheus Workspace  : un magasin de métriques dédié et Prometheus compatible avec une durée de conservation configurable (150 jours par défaut). Vous pouvez effectuer des requêtes via des API Prometheus compatibles ouGrafana.

  • CloudWatch jeu de données  : ensemble de CloudWatch données par défaut de votre compte avec 15 mois de conservation inclus. Vous pouvez effectuer des requêtes via CloudWatch Query Studio ou l'API HTTP Prometheus compatible.

La configuration côté cluster (Slurmparamètres, cible du contrôleur, groupes de sécurité et configuration du scrape) est la même quelle que soit la destination que vous choisissez. Seul le destination bloc de la requête Create-Scraper et le point de terminaison de la requête diffèrent.

Vous créez le collecteur à l'aide de la aws amp create-scraper commande. Bien que cette commande appartienne à l'espace de noms amp CLI, elle prend en charge les deux destinations.

Pour plus d'informations sur les collecteurs VPC-connected gérés, voir Configurer un collecteur VPC-connected géré dans le Guide de CloudWatch l'utilisateur Amazon.

Conditions préalables

Avant de configurer le collecteur géré, vérifiez les points suivants :

  • Slurmmétriques activées  : le point de terminaison des métriques doit être actif sur votre cluster. Vous l'activez en définissant les paramètres MetricsType et Slurm les paramètres CommunicationParameters personnalisés. Pour obtenir des instructions sur l'activation Slurm des métriques, consultezSlurm métriques dans AWS PIÈCES. Pour plus d'informations sur Slurm les paramètres personnalisés, consultezConfiguration des paramètres personnalisés de Slurm dans AWS PIÈCES.

  • Slurmversion 25.11 ou supérieure  : le cluster doit exécuter la version Slurm 25.11 ou supérieure pour exposer le point de terminaison des métriques.

  • Ressource de destination  : créez la destination de vos indicateurs :

    • Amazon Managed Service pour l'espace de travail Prometheus  : créez un espace de travail et attendez qu'il atteigne ACTIVE son statut. Pour obtenir des instructions sur la création d'un espace de travail, voir Créer un espace de travail dans le guide de l'utilisateur d'Amazon Managed Service for Prometheus.

    • CloudWatch jeu de données — Chaque compte possède un default ensemble de données dans chaque région. Vous n'avez pas besoin de le créer.

  • Sous-réseaux VPC et mise en réseau  : vous avez besoin d'au moins deux sous-réseaux dans des zones de disponibilité différentes au sein du même VPC que le contrôleur de cluster. Incluez la zone de disponibilité où se trouve l'interface réseau du contrôleur. Le VPC doit prendre en charge le DNS et les noms d'hôte DNS doivent être activés. Pour connaître les exigences réseau détaillées, consultez la section Configuration d'un collecteur VPC-connected géré dans le Guide de CloudWatch l'utilisateur Amazon.

  • Groupes de sécurité  : un groupe de sécurité dédié est requis pour le collecteur. Pour obtenir des instructions sur la configuration des groupes de sécurité, consultezConfigurer les groupes de sécurité pour le collecteur.

  • Autorisations IAM  : principal IAM qui crée les besoins et les autorisations du scraper. aps:CreateScraper iam:CreateServiceLinkedRole Le service crée automatiquement un rôle lié au service ()AWSServiceRoleForAmazonPrometheusScraper. Ce rôle donne au collecteur l'autorisation d'accéder à vos ressources VPC et d'écrire vers la destination que vous avez choisie. Aucune configuration manuelle des rôles n'est requise. Pour plus d'informations, consultez la section Utilisation des rôles liés aux services dans le guide de l'utilisateur d'Amazon Managed Service for Prometheus.

  • Point de terminaison Internet ou VPC  : les sous-réseaux du collecteur doivent être en mesure d'atteindre le service de destination. Si vos sous-réseaux n'ont pas accès à Internet, créez un point de terminaison VPC d'interface dans le même VPC et les mêmes sous-réseaux. com.amazonaws.region.aps-workspacesÀ utiliser pour une destination d'espace de travail Amazon Managed Service pour Prometheus ou com.amazonaws.region.monitoring pour une destination de CloudWatch jeu de données.

Configurer les groupes de sécurité pour le collecteur

Nous vous recommandons de créer un groupe de sécurité dédié pour le collecteur géré plutôt que de réutiliser un groupe de sécurité existant. Un groupe dédié vous donne des règles explicites et vérifiables qui suivent le principe du moindre privilège.

Important

Le enable_http paramètre expose un point de terminaison HTTP non authentifié sur le port 6817. Restreignez l'accès entrant sur ce port au groupe de sécurité du collecteur uniquement. N'autorisez pas un accès réseau étendu (tel qu'une plage d'adresses CIDR) à ce port.

La procédure suivante utilise des variables shell pour les ID des groupes de sécurité. Définissez ces variables avant d'exécuter les commandes :

  • VPC_ID— L'ID du VPC sur lequel se trouve votre cluster AWS PCS.

  • CLUSTER_SG_ID— L'ID du groupe de sécurité associé à votre cluster (celui que vous avez spécifié lors de la création du cluster).

  • VPCE_SG_ID— L'ID du groupe de sécurité associé à votre point de terminaison VPC d'interface. Cette variable n'est nécessaire que si vos sous-réseaux collecteurs atteignent le service de destination via un point de terminaison VPC d'interface plutôt que via Internet ou une sortie NAT. Le point de terminaison est com.amazonaws.region.aps-workspaces destiné à une destination d'espace de travail Amazon Managed Service pour Prometheus ou com.amazonaws.region.monitoring à une destination de CloudWatch jeu de données.

Pour configurer des groupes de sécurité pour les Prometheus collectionneur
  1. Créez un groupe de sécurité dédié pour le collecteur et saisissez l'ID du groupe :

    COLLECTOR_SG_ID=$(aws ec2 create-security-group \ --group-name "pcs-prometheus-collector" \ --description "Security group for managed Prometheus collector" \ --vpc-id "$VPC_ID" \ --query 'GroupId' \ --output text)
  2. Ajoutez une règle entrante au groupe de sécurité du cluster qui autorise le trafic TCP sur le port 6817 à partir du groupe de sécurité du collecteur. Cette règle permet au collecteur de récupérer le point de terminaison des Slurm métriques sur le contrôleur.

    Utilisez le --ip-permissions formulaire pour inclure une description des règles d'auditabilité :

    aws ec2 authorize-security-group-ingress \ --group-id "$CLUSTER_SG_ID" \ --ip-permissions \ 'IpProtocol=tcp,FromPort=6817,ToPort=6817,UserIdGroupPairs=[{GroupId='"$COLLECTOR_SG_ID"',Description="Prometheus collector scrapes Slurm metrics"}]'

    Vous pouvez également utiliser le formulaire plus court sans description de règle :

    aws ec2 authorize-security-group-ingress \ --group-id "$CLUSTER_SG_ID" \ --protocol tcp \ --port 6817 \ --source-group "$COLLECTOR_SG_ID"
  3. (Facultatif) Bloquez le trafic sortant sur le groupe de sécurité du collecteur. Par défaut, un groupe de sécurité nouvellement créé autorise tout le trafic sortant. Si vous souhaitez appliquer la sortie explicite uniquement pour renforcer la sécurité, révoquez la règle d'autorisation par défaut et ajoutez uniquement les règles de sortie requises par le collecteur.

    Révoquez la règle d'autorisation de sortie par défaut :

    aws ec2 revoke-security-group-egress \ --group-id "$COLLECTOR_SG_ID" \ --ip-permissions '[{"IpProtocol":"-1","IpRanges":[{"CidrIp":"0.0.0.0/0"}]}]'

    Ajoutez une règle de sortie explicite pour permettre au collecteur d'atteindre le contrôleur sur le TCP 6817 :

    aws ec2 authorize-security-group-egress \ --group-id "$COLLECTOR_SG_ID" \ --ip-permissions \ 'IpProtocol=tcp,FromPort=6817,ToPort=6817,UserIdGroupPairs=[{GroupId='"$CLUSTER_SG_ID"',Description="Egress to Slurm controller for metrics scraping"}]'

    Ajoutez une règle de sortie explicite pour HTTPS (TCP 443) afin d'atteindre la destination de diffusion des métriques (Amazon Managed Service pour Prometheus ou) : CloudWatch

    aws ec2 authorize-security-group-egress \ --group-id "$COLLECTOR_SG_ID" \ --ip-permissions \ 'IpProtocol=tcp,FromPort=443,ToPort=443,IpRanges=[{CidrIp=0.0.0.0/0,Description="HTTPS egress for metrics delivery"}]'

    Pour un contrôle plus strict des sous-réseaux qui utilisent un point de terminaison VPC pour la distribution, remplacez la plage CIDR par le groupe de sécurité du point de terminaison VPC :

    aws ec2 authorize-security-group-egress \ --group-id "$COLLECTOR_SG_ID" \ --ip-permissions \ 'IpProtocol=tcp,FromPort=443,ToPort=443,UserIdGroupPairs=[{GroupId='"$VPCE_SG_ID"',Description="HTTPS egress to VPC endpoint for metrics delivery"}]'
    Note

    Si vous n'avez pas révoqué la règle de sortie par défaut, vous pouvez ignorer cette étape. La règle par défaut autorise déjà tout le trafic sortant, y compris le trafic vers le port 6817 et le port 443.

  4. (Clusters isolés) Si vos sous-réseaux collecteurs n'ont pas accès à Internet et utilisent un point de terminaison VPC d'interface pour atteindre le service de destination, ajoutez une règle entrante au groupe de sécurité du point de terminaison VPC. Cette règle permet au trafic HTTPS du collecteur d'atteindre les interfaces réseau des terminaux. Il s'agit d'une étape souvent manquée.

    aws ec2 authorize-security-group-ingress \ --group-id "$VPCE_SG_ID" \ --ip-permissions \ 'IpProtocol=tcp,FromPort=443,ToPort=443,UserIdGroupPairs=[{GroupId='"$COLLECTOR_SG_ID"',Description="Managed collector reaches service endpoint"}]'
Note

Comme alternative plus simple mais moins restrictive, vous pouvez associer le groupe de sécurité existant du contrôleur au collecteur si ce groupe de sécurité contient une règle d'autoréférencement qui autorise le trafic depuis lui-même. Cela répond à l'exigence de connectivité sans créer de groupe dédié.

Par exemple, si le groupe de sécurité (sg-0abc1234def56789a) de votre cluster autorise déjà tout le trafic TCP en provenance de lui-même, transmettez cet ID de groupe de sécurité dans le --security-group-ids paramètre lorsque vous créez le scraper :

aws amp create-scraper \ --source '{"vpcConfiguration":{"subnetIds":["subnet-id-1","subnet-id-2"],"securityGroupIds":["sg-0abc1234def56789a"]}}' \ ...

Cependant, l'approche des groupes de sécurité dédiés décrite dans la procédure précédente fournit une barre de sécurité plus élevée avec des règles explicites et vérifiables.

Pour plus d'informations sur les règles des groupes de sécurité, consultez la rubrique Règles des groupes de sécurité dans le Guide de l'utilisateur de Amazon VPC.

Création du collecteur géré

Utilisez le AWS CLI pour créer un collecteur VPC-connected géré qui extrait votre contrôleur de cluster et fournit des métriques à la destination que vous avez choisie.

Pour créer un collecteur géré pour Slurm metrics
  1. Enregistrez la configuration du scrape dans un fichier YAML local nommé. scrape-config.yaml Pour une configuration suggérée, consultezConfiguration de scrape suggérée.

  2. Créez un fichier d'entrée JSON nommé create-scraper-input.json selon la structure suivante. Choisissez le destination bloc qui correspond à votre cible.

    { "source": { "vpcConfiguration": { "subnetIds": ["subnet-1", "subnet-2"], "securityGroupIds": ["sg-collector"] } }, "destination": { ... }, "scrapeConfiguration": { "configurationBlob": "raw-yaml-contents" } }

    Remplacez :

    • subnet-1et subnet-2 — Au moins deux ID de sous-réseau dans des zones de disponibilité différentes au sein du même VPC que le contrôleur de cluster.

    • sg-collector— L'ID du groupe de sécurité pour le collecteur géré.

    • raw-yaml-contents— Le texte intégral de votre scrape-config.yaml fichier, collé sous la forme d'une seule valeur de chaîne JSON. Le AWS CLI base64 code automatiquement la valeur sur le fil.

    Pour le destination champ, utilisez l'une des options suivantes :

    Destination : Amazon Managed Service pour l'espace de travail Prometheus

    "destination": { "ampConfiguration": { "workspaceArn": "arn:aws:aps:region:account-id:workspace/workspace-id" } }

    Destination : CloudWatch ensemble de données

    "destination": { "cloudWatchConfiguration": { "datasetArn": "arn:aws:cloudwatch:region:account-id:dataset/default" } }

    Pour l'ensemble complet des paramètres, voir create-scraper dans la AWS CLI référence des commandes.

  3. Créez le grattoir :

    aws amp create-scraper --cli-input-json file://create-scraper-input.json

    La commande renvoie un scraperId et un état deCREATING.

  4. Attendez que l'état du grattoir passe à ACTIVE (généralement 5 à 15 minutes) :

    aws amp describe-scraper --scraper-id scraper-id

    scraper-idRemplacez-le par l'identifiant renvoyé à l'étape précédente. Vous ne pouvez pas supprimer un scraper tant qu'il n'a pas atteint son ACTIVE statut.

Trouvez le point de terminaison du contrôleur de cluster

La configuration Scrape nécessite l'adresse IP privée de votre contrôleur de cluster AWS PCS. Utilisez l'une des méthodes suivantes pour le trouver.

Console de gestion AWS
  1. Ouvrez la console AWS PCS à l'adresse https://console.aws.amazon.com/pcs/.

  2. Choisissez votre cluster dans la liste.

  3. Dans les détails de configuration du cluster, localisez la section Endpoints.

  4. Notez l'adresse IP privée et le port du Slurm contrôleur (slurmctld). Le port est 6817.

AWS CLI
  1. Exécutez la commande suivante. Remplacez-le cluster-identifier par le nom ou l'ID de votre cluster.

    aws pcs get-cluster --cluster-identifier cluster-identifier

    Dans la réponse, localisez l'SLURMCTLDentrée dans le endpoints tableau. La privateIpAddress valeur est le point de terminaison du contrôleur dont vous avez besoin pour la configuration du scrape. Voici un exemple :

    "endpoints": [ { "type": "SLURMCTLD", "privateIpAddress": "192.0.2.1", "port": "6817" }, { "type": "SLURMRESTD", "privateIpAddress": "192.0.2.1", "port": "6820" } ]

    Utilisez l'SLURMCTLDentrée privateIpAddress from (port 6817) comme controller-endpoint valeur dans votre configuration de scrape.

  2. Vous pouvez également extraire directement uniquement l'adresse IP du contrôleur :

    aws pcs get-cluster --cluster-identifier cluster-identifier \ --query 'cluster.endpoints[?type==`SLURMCTLD`].privateIpAddress' \ --output text

Configuration de scrape suggérée

La configuration YAML suivante extrait quatre points de terminaison de Slurm métriques (tâches, nœuds, planificateur et partitions) du contrôleur de cluster. Chaque point de terminaison est défini comme une tâche distincte afin que vous puissiez identifier les métriques par source dans vos requêtes.

global: scrape_interval: 60s scrape_timeout: 30s scrape_configs: - job_name: 'slurm-jobs' metrics_path: /metrics/jobs static_configs: - targets: - 'controller-endpoint:6817' relabel_configs: - target_label: cluster replacement: 'my-cluster-name' - job_name: 'slurm-nodes' metrics_path: /metrics/nodes static_configs: - targets: - 'controller-endpoint:6817' relabel_configs: - target_label: cluster replacement: 'my-cluster-name' - job_name: 'slurm-scheduler' metrics_path: /metrics/scheduler static_configs: - targets: - 'controller-endpoint:6817' relabel_configs: - target_label: cluster replacement: 'my-cluster-name' - job_name: 'slurm-partitions' metrics_path: /metrics/partitions static_configs: - targets: - 'controller-endpoint:6817' relabel_configs: - target_label: cluster replacement: 'my-cluster-name'

Remplacez :

  • controller-endpoint— L'adresse IP privée de votre contrôleur de cluster AWS PCS. Pour obtenir des instructions sur la recherche de cette valeur, consultezTrouvez le point de terminaison du contrôleur de cluster.

  • my-cluster-name— Une étiquette qui identifie votre cluster. Le relabel_configs bloc appose une cluster étiquette sur chaque métrique de ce grattoir. Filtrez toujours les requêtes sur l'clusterétiquette. Les séries provenant d'un grattoir qui n'ont pas estampillé l'étiquette apparaissent comme des séries dupliquées sans étiquette jusqu'à ce qu'elles vieillissent.

Le minimum scrape_interval pour un collecteur géré est de 30 secondes. Cette configuration prend 60 secondes car le grattage charge le Slurm contrôleur (slurmctld). Les métriques d'interrogation permettent d'acquérir des verrous internes et de lire les structures de données en mémoire. Cette activité peut affecter les performances du planificateur sur les clusters occupés. Le Slurm Metrics Guide recommande un intervalle de 60 à 120 secondes pour minimiser l'impact sur les performances.

Note

Cette configuration n'inclut pas le /metrics/jobs-users-accts point de terminaison. Slurmla documentation indique que ce point de terminaison produit un nombre illimité de séries et n'est pas adapté à la surveillance stockée. Ne grattez pas non plus le simple /metrics index, car il combine toutes les données des sous-points de terminaison en une seule réponse.

Pour plus d'informations sur les options de configuration de scrape prises en charge, consultez la section Configuration de Scraper dans le guide de l' CloudWatch utilisateur Amazon.

Vérifier la livraison des métriques

Une fois que le scraper a atteint son ACTIVE statut, les premiers points de données apparaissent environ à un intervalle de scrape plus le délai de livraison plus tard. Utilisez la méthode de vérification qui correspond à votre destination.

Vérifier la livraison dans un espace de travail Amazon Managed Service pour Prometheus

Envoyez une SigV4-signed demande pour répertorier les noms de métriques disponibles depuis votre espace de travail :

awscurl --service aps --region region \ "https://aps-workspaces.region.amazonaws.com/workspaces/workspace-id/api/v1/label/__name__/values"

Les besoins aps:QueryMetrics et aps:GetLabels les autorisations du principal appelant (ou la politique AmazonPrometheusQueryAccess gérée).

Vérifier la livraison à un CloudWatch ensemble de données

Envoyez une SigV4-signed demande pour répertorier les noms de métriques disponibles dans votre CloudWatch ensemble de données :

awscurl --service monitoring --region region \ "https://monitoring.region.amazonaws.com/api/v1/label/__name__/values"

Les besoins cloudwatch:GetMetricData et les cloudwatch:ListMetrics autorisations du principal appelant.

Important

Les métriques fournies à un CloudWatch jeu de données sont stockées sous forme de métriques OpenTelemetry (OTel). Ils n'apparaissent pas dans le navigateur d'espaces de noms CloudWatch Metrics classique ni dans la sortie deaws cloudwatch list-metrics. Vous devez les interroger avecPromQL.

Pour l'une ou l'autre des destinations, recherchez les noms de métriques commençant parslurm_nodes, par exempleslurm_jobs_running, ouslurm_node_cpus. slurm_ Si aucune statistique Slurm n'apparaît, vérifiez les points suivants :

  • L'état du grattoir estACTIVE.

  • Les règles des groupes de sécurité permettent au collecteur d'atteindre le port 6817 du contrôleur.

  • Le point de terminaison des Slurm métriques est activé sur le cluster.

Requête Slurm métriques avec ProMQL

Vous interrogez les Slurm statistiques collectées à l'aide dePromQL. Les mêmes requêtes fonctionnent pour l'une ou l'autre destination. La méthode de requête dépend de l'endroit où vous avez fourni les mesures.

Interroger un espace de travail Amazon Managed Service pour Prometheus

  • API HTTP  : envoyez SigV4-signed des demandes (nom du serviceaps) à https://aps-workspaces.region.amazonaws.com/workspaces/workspace-id/api/v1/query ou/api/v1/query_range.

  • Grafana— Ajoutez une source de Prometheus données avec authentification SIGv4 et nom aps de service. Pour obtenir des instructions sur la manière d'effectuer des requêtes avecGrafana, consultez la section Effectuer une requête à l'aide de Grafana dans le guide de l'utilisateur d'Amazon Managed Service for Prometheus.

L'exemple suivant permet awscurl d'interroger des tâches en cours d'exécution depuis un espace de travail Amazon Managed Service for Prometheus :

awscurl --service aps --region region \ -X POST "https://aps-workspaces.region.amazonaws.com/workspaces/workspace-id/api/v1/query" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "query=slurm_jobs_running"

Le principal appelant a besoin de aps:QueryMetricsaps:GetMetricMetadata,aps:GetSeries, et aps:GetLabels d'autorisations (ou de la politique AmazonPrometheusQueryAccess gérée).

Interroger un CloudWatch ensemble de données

  • CloudWatch console  : ouvrez CloudWatch, choisissez Query Studio, puis sélectionnez ProMQL dans le menu du langage de requête.

  • API HTTP  : envoyez SigV4-signed des demandes (nom du servicemonitoring) à https://monitoring.region.amazonaws.com/api/v1/query ou/api/v1/query_range.

  • Grafana— Ajoutez une source de Prometheus données avec URLhttps://monitoring.region.amazonaws.com, authentification Sigv4 et nom monitoring de service. Pour obtenir des instructions sur l'interrogation de CloudWatch métriques à l'aide de PromQL inGrafana, voir Interroger CloudWatch des métriques avec ProMQL dans Grafana dans le guide de l'utilisateur d'Amazon Managed Grafana.

L'exemple suivant permet d'interroger des tâches awscurl en cours d'exécution à partir d'un CloudWatch ensemble de données :

awscurl --service monitoring --region region \ -X POST "https://monitoring.region.amazonaws.com/api/v1/query" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "query=slurm_jobs_running"

Les besoins cloudwatch:GetMetricData et les cloudwatch:ListMetrics autorisations du principal appelant.

Exemple ProMQL queries

Les requêtes suivantes fonctionnent pour l'une ou l'autre des destinations. my-cluster-nameRemplacez-la par la valeur que vous avez définie dans le nouveau libellé de votre configuration de scrapecluster.

Pourcentage d'utilisation du processeur
100 * slurm_node_cpus_alloc{cluster="my-cluster-name"} / slurm_node_cpus{cluster="my-cluster-name"}
Tâches en attente (arriéré dans les files d'attente)
slurm_jobs_pending{cluster="my-cluster-name"}
Exécution de tâches
slurm_jobs_running{cluster="my-cluster-name"}
Débit des tâches
slurm_jobs_completed{cluster="my-cluster-name"}

Pour plus d'informations sur les métriques disponibles et la configuration du scraping, consultez le guide des métriques sur le Slurm site Web.