View a markdown version of this page

Coletar Slurm métricas com um gerenciado Prometheus coletor - AWS PEÇAS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Coletar Slurm métricas com um gerenciado Prometheus coletor

Depois de ativar Slurm as métricas em seu cluster AWS PCS (consulteSlurm métricas em AWS PEÇAS), você pode usar um Prometheus coletor gerenciado para coletar automaticamente os endpoints das métricas e entregar os dados para consulta. PromQL O coletor gerenciado cria interfaces de rede elásticas em suas sub-redes VPC para alcançar os endpoints de métricas do controlador de cluster na porta 6817.

O coletor pode fornecer métricas para qualquer um dos seguintes destinos:

  • Espaço de trabalho Amazon Managed Service for Prometheus — Um armazenamento Prometheus de métricas dedicado e compatível com retenção configurável (150 dias por padrão). Você pode consultar por meio Prometheus de APIs compatíveis ou. Grafana

  • CloudWatch conjunto de dados — O CloudWatch conjunto de dados padrão da sua conta com 15 meses de retenção incluída. Você pode consultar por meio do CloudWatch Query Studio ou da API HTTP Prometheus compatível.

A configuração do lado do cluster (Slurmconfigurações, destino do controlador, grupos de segurança e configuração de scrape) é a mesma, independentemente do destino escolhido. Somente o destination bloco na solicitação create-scraper e o endpoint da consulta são diferentes.

Você cria o coletor com o aws amp create-scraper comando. Embora esse comando pertença ao namespace amp CLI, ele suporta os dois destinos.

Para obter mais informações sobre coletores VPC-connected gerenciados, consulte Configurar um coletor VPC-connected gerenciado no Guia do CloudWatch usuário da Amazon.

Pré-requisitos

Antes de configurar o coletor gerenciado, verifique o seguinte:

  • Slurmmétricas ativadas — O endpoint de métricas deve estar ativo em seu cluster. Você o ativa definindo MetricsType as Slurm configurações CommunicationParameters personalizadas. Para obter instruções sobre como ativar Slurm métricas, consulteSlurm métricas em AWS PEÇAS. Para obter mais informações sobre Slurm configurações personalizadas, consulteDefinindo configurações personalizadas do Slurm em AWS PEÇAS.

  • Slurmversão 25.11 ou superior — O cluster deve executar Slurm 25.11 ou superior para expor o endpoint de métricas.

  • Recurso de destino — Crie o destino para suas métricas:

    • Espaço de trabalho do Amazon Managed Service para Prometheus — Crie um espaço de trabalho e espere que ele alcance o status. ACTIVE Para obter instruções sobre como criar um espaço de trabalho, consulte Criar um espaço de trabalho no Guia do usuário do Amazon Managed Service for Prometheus.

    • CloudWatch conjunto de dados — Cada conta tem um default conjunto de dados em cada região. Você não precisa criá-lo.

  • Sub-redes e redes VPC — Você precisa de pelo menos duas sub-redes em diferentes zonas de disponibilidade dentro da mesma VPC do controlador de cluster. Inclua a zona de disponibilidade em que a interface de rede do controlador reside. A VPC deve ter suporte a DNS e nomes de host DNS habilitados. Para obter requisitos de rede detalhados, consulte Configurar um coletor VPC-connected gerenciado no Guia do CloudWatch usuário da Amazon.

  • Grupos de segurança — É necessário um grupo de segurança dedicado para o coletor. Para obter instruções sobre como configurar grupos de segurança, consulteConfigurar grupos de segurança para o coletor.

  • Permissões do IAM — O principal do IAM que cria as necessidades aps:CreateScraper e iam:CreateServiceLinkedRole permissões do raspador. O serviço cria automaticamente uma função vinculada ao serviço ()AWSServiceRoleForAmazonPrometheusScraper. Essa função concede ao coletor permissão para acessar seus recursos de VPC e gravar no destino escolhido. Nenhuma configuração manual da função é necessária. Para obter mais informações, consulte Usando funções vinculadas a serviços no Guia do usuário do Amazon Managed Service for Prometheus.

  • Endpoint de Internet ou VPC — as sub-redes do coletor devem ser capazes de alcançar o serviço de destino. Se suas sub-redes não tiverem acesso à Internet, crie uma interface VPC endpoint na mesma VPC e sub-redes. Use com.amazonaws.region.aps-workspaces para um destino de espaço de trabalho do Amazon Managed Service for Prometheus ou com.amazonaws.region.monitoring para um CloudWatch destino de conjunto de dados.

Configurar grupos de segurança para o coletor

Recomendamos criar um grupo de segurança dedicado para o coletor gerenciado em vez de reutilizar um grupo de segurança existente. Um grupo dedicado fornece regras explícitas e auditáveis que seguem o princípio do menor privilégio.

Importante

A enable_http configuração expõe um endpoint HTTP não autenticado na porta 6817. Restrinja o acesso de entrada nessa porta somente ao grupo de segurança do coletor. Não permita amplo acesso à rede (como um intervalo CIDR) a essa porta.

O procedimento a seguir usa variáveis de shell para IDs de grupos de segurança. Defina essas variáveis antes de executar os comandos:

  • VPC_ID— O ID da VPC em que seu cluster AWS PCS reside.

  • CLUSTER_SG_ID— O ID do grupo de segurança anexado ao seu cluster (aquele que você especificou ao criar o cluster).

  • VPCE_SG_ID— O ID do grupo de segurança anexado à sua interface VPC endpoint. Essa variável só é necessária se as sub-redes do coletor atingirem o serviço de destino por meio de uma interface VPC endpoint, em vez de pela Internet ou pela saída de NAT. O endpoint é com.amazonaws.region.aps-workspaces para um destino de espaço de trabalho do Amazon Managed Service for Prometheus ou com.amazonaws.region.monitoring para um destino de conjunto de dados. CloudWatch

Para configurar grupos de segurança para o gerenciado Prometheus coletor
  1. Crie um grupo de segurança dedicado para o coletor e capture a ID do grupo:

    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. Adicione uma regra de entrada ao grupo de segurança do cluster que permita o tráfego TCP na porta 6817 a partir do grupo de segurança do coletor. Essa regra permite que o coletor raspe o endpoint de Slurm métricas no controlador.

    Use o --ip-permissions formulário para incluir uma descrição da regra para auditabilidade:

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

    Como alternativa, você pode usar o formulário mais curto sem uma descrição da regra:

    aws ec2 authorize-security-group-ingress \ --group-id "$CLUSTER_SG_ID" \ --protocol tcp \ --port 6817 \ --source-group "$COLLECTOR_SG_ID"
  3. (Opcional) Bloqueie o tráfego de saída no grupo de segurança do coletor. Por padrão, um grupo de segurança recém-criado permite todo o tráfego de saída. Se você quiser impor a saída somente explícita para uma postura de maior segurança, revogue a regra de permissão para tudo padrão e adicione somente as regras de saída exigidas pelo coletor.

    Revogue a regra de saída padrão de permitir tudo:

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

    Adicione uma regra de saída explícita para permitir que o coletor alcance o controlador no 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"}]'

    Adicione uma regra de saída explícita para HTTPS (TCP 443) para alcançar o destino de entrega das métricas (Amazon Managed Service for 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"}]'

    Para um controle mais rígido em sub-redes que usam um endpoint VPC para entrega, substitua o intervalo CIDR pelo grupo de segurança do 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 você não revogou a regra de saída padrão, pode ignorar essa etapa. A regra padrão já permite todo o tráfego de saída, incluindo o tráfego para a porta 6817 e a porta 443.

  4. (Clusters isolados) Se suas sub-redes de coletores não tiverem acesso à Internet e usarem uma interface de VPC endpoint para acessar o serviço de destino, adicione uma regra de entrada ao grupo de segurança do endpoint VPC. Essa regra permite que o tráfego HTTPS do coletor alcance as interfaces de rede do endpoint. Essa é uma etapa comumente perdida.

    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

Como uma alternativa mais simples, mas menos restritiva, você pode anexar o grupo de segurança existente do controlador ao coletor se esse grupo de segurança contiver uma regra de autorreferência que permita o tráfego de si mesmo. Isso satisfaz o requisito de conectividade sem criar um grupo dedicado.

Por exemplo, se o security group (sg-0abc1234def56789a) do seu cluster já permitir todo o tráfego TCP de si mesmo, passe esse ID do grupo de segurança no --security-group-ids parâmetro ao criar o raspador:

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

No entanto, a abordagem de grupo de segurança dedicado descrita no procedimento anterior fornece uma barra de segurança mais alta com regras explícitas e auditáveis.

Para obter mais informações sobre regras de grupos de segurança, consulte Regras de grupos de segurança no Guia do usuário da Amazon VPC.

Crie o coletor gerenciado

Use o AWS CLI para criar um coletor VPC-connected gerenciado que coleta seu controlador de cluster e fornece métricas para o destino escolhido.

Para criar um coletor gerenciado para Slurm métricas
  1. Salve a configuração de raspagem em um arquivo YAML local chamado. scrape-config.yaml Para uma configuração sugerida, consulteConfiguração de raspagem sugerida.

  2. Crie um arquivo de entrada JSON nomeado create-scraper-input.json com a estrutura a seguir. Escolha o destination bloco que corresponde ao seu alvo.

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

    Substitua:

    • subnet-1e subnet-2 — Pelo menos duas IDs de sub-rede em diferentes zonas de disponibilidade dentro da mesma VPC do controlador de cluster.

    • sg-collector— A ID do grupo de segurança do coletor gerenciado.

    • raw-yaml-contents— O texto completo do seu scrape-config.yaml arquivo, colado como um único valor de string JSON. O AWS CLI base64 codifica automaticamente o valor no fio.

    Para o destination campo, use uma das seguintes opções:

    Destino: Amazon Managed Service para espaço de trabalho Prometheus

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

    Destino: CloudWatch conjunto de dados

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

    Para ver o conjunto completo de parâmetros, consulte create-scraper na Referência de Comandos. AWS CLI

  3. Crie o raspador:

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

    O comando retorna um scraperId e um status deCREATING.

  4. Aguarde até que o status do raspador mude para ACTIVE (normalmente de 5 a 15 minutos):

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

    scraper-idSubstitua pela ID retornada na etapa anterior. Você não pode excluir um raspador até que ele atinja o ACTIVE status.

Encontre o endpoint do controlador de cluster

A configuração de scrape requer o endereço IP privado do seu controlador de cluster AWS PCS. Use um dos métodos a seguir para encontrá-lo.

Console de gerenciamento da AWS
  1. Abra o console AWS PCS em https://console.aws.amazon.com/pcs/.

  2. Escolha seu cluster na lista.

  3. Nos detalhes da configuração do cluster, localize a seção Endpoints.

  4. Anote o endereço IP privado e a porta do Slurm controlador (slurmctld). A porta é 6817.

AWS CLI
  1. Execute o comando a seguir. cluster-identifierSubstitua pelo nome ou ID do cluster.

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

    Na resposta, localize a SLURMCTLD entrada na endpoints matriz. O privateIpAddress valor é o endpoint do controlador que você precisa para a configuração de raspagem. Exemplo:

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

    Use o privateIpAddress da SLURMCTLD entrada (porta 6817) como o controller-endpoint valor em sua configuração de raspagem.

  2. Como alternativa, extraia somente o endereço IP do controlador diretamente:

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

Configuração de raspagem sugerida

A configuração YAML a seguir extrai quatro endpoints de Slurm métricas (trabalhos, nós, agendador e partições) do controlador do cluster. Cada endpoint é definido como um trabalho separado para que você possa identificar métricas por fonte em suas consultas.

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'

Substitua:

  • controller-endpoint— O endereço IP privado do seu controlador de cluster AWS PCS. Para obter instruções sobre como encontrar esse valor, consulteEncontre o endpoint do controlador de cluster.

  • my-cluster-name— Um rótulo que identifica seu cluster. O relabel_configs bloco estampa uma cluster etiqueta em cada métrica desse raspador. Sempre filtre as consultas no cluster rótulo. As séries de um raspador que não carimbou o rótulo aparecem como séries duplicadas sem rótulo até que se esgotem.

O mínimo scrape_interval para um coletor gerenciado é de 30 segundos. Essa configuração usa 60 segundos porque a raspagem coloca carga no Slurm controlador (slurmctld). A consulta de métricas adquire bloqueios internos e lê estruturas de dados na memória. Essa atividade pode afetar o desempenho do agendador em clusters ocupados. O Guia de Slurm Métricas recomenda um intervalo de coleta de 60 a 120 segundos para minimizar o impacto no desempenho.

nota

Essa configuração não inclui o /metrics/jobs-users-accts endpoint. Slurma documentação avisa que esse endpoint produz um número ilimitado de séries e não é adequado para monitoramento armazenado. Também não copie o /metrics índice vazio, pois ele combina todos os dados do subendpoint em uma única resposta.

Para obter mais informações sobre as opções de configuração de raspagem suportadas, consulte Configuração de raspagem no Guia do CloudWatch usuário da Amazon.

Verifique a entrega de métricas

Depois que o raspador atinge o ACTIVE status, os primeiros pontos de dados aparecem aproximadamente um intervalo de coleta mais o tempo de entrega posterior. Use o método de verificação que corresponde ao seu destino.

Verifique a entrega em um espaço de trabalho do Amazon Managed Service for Prometheus

Envie uma SigV4-signed solicitação para listar os nomes das métricas disponíveis no seu espaço de trabalho:

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

As necessidades aps:QueryMetrics e aps:GetLabels permissões do principal chamador (ou a política AmazonPrometheusQueryAccess gerenciada).

Verificar a entrega em um CloudWatch conjunto de dados

Envie uma SigV4-signed solicitação para listar os nomes das métricas disponíveis do seu CloudWatch conjunto de dados:

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

As necessidades cloudwatch:GetMetricData e cloudwatch:ListMetrics permissões do principal chamador.

Importante

As métricas fornecidas a um CloudWatch conjunto de dados são armazenadas como métricas OpenTelemetry (OtEL). Eles não aparecem no navegador clássico do namespace CloudWatch Metrics nem na saída do. aws cloudwatch list-metrics Você deve consultá-los comPromQL.

Para qualquer destino, procure nomes de métricas que comecem com slurm_slurm_nodes, comoslurm_jobs_running, ouslurm_node_cpus. Se nenhuma Slurm métrica aparecer, verifique o seguinte:

  • O status do raspador éACTIVE.

  • As regras do grupo de segurança permitem que o coletor alcance a porta 6817 no controlador.

  • O endpoint de Slurm métricas está ativado no cluster.

Consulta Slurm métricas com PromQL

Você consulta as Slurm métricas coletadas usandoPromQL. As mesmas consultas funcionam em qualquer destino. O método de consulta depende de onde você entregou as métricas.

Consulte um Amazon Managed Service para o espaço de trabalho do Prometheus

  • API HTTP — Envie SigV4-signed solicitações (nome do serviçoaps) para https://aps-workspaces.region.amazonaws.com/workspaces/workspace-id/api/v1/query ou/api/v1/query_range.

  • Grafana— Adicione uma fonte Prometheus de dados com autenticação SigV4 e nome do serviço. aps Para obter instruções sobre como consultar comGrafana, consulte Consultar usando o Grafana no Guia do usuário do Amazon Managed Service for Prometheus.

O exemplo a seguir é usado awscurl para consultar trabalhos em execução em um espaço de trabalho do 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"

As necessidades do principal chamador aps:QueryMetricsaps:GetMetricMetadata,aps:GetSeries, e aps:GetLabels as permissões (ou a política AmazonPrometheusQueryAccess gerenciada).

Consultar um CloudWatch conjunto de dados

  • CloudWatch console — Abra CloudWatch, escolha Query Studio e selecione ProMQL no menu de linguagem de consulta.

  • API HTTP — Envie SigV4-signed solicitações (nome do serviçomonitoring) para https://monitoring.region.amazonaws.com/api/v1/query ou/api/v1/query_range.

  • Grafana— Adicione uma fonte Prometheus de dados com URLhttps://monitoring.region.amazonaws.com, autenticação SigV4 e nome do serviço. monitoring Para obter instruções sobre como consultar CloudWatch métricas com PromQL inGrafana, consulte Consultar CloudWatch métricas com ProMQL no Grafana no Guia do usuário do Amazon Managed Grafana.

O exemplo a seguir é usado awscurl para consultar trabalhos em execução a partir de um CloudWatch conjunto de dados:

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"

As necessidades cloudwatch:GetMetricData e cloudwatch:ListMetrics permissões do principal chamador.

Exemplo PromQL queries

As consultas a seguir funcionam em qualquer um dos destinos. my-cluster-nameSubstitua pelo valor que você definiu no cluster rerótulo da sua configuração de raspagem.

Porcentagem de utilização da CPU
100 * slurm_node_cpus_alloc{cluster="my-cluster-name"} / slurm_node_cpus{cluster="my-cluster-name"}
Trabalhos pendentes (lista de pendências na fila)
slurm_jobs_pending{cluster="my-cluster-name"}
Execução de trabalhos
slurm_jobs_running{cluster="my-cluster-name"}
Taxa de transferência de trabalho
slurm_jobs_completed{cluster="my-cluster-name"}

Para obter mais informações sobre as métricas disponíveis e a configuração de raspagem, consulte o Guia de métricas no Slurm site.