Monitorar eventos de resiliência com um painel

Se você tiver interesse em clusters de treinamento da Gemini Enterprise Agent Platform, entre em contato com seu representante de vendas para ter acesso.

Os clusters de treinamento executam verificações de integridade automatizadas nos nós e intervêm quando uma verificação falha. Por exemplo, ao identificar um erro fatal de XID, ele pode consumir o nó, enfileirar novamente o job do Slurm afetado e recriar o nó. Cada uma dessas intervenções é gravada nos registros do projeto como um evento de resiliência.

Nesta página, mostramos como criar um painel personalizado do Cloud Monitoring que representa esses eventos de resiliência ao lado do estado do Slurm dos nós de computação. Assim, você pode conferir quais ações de recuperação o serviço realizou e como elas se correlacionam com o estado do cluster. O painel tem dois gráficos:

  • Estados do nó do Slurm: o número de nós em cada estado do Slurm ao longo do tempo, extraído da métrica hypercomputecluster.googleapis.com/slurm/node_state.
  • Eventos de resiliência: uma contagem de eventos de resiliência, divididos por tipo de evento, extraídos de uma métrica com base em registros criada na próxima seção.
Um painel com dois gráficos: nós em cada estado do Slurm ao longo do tempo e um gráfico de barras empilhadas contando eventos de resiliência por tipo de evento.
Figura 1. A leitura dos dois gráficos juntos mostra o efeito de uma recuperação: a contagem de nós inativos cai enquanto o serviço substitui um nó que falhou em uma verificação de integridade de prólogo, e os eventos que causaram isso aparecem abaixo.

Antes de começar

Instale e inicialize a Google Cloud CLI e defina o projeto que contém os clusters de treinamento:

gcloud auth login
gcloud config set project PROJECT_ID

Substitua PROJECT_ID pelo ID do seu projeto.

Funções exigidas

Para receber as permissões necessárias para criar a métrica com base em registros e o painel, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esses papéis predefinidos contêm as permissões necessárias para criar a métrica com base em registros e o painel. Para acessar as permissões exatas que são necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para criar a métrica com base em registros e o painel:

  • Criar a métrica com base em registros: logging.logMetrics.create
  • Criar o painel: monitoring.dashboards.create

Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos.

Criar a métrica com base em registros

Os eventos de resiliência são registrados nos registros do projeto, em que cada evento tem um rótulo event_type com o prefixo RESILIENCE_EVENT_TYPE_. Para conferir os eventos brutos na Análise de registros, use a seguinte consulta:

labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"

O Cloud Monitoring não pode representar entradas de registro diretamente. Portanto, primeiro transforme essa consulta em uma métrica com base em registros.

  1. Salve a configuração a seguir em um arquivo chamado resilience_metric.yaml:

    name: training_cluster_resilience_events
    description: "Resilience events on training cluster nodes (VM instances)."
    filter: 'resource.type="gce_instance" AND labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"'
    metricDescriptor:
      metricKind: DELTA
      valueType: INT64
      unit: "1"
      labels:
        - key: cluster_id
          valueType: STRING
          description: "The ID of the training cluster."
        - key: event_type
          valueType: STRING
          description: "The type of resilience event."
        - key: slurm_job_name
          valueType: STRING
          description: "The name of the Slurm job that triggered the resilience event, if applicable."
        - key: slurm_job_id
          valueType: STRING
          description: "The ID of the Slurm job that triggered the resilience event, if applicable."
        - key: slurm_job_partition
          valueType: STRING
          description: "The partition that the resilience event acts on."
    labelExtractors:
      cluster_id: "EXTRACT(labels.cluster_id)"
      event_type: "EXTRACT(labels.event_type)"
      slurm_job_name: "EXTRACT(labels.slurm_job_name)"
      slurm_job_id: "EXTRACT(labels.slurm_job_id)"
      slurm_job_partition: "EXTRACT(labels.slurm_job_partition)"
    

    O campo labelExtractors copia os rótulos de cada entrada de registro para a métrica, o que permite dividir o gráfico por tipo de evento, cluster ou job do Slurm.

  2. Crie a métrica:

    gcloud logging metrics create training_cluster_resilience_events \
        --config-from-file=resilience_metric.yaml
    
  3. Verifique se a métrica existe:

    gcloud logging metrics describe training_cluster_resilience_events
    

    Também é possível confirmar a métrica no Cloud de Confiance console na página Métricas com base em registros.

Criar o painel

  1. Salve a configuração a seguir em um arquivo chamado resilience_dashboard.json:

    {
      "displayName": "Training Clusters Resilience Dashboard",
      "mosaicLayout": {
        "columns": 48,
        "tiles": [
          {
            "height": 16,
            "width": 24,
            "widget": {
              "title": "Slurm node states",
              "xyChart": {
                "chartOptions": {
                  "mode": "COLOR"
                },
                "dataSets": [
                  {
                    "minAlignmentPeriod": "60s",
                    "plotType": "LINE",
                    "targetAxis": "Y1",
                    "timeSeriesQuery": {
                      "timeSeriesFilter": {
                        "aggregation": {
                          "alignmentPeriod": "60s",
                          "crossSeriesReducer": "REDUCE_SUM",
                          "groupByFields": [
                            "metric.label.\"state\""
                          ],
                          "perSeriesAligner": "ALIGN_MEAN"
                        },
                        "filter": "metric.type=\"hypercomputecluster.googleapis.com/slurm/node_state\" resource.type=\"gce_instance\""
                      }
                    }
                  }
                ],
                "yAxis": {
                  "scale": "LINEAR"
                }
              }
            }
          },
          {
            "yPos": 16,
            "height": 16,
            "width": 24,
            "widget": {
              "title": "Resilience events",
              "xyChart": {
                "chartOptions": {
                  "mode": "COLOR"
                },
                "dataSets": [
                  {
                    "minAlignmentPeriod": "60s",
                    "plotType": "STACKED_BAR",
                    "targetAxis": "Y1",
                    "timeSeriesQuery": {
                      "timeSeriesFilter": {
                        "aggregation": {
                          "alignmentPeriod": "60s",
                          "crossSeriesReducer": "REDUCE_COUNT",
                          "groupByFields": [
                            "metric.label.\"event_type\""
                          ],
                          "perSeriesAligner": "ALIGN_COUNT"
                        },
                        "filter": "metric.type=\"logging.googleapis.com/user/training_cluster_resilience_events\" resource.type=\"gce_instance\""
                      }
                    }
                  }
                ],
                "yAxis": {
                  "scale": "LINEAR"
                }
              }
            }
          }
        ]
      }
    }
    

    Se você deu um nome diferente à métrica com base em registros na seção anterior, mude o filtro logging.googleapis.com/user/ para corresponder.

  2. Crie o painel:

    gcloud monitoring dashboards create \
        --config-from-file=resilience_dashboard.json
    
  3. No Cloud de Confiance console, acesse a página Painéis e, em Meus painéis, abra Painel de resiliência de clusters de treinamento. Pode levar cerca de um minuto para o painel aparecer.

Solução de problemas

As seções a seguir descrevem os problemas mais prováveis de ocorrer após a criação da métrica e do painel.

O gráfico "Eventos de resiliência" está vazio

Uma métrica com base em registros não é preenchida retroativamente. Ela só conta as entradas de registro que chegam depois que você cria a métrica. Como explica a visão geral das métricas com base em registros, uma métrica não é preenchida retroativamente com dados de entradas de registro que já estão no Cloud Logging.

Se eventos de resiliência ocorreram desde que você criou a métrica e o gráfico ainda está vazio, confirme se os eventos estão presentes na Análise de registros executando a consulta em Criar a métrica com base em registros.

O gráfico "Estados do nó do Slurm" não mostra alguns clusters

A métrica hypercomputecluster.googleapis.com/slurm/node_state é informada apenas por clusters que executam uma versão recente do software de cluster. Se um cluster estiver ausente do gráfico, atualize-o e verifique o gráfico novamente.

O gráfico "Estados do nó do Slurm" não mostra nós de login

Isso já é esperado. Os nós de login não têm um estado do Slurm, como idle ou mixed, portanto, não informam a métrica slurm/node_state.

O gráfico "Eventos de resiliência" conta eventos em excesso

O Cloud Logging processa cada entrada de registro pelo menos uma vez. Portanto, um erro interno temporário pode fazer com que uma entrada seja contada mais de uma vez. Para mais informações, consulte Resolver problemas de métricas com base em registros.

As entradas de registro são a fonte da verdade. Para receber uma contagem exata de um período, consulte os eventos na Análise de registros em vez de lê-los no gráfico.

A seguir