대시보드로 복원력 이벤트 모니터링

Gemini Enterprise Agent Platform 학습 클러스터에 관심이 있으면 영업 담당자에게 문의하여 액세스 권한을 받으세요.

학습 클러스터는 노드에서 자동화된 상태 점검 을 실행하고 점검이 실패하면 개입합니다. 예를 들어 치명적인 XID 오류를 식별하면 노드를 드레이닝하고 영향을 받는 Slurm 작업을 다시 대기열에 추가하고 노드를 다시 만들 수 있습니다. 이러한 각 개입은 프로젝트의 로그에 복원력 이벤트 로 기록됩니다.

이 페이지에서는 컴퓨팅 노드의 Slurm 상태 옆에 이러한 복원력 이벤트를 차트로 표시하는 커스텀 Cloud Monitoring 대시보드를 빌드하는 방법을 보여줍니다. 이렇게 하면 서비스에서 수행한 복구 작업과 클러스터 상태 간의 상관관계를 확인할 수 있습니다. 대시보드에는 다음 두 가지 차트가 있습니다.

  • Slurm 노드 상태: 시간 경과에 따른 각 Slurm 상태의 노드 수입니다. hypercomputecluster.googleapis.com/slurm/node_state 측정항목에서 가져온 것입니다.
  • 복원력 이벤트: 다음 섹션에서 만드는 로그 기반 측정항목에서 가져온 이벤트 유형별로 분류된 복원력 이벤트 수입니다.
시간에 따른 각 Slurm 상태의 노드와 이벤트 유형별 복원력 이벤트를 집계하는 누적 막대 그래프가 있는 대시보드
그림 1. 두 차트를 함께 읽으면 복구의 효과를 확인할 수 있습니다. 서비스에서 프롤로그 상태 점검에 실패한 노드를 교체하는 동안 유휴 노드 수가 감소하고 이를 유발한 이벤트가 아래에 표시됩니다.

시작하기 전에

Google Cloud CLI를 설치하고 초기화한 후 학습 클러스터가 포함된 프로젝트를 설정합니다.

gcloud auth login
gcloud config set project PROJECT_ID

PROJECT_ID를 프로젝트의 ID로 바꿉니다.

필요한 역할

로그 기반 측정항목과 대시보드를 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이렇게 사전 정의된 역할에는 로그 기반 측정항목과 대시보드를 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

로그 기반 측정항목과 대시보드를 만들려면 다음 권한이 필요합니다.

  • 로그 기반 측정항목 만들기: logging.logMetrics.create
  • 대시보드 만들기: monitoring.dashboards.create

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

로그 기반 측정항목 만들기

복원력 이벤트는 프로젝트의 로그에 기록되며 각 이벤트에는 RESILIENCE_EVENT_TYPE_ 접두사가 붙은 event_type 라벨이 있습니다. 로그 탐색기에서 원시 이벤트를 보려면 다음 쿼리를 사용하세요.

labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"

Cloud Monitoring은 로그 항목을 직접 차트로 표시할 수 없으므로 먼저 이 쿼리를 로그 기반 측정항목으로 전환합니다.

  1. 다음 구성을 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)"
    

    labelExtractors 필드는 각 로그 항목의 라벨을 측정항목에 복사하므로 이벤트 유형, 클러스터 또는 Slurm 작업별로 차트를 분류할 수 있습니다.

  2. 측정항목을 만듭니다.

    gcloud logging metrics create training_cluster_resilience_events \
        --config-from-file=resilience_metric.yaml
    
  3. 측정항목이 있는지 확인합니다.

    gcloud logging metrics describe training_cluster_resilience_events
    

    콘솔의 Cloud de Confiance ** 로그 기반 측정항목** 페이지에서 측정항목을 확인할 수도 있습니다.

대시보드 만들기

  1. 다음 구성을 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"
                }
              }
            }
          }
        ]
      }
    }
    

    이전 섹션에서 로그 기반 측정항목에 다른 이름을 지정한 경우 logging.googleapis.com/user/ 필터를 일치하도록 변경합니다.

  2. 대시보드를 만듭니다.

    gcloud monitoring dashboards create \
        --config-from-file=resilience_dashboard.json
    
  3. Cloud de Confiance 콘솔에서 대시보드 페이지로 이동한 후 내 대시보드에서 학습 클러스터 복원력 대시보드를 엽니다. 대시보드가 표시되는 데 약 1분이 걸릴 수 있습니다.

문제 해결

다음 섹션에서는 측정항목과 대시보드를 만든 후 발생할 가능성이 가장 높은 문제를 설명합니다.

'복원력 이벤트' 차트가 비어 있음

로그 기반 측정항목은 백필되지 않습니다. 측정항목을 만든 후 도착하는 로그 항목만 계산합니다. 로그 기반 측정항목 개요 에서 설명한 대로 측정항목은 이미 Cloud Logging에 있는 로그 항목의 데이터로 소급하여 채워지지 않습니다.

측정항목을 만든 후 복원력 이벤트가 발생했지만 차트가 여전히 비어 있는 경우 로그 탐색기에 이벤트가 있는지 확인하려면 로그 기반 측정항목 만들기의 쿼리를 실행합니다.

'Slurm 노드 상태' 차트에 일부 클러스터가 없음

hypercomputecluster.googleapis.com/slurm/node_state 측정항목은 최근 버전의 클러스터 소프트웨어를 실행하는 클러스터에서만 보고됩니다. 차트에 클러스터가 누락된 경우 클러스터를 업데이트한 후 차트를 다시 확인합니다.

'Slurm 노드 상태' 차트에 로그인 노드가 표시되지 않음

이는 정상적인 동작입니다. 로그인 노드에는 idle 또는 mixed와 같은 Slurm 상태가 없으므로 slurm/node_state 측정항목을 보고하지 않습니다.

'복원력 이벤트' 차트에서 이벤트가 과도하게 계산됨

Cloud Logging은 각 로그 항목을 한 번 이상 처리하므로 일시적인 내부 오류로 인해 항목이 두 번 이상 계산될 수 있습니다. 자세한 내용은 다음 로그 기반 측정항목 문제 해결을 참조하세요.

로그 항목 자체가 정보 소스입니다. 특정 기간의 정확한 수를 얻으려면 차트에서 읽는 대신 로그 탐색기에서 이벤트를 쿼리합니다.

다음 단계