View a markdown version of this page

Raccogliere Slurm metriche con un gestore Prometheus collezionista - AWS PEZZI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Raccogliere Slurm metriche con un gestore Prometheus collezionista

Dopo aver abilitato Slurm le metriche sul cluster AWS PCS (vediSlurm metriche in AWS PEZZI), puoi utilizzare un Prometheus raccoglitore gestito per analizzare automaticamente gli endpoint delle metriche e fornire i dati per l'interrogazione. PromQL Il raccoglitore gestito crea interfacce di rete elastiche nelle sottoreti VPC per raggiungere gli endpoint delle metriche del controller del cluster sulla porta 6817.

Il raccoglitore può fornire metriche a una delle seguenti destinazioni:

  • Amazon Managed Service for Prometheus workspace: un archivio di metriche dedicato e Prometheus compatibile con conservazione configurabile (150 giorni per impostazione predefinita). Puoi eseguire query tramite API compatibili o. Prometheus Grafana

  • CloudWatch set di dati: set di CloudWatch dati predefinito del tuo account con 15 mesi di conservazione inclusa. È possibile eseguire query tramite CloudWatch Query Studio o l'API Prometheus HTTP compatibile.

La configurazione lato cluster (Slurmimpostazioni, destinazione del controller, gruppi di sicurezza e configurazione scrape) è la stessa indipendentemente dalla destinazione scelta. Solo il destination blocco nella richiesta create-scraper e l'endpoint della query sono diversi.

Create il raccoglitore con il comando. aws amp create-scraper Sebbene questo comando appartenga allo spazio dei nomi amp CLI, supporta entrambe le destinazioni.

Per ulteriori informazioni sui raccoglitori VPC-connected gestiti, consulta Configurare un raccoglitore VPC-connected gestito nella Amazon User Guide. CloudWatch

Prerequisiti

Prima di configurare il raccoglitore gestito, verifica quanto segue:

  • Slurmmetriche abilitate: l'endpoint delle metriche deve essere attivo nel cluster. Puoi abilitarlo impostando Slurm le impostazioni CommunicationParameters personalizzate. MetricsType Per istruzioni sull'attivazione delle Slurm metriche, consultaSlurm metriche in AWS PEZZI. Per ulteriori informazioni sulle Slurm impostazioni personalizzate, vedereConfigurazione delle impostazioni personalizzate di Slurm in AWS 2 PEZZI.

  • Slurmversione 25.11 o successiva: il cluster deve eseguire la versione Slurm 25.11 o successiva per esporre l'endpoint delle metriche.

  • Risorsa di destinazione: crea la destinazione per le tue metriche:

    • Amazon Managed Service for Prometheus workspace: crea uno spazio di lavoro e attendi che raggiunga lo stato. ACTIVE Per istruzioni sulla creazione di uno spazio di lavoro, consulta Create a workspace nella Amazon Managed Service for Prometheus User Guide.

    • CloudWatch set di dati: ogni account ha un set di dati in ogni regione. default Non è necessario crearlo.

  • Sottoreti e reti VPC: sono necessarie almeno due sottoreti in diverse zone di disponibilità all'interno dello stesso VPC del controller del cluster. Includi la zona di disponibilità in cui risiede l'interfaccia di rete del controller. Il VPC deve avere il supporto DNS e i nomi host DNS abilitati. Per i requisiti di rete dettagliati, consulta Configurare un collettore VPC-connected gestito nella Amazon User Guide. CloudWatch

  • Gruppi di sicurezza: è richiesto un gruppo di sicurezza dedicato per il raccoglitore. Per istruzioni sulla configurazione dei gruppi di sicurezza, vedere. Configura i gruppi di sicurezza per il raccoglitore

  • Autorizzazioni IAM: il principio IAM che crea le esigenze aps:CreateScraper e le autorizzazioni dello scraper. iam:CreateServiceLinkedRole Il servizio crea automaticamente un ruolo collegato al servizio (). AWSServiceRoleForAmazonPrometheusScraper Questo ruolo concede al raccoglitore il permesso di accedere alle risorse VPC e scrivere nella destinazione prescelta. Non è richiesta alcuna configurazione manuale del ruolo. Per ulteriori informazioni, consulta Using service-linked roles nella Amazon Managed Service for Prometheus User Guide.

  • Endpoint Internet o VPC: le sottoreti del collettore devono essere in grado di raggiungere il servizio di destinazione. Se le tue sottoreti non hanno accesso a Internet, crea un endpoint VPC di interfaccia nello stesso VPC e nelle stesse sottoreti. Utilizzalo com.amazonaws.region.aps-workspaces per una destinazione dello spazio di lavoro Amazon Managed Service for Prometheus o per una destinazione di set di dati. com.amazonaws.region.monitoring CloudWatch

Configura i gruppi di sicurezza per il raccoglitore

Si consiglia di creare un gruppo di sicurezza dedicato per il raccoglitore gestito anziché riutilizzare un gruppo di sicurezza esistente. Un gruppo dedicato fornisce regole esplicite e verificabili che seguono il principio del privilegio minimo.

Importante

L'enable_httpimpostazione espone un endpoint HTTP non autenticato sulla porta 6817. Limita l'accesso in entrata su questa porta solo al gruppo di sicurezza del raccoglitore. Non consentite un ampio accesso di rete (ad esempio un intervallo CIDR) a questa porta.

La procedura seguente utilizza variabili di shell per gli ID dei gruppi di sicurezza. Impostate queste variabili prima di eseguire i comandi:

  • VPC_ID— L'ID del VPC in cui risiede il cluster AWS PCS.

  • CLUSTER_SG_ID— L'ID del gruppo di sicurezza collegato al cluster (quello specificato al momento della creazione del cluster).

  • VPCE_SG_ID— L'ID del gruppo di sicurezza collegato all'endpoint VPC dell'interfaccia. Questa variabile è necessaria solo se le sottoreti del raccoglitore raggiungono il servizio di destinazione tramite un endpoint VPC di interfaccia anziché tramite Internet o un'uscita NAT. L'endpoint è com.amazonaws.region.aps-workspaces per una destinazione dello spazio di lavoro Amazon Managed Service for Prometheus o per una destinazione di set di dati. com.amazonaws.region.monitoring CloudWatch

Per configurare i gruppi di sicurezza per i gestiti Prometheus collezionista
  1. Crea un gruppo di sicurezza dedicato per il raccoglitore e acquisisci l'ID del gruppo:

    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. Aggiungete una regola in entrata al gruppo di sicurezza del cluster che consenta il traffico TCP sulla porta 6817 dal gruppo di sicurezza del raccoglitore. Questa regola consente al raccoglitore di analizzare l'endpoint delle metriche sul controller. Slurm

    Utilizza il --ip-permissions modulo per includere una descrizione della regola per la verificabilità:

    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"}]'

    In alternativa, puoi utilizzare il modulo più breve senza una descrizione della regola:

    aws ec2 authorize-security-group-ingress \ --group-id "$CLUSTER_SG_ID" \ --protocol tcp \ --port 6817 \ --source-group "$COLLECTOR_SG_ID"
  3. (Facoltativo) Blocca il traffico in uscita sul gruppo di sicurezza del raccoglitore. Per impostazione predefinita, un gruppo di sicurezza appena creato consente tutto il traffico in uscita. Se desideri imporre l'uscita solo esplicita per un livello di sicurezza più elevato, revoca la regola di autorizzazione predefinita e aggiungi solo le regole di uscita richieste dal raccoglitore.

    Revoca la regola predefinita di autorizzazione totale in uscita:

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

    Aggiungi una regola di uscita esplicita per consentire al raccoglitore di raggiungere il controller su 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"}]'

    Aggiungi una regola di uscita esplicita per HTTPS (TCP 443) per raggiungere la destinazione di consegna delle metriche (Amazon Managed Service for Prometheus o): 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"}]'

    Per un controllo più rigoroso nelle sottoreti che utilizzano un endpoint VPC per la consegna, sostituisci l'intervallo CIDR con il gruppo di sicurezza dell'endpoint 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"}]'
    Nota

    Se non hai revocato la regola di uscita predefinita, puoi saltare questo passaggio. La regola predefinita consente già tutto il traffico in uscita, incluso il traffico verso la porta 6817 e la porta 443.

  4. (Cluster isolati) Se le sottoreti del raccoglitore non hanno accesso a Internet e utilizzano un endpoint VPC di interfaccia per raggiungere il servizio di destinazione, aggiungi una regola in entrata al gruppo di sicurezza dell'endpoint VPC. Questa regola consente al traffico HTTPS del raccoglitore di raggiungere le interfacce di rete dell'endpoint. Si tratta di un passaggio comunemente omesso.

    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"}]'
Nota

Come alternativa più semplice ma meno restrittiva, è possibile collegare il gruppo di sicurezza esistente del controller al raccoglitore se tale gruppo di sicurezza contiene una regola autoreferenziale che consente il traffico proveniente da se stesso. Ciò soddisfa i requisiti di connettività senza creare un gruppo dedicato.

Ad esempio, se il gruppo di sicurezza (sg-0abc1234def56789a) del cluster consente già tutto il traffico TCP proveniente da se stesso, passa l'ID del gruppo di sicurezza nel --security-group-ids parametro quando crei lo scraper:

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

Tuttavia, l'approccio dedicato ai gruppi di sicurezza descritto nella procedura precedente fornisce una barra di sicurezza più elevata con regole esplicite e verificabili.

Per ulteriori informazioni sulle regole dei gruppi di sicurezza, consulta Regole sui gruppi di sicurezza nella Guida per l'utente di Amazon VPC.

Crea il raccoglitore gestito

Usa il AWS CLI per creare un raccoglitore VPC-connected gestito che analizzi il controller del cluster e fornisca le metriche alla destinazione prescelta.

Per creare un raccoglitore gestito per Slurm metriche
  1. Salva la configurazione dello scrape in un file YAML locale denominato. scrape-config.yaml Per una configurazione suggerita, vedere. Configurazione scrape consigliata

  2. Crea un file di input JSON denominato create-scraper-input.json con la seguente struttura. Scegli il destination blocco che corrisponde al tuo obiettivo.

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

    Sostituire:

    • subnet-1e subnet-2 — Almeno due ID di sottorete in diverse zone di disponibilità all'interno dello stesso VPC del controller del cluster.

    • sg-collector— L'ID del gruppo di sicurezza per il raccoglitore gestito.

    • raw-yaml-contents— Il testo completo del scrape-config.yaml file, incollato come singolo valore di stringa JSON. AWS CLI Base64 codifica automaticamente il valore sul filo.

    Per il destination campo, utilizza uno dei seguenti:

    Destinazione: Amazon Managed Service for Prometheus workspace

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

    Destinazione: CloudWatch set di dati

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

    Per il set completo di parametri, vedi create-scraper nel Command Reference. AWS CLI

  3. Crea il raschietto:

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

    Il comando restituisce uno scraperId stato di. CREATING

  4. Attendi che lo stato dello scraper passi a ACTIVE (in genere 5-15 minuti):

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

    Sostituisci scraper-id con l'ID restituito nel passaggio precedente. Non è possibile eliminare uno scraper finché non raggiunge lo ACTIVE stato.

Trova l'endpoint del controller del cluster

La configurazione scrape richiede l'indirizzo IP privato del controller del cluster AWS PCS. Utilizzate uno dei seguenti metodi per trovarlo.

Console di gestione AWS
  1. Aprire la console AWS PCS all'indirizzo https://console.aws.amazon.com/pcs/.

  2. Scegli il tuo cluster dall'elenco.

  3. Nei dettagli di configurazione del cluster, individua la sezione Endpoints.

  4. Annota l'indirizzo IP privato e la porta Slurm del controller (slurmctld). La porta è 6817.

AWS CLI
  1. Eseguire il seguente comando seguente. Sostituisci cluster-identifier con il nome o l'ID del tuo cluster.

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

    Nella risposta, individua la SLURMCTLD voce nell'endpointsarray. Il privateIpAddress valore è l'endpoint del controller necessario per la configurazione dello scrape. Ecco un esempio:

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

    Utilizzate il valore privateIpAddress della SLURMCTLD voce (porta 6817) come controller-endpoint valore nella configurazione dello scrape.

  2. In alternativa, estrai direttamente solo l'indirizzo IP del controller:

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

Configurazione scrape consigliata

La seguente configurazione YAML estrae quattro endpoint delle Slurm metriche (job, nodi, scheduler e partizioni) dal controller del cluster. Ogni endpoint è definito come un job separato in modo da poter identificare le metriche in base alla fonte nelle query.

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'

Sostituire:

  • controller-endpoint— L'indirizzo IP privato del controller del cluster AWS PCS. Per istruzioni su come trovare questo valore, vedereTrova l'endpoint del controller del cluster.

  • my-cluster-name— Un'etichetta che identifica il cluster. Il relabel_configs blocco stampa un'clusteretichetta su ogni metrica di questo scraper. Filtra sempre le domande sull'etichetta. cluster Le serie tratte da un raschietto che non ha timbrato l'etichetta appaiono come serie duplicate senza etichetta fino alla scadenza.

Il tempo minimo scrape_interval per un raccoglitore gestito è di 30 secondi. Questa configurazione richiede 60 secondi perché lo scraping carica il Slurm controller (slurmctld). L'interrogazione delle metriche acquisisce blocchi interni e legge le strutture di dati in memoria. Questa attività può influire sulle prestazioni dello scheduler nei cluster occupati. La Slurm Metrics Guide consiglia un intervallo di scansione di 60-120 secondi per ridurre al minimo l'impatto sulle prestazioni.

Nota

Questa configurazione non include l'endpoint. /metrics/jobs-users-accts Slurmla documentazione avverte che questo endpoint produce un numero illimitato di serie e non è adatto per il monitoraggio archiviato. Non limitatevi nemmeno al semplice /metrics indice, perché combina tutti i dati dei sub-endpoint in un'unica risposta.

Per ulteriori informazioni sulle opzioni di configurazione Scrape supportate, consulta la Configurazione di Scraper nella Amazon User Guide. CloudWatch

Verifica la distribuzione delle metriche

Una volta che lo scraper ha raggiunto ACTIVE lo stato, i primi datapoint vengono visualizzati all'incirca dopo un intervallo di raschiamento, più i tempi di consegna successivi. Utilizza il metodo di verifica corrispondente alla tua destinazione.

Verifica la consegna a un Amazon Managed Service for Prometheus workspace

Invia una SigV4-signed richiesta per elencare i nomi delle metriche disponibili dal tuo spazio di lavoro:

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

Le esigenze aps:QueryMetrics e le aps:GetLabels autorizzazioni principali del chiamante (o la policy AmazonPrometheusQueryAccess gestita).

Verifica la consegna a un set di dati CloudWatch

Invia una SigV4-signed richiesta per elencare i nomi delle metriche disponibili dal tuo CloudWatch set di dati:

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

Le esigenze e le autorizzazioni principali della chiamatacloudwatch:GetMetricData. cloudwatch:ListMetrics

Importante

Le metriche fornite a un CloudWatch set di dati vengono archiviate come metriche OpenTelemetry (OtEL). Non vengono visualizzate nel browser dei namespace CloudWatch Metrics classico o nell'output di. aws cloudwatch list-metrics È necessario interrogarli con. PromQL

Per entrambe le destinazioni, cerca i nomi delle metriche che iniziano conslurm_, ad esempio slurm_nodesslurm_jobs_running, oslurm_node_cpus. Se non viene visualizzata alcuna Slurm metrica, verifica quanto segue:

  • Lo stato dello scraper è. ACTIVE

  • Le regole del gruppo di sicurezza consentono al raccoglitore di raggiungere la porta 6817 del controller.

  • L'endpoint Slurm delle metriche è abilitato nel cluster.

Query Slurm metriche con ProMQL

Interroghi le Slurm metriche raccolte utilizzando. PromQL Le stesse query funzionano per entrambe le destinazioni. Il metodo di interrogazione dipende da dove hai fornito le metriche.

Richiedi un servizio gestito da Amazon per lo spazio di lavoro di Prometheus

  • API HTTP: invia SigV4-signed richieste (nome aps del servizio) a o. https://aps-workspaces.region.amazonaws.com/workspaces/workspace-id/api/v1/query /api/v1/query_range

  • Grafana— Aggiungere una fonte di Prometheus dati con autenticazione SIGv4 e nome del servizio. aps Per istruzioni sull'interrogazione conGrafana, consulta Query using Grafana nella Amazon Managed Service for Prometheus User Guide.

L'esempio seguente viene utilizzato awscurl per interrogare i lavori in esecuzione da uno spazio di lavoro 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 esigenze aps:QueryMetrics e le aps:GetLabels autorizzazioni del principale chiamante (o la policy gestita). aps:GetMetricMetadata aps:GetSeries AmazonPrometheusQueryAccess

Interroga un set di dati CloudWatch

  • CloudWatch console: apri CloudWatch, scegli Query Studio e seleziona ProMQL dal menu della lingua di interrogazione.

  • API HTTP: invia SigV4-signed richieste (nome del serviziomonitoring) a https://monitoring.region.amazonaws.com/api/v1/query o/api/v1/query_range.

  • Grafana— Aggiungere una fonte di Prometheus dati con URLhttps://monitoring.region.amazonaws.com, autenticazione SIGv4 e nome del servizio. monitoring Per istruzioni sull'interrogazione delle CloudWatch metriche con PromQL inGrafana, consulta Query CloudWatch metrics with PromQL in Grafana nella Amazon Managed Grafana User Guide.

L'esempio seguente viene utilizzato per interrogare i lavori in esecuzione awscurl da un set di dati: CloudWatch

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"

Le esigenze cloudwatch:GetMetricData e le cloudwatch:ListMetrics autorizzazioni principali della chiamata.

Esempio ProMQL queries

Le seguenti query funzionano per entrambe le destinazioni. Sostituiscilo my-cluster-name con il valore impostato nella rietichettatura della cluster configurazione scrape.

Percentuale di utilizzo della CPU
100 * slurm_node_cpus_alloc{cluster="my-cluster-name"} / slurm_node_cpus{cluster="my-cluster-name"}
Lavori in sospeso (backlog in coda)
slurm_jobs_pending{cluster="my-cluster-name"}
Esecuzione di processi
slurm_jobs_running{cluster="my-cluster-name"}
Produttività dei lavori
slurm_jobs_completed{cluster="my-cluster-name"}

Per ulteriori informazioni sulle metriche disponibili e sulla configurazione dello scraping, consulta la Guida alle https://slurm.schedmd.com/metrics.html metriche sul sito Web. Slurm