ダッシュボードで復元力イベントをモニタリングする

Gemini Enterprise Agent Platform Training クラスタに関心をお持ちの場合は、営業担当者にお問い合わせください。

Training クラスタは、ノードで 自動ヘルスチェック を実行し、チェックに失敗した場合は介入します。たとえば、致命的な XID エラーが特定された場合、ノードをドレインし、影響を受ける Slurm ジョブを再キューに入れ、ノードを再作成することがあります。これらの介入は、プロジェクトのログに復元イベントとして書き込まれます。

このページでは、コンピューティング ノードの Slurm 状態の横にこれらの 復元イベントをグラフ化するカスタム Cloud Monitoring ダッシュボードを作成する方法について説明します。これにより、サービスが実行した復元アクションと、クラスタの 状態との関連性を 確認できます。ダッシュボードには、次の 2 つのグラフが表示されます。

  • Slurm ノードの状態: hypercomputecluster.googleapis.com/slurm/node_state 指標から取得した、各 Slurm 状態のノード数(時間経過)。
  • 復元イベント: 次のセクションで作成するログベースの指標から取得した、イベント タイプ別の復元イベントの数。
2 つのグラフを含むダッシュボード。各 Slurm 状態のノードの経時変化と、イベントタイプ別の復元イベント数を表す積み上げ棒グラフ。
図 1.2 つのグラフを一緒に読むと、 復元の効果がわかります。プロローグのヘルスチェックに失敗したノードがサービス によって置き換えられると、アイドル状態のノード数が減少し、その原因となった イベントが下に表示されます。

始める前に

Google Cloud CLI をインストールして初期化し、Training クラスタを含むプロジェクトを設定します。

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 コンソールで [**ダッシュボード**] ページに移動し、 [**マイ ダッシュボード**] で [**Training Clusters Resilience Dashboard**] を開きます。ダッシュボードが表示されるまでに 1 分ほどかかることがあります。

トラブルシューティング

次のセクションでは、指標とダッシュボードを作成した後に発生する可能性の高い問題について説明します。

[Resilience events] グラフが空である

ログベースの指標はバックフィルされません。指標を作成した後に到着したログエントリのみがカウントされます。 ログベースの指標の概要 で説明されているように、指標に、Cloud Logging にすでにあるログエントリのデータが遡及的に含まれることはありません。

指標を作成してから復元イベントが発生しているのにグラフが 空の場合は、ログエクスプローラにイベントが存在することを確認します。 ログベースの指標を作成するでクエリを実行します。

[Slurm node states] グラフに一部のクラスタが表示されない

hypercomputecluster.googleapis.com/slurm/node_state 指標は、クラスタ ソフトウェアの十分な最新バージョンを実行しているクラスタでのみ報告されます。グラフに クラスタが表示されない場合は、 クラスタを更新して グラフを再度確認してください。

[Slurm node states] グラフにログインノードが表示されない

これは予期されたエラーです。ログインノードには、idle や mixed などの Slurm 状態がないため、slurm/node_state 指標は報告されません。

[Resilience events] グラフでイベントが過剰にカウントされる

Cloud Logging は各ログエントリを少なくとも 1 回処理するため、一時的な内部エラーによりエントリが複数回カウントされることがあります。詳細については、 ログベースの指標のトラブルシューティングをご覧ください。

ログエントリ自体が信頼できる情報源です。特定の期間の正確なカウントを取得するには、グラフから読み取るのではなく、ログ エクスプローラでイベントをクエリします。

次のステップ