Resilience-Ereignisse mit einem Dashboard überwachen

Wenn Sie sich für Trainingscluster der Gemini Enterprise Agent Platform interessieren, wenden Sie sich an Ihren Vertriebsmitarbeiter, um Zugriff zu erhalten.

Trainingscluster führen automatisierte Systemdiagnosen für Ihre Knoten aus und greifen ein, wenn eine Diagnose fehlschlägt. Wenn beispielsweise ein schwerwiegender XID-Fehler erkannt wird, kann der Knoten geleert, der betroffene Slurm-Job in die Warteschlange gestellt und der Knoten neu erstellt werden. Jeder dieser Eingriffe wird als Resilienzereignis in die Logs Ihres Projekts geschrieben.

Auf dieser Seite wird beschrieben, wie Sie ein benutzerdefiniertes Cloud Monitoring-Dashboard erstellen, in dem diese Resilienzereignisse neben dem Slurm-Status Ihrer Compute-Knoten dargestellt werden. So können Sie sehen, welche Wiederherstellungsmaßnahmen der Dienst ergriffen hat und wie sie mit dem Status Ihres Clusters zusammenhängen. Das Dashboard enthält zwei Diagramme:

  • Slurm-Knotenstatus: Die Anzahl der Knoten in jedem Slurm-Status im Zeitverlauf, abgeleitet aus dem Messwert hypercomputecluster.googleapis.com/slurm/node_state.
  • Resilienzereignisse: Eine Anzahl von Resilienzereignissen, aufgeschlüsselt nach Ereignis typ, abgeleitet aus einem logbasierten Messwert, den Sie im nächsten Abschnitt erstellen.
Ein Dashboard mit zwei Diagrammen: Knoten in jedem Slurm-Status im Zeitverlauf und ein gestapeltes Balkendiagramm mit der Anzahl der Resilienzereignisse nach Ereignistyp.
Abbildung 1. Wenn Sie die beiden Diagramme zusammen lesen, sehen Sie die Auswirkungen einer Wiederherstellung: Die Anzahl der Knoten im Leerlauf sinkt, während der Dienst einen Knoten ersetzt, bei dem die Systemdiagnose vor dem Start fehlgeschlagen ist. Die Ereignisse, die dazu geführt haben, werden darunter angezeigt.

Hinweis

Installieren und initialisieren Sie die Google Cloud CLI und legen Sie dann das Projekt fest, das Ihre Trainingscluster enthält:

gcloud auth login
gcloud config set project PROJECT_ID

Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen des logbasierten Messwerts und des Dashboards benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Erstellen des logbasierten Messwerts und des Dashboards erforderlich sind. Maximieren Sie den Abschnitt Erforderliche Berechtigungen , um die notwendigen Berechtigungen anzuzeigen, die erforderlich sind:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um den logbasierten Messwert und das Dashboard zu erstellen:

  • Logbasierten Messwert erstellen: logging.logMetrics.create
  • Dashboard erstellen: monitoring.dashboards.create

Möglicherweise können Sie diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Logbasierten Messwert erstellen

Resilienzereignisse werden in den Logs Ihres Projekts erfasst. Jedes Ereignis hat ein Label event_type mit dem Präfix RESILIENCE_EVENT_TYPE_. Wenn Sie die Rohereignisse im Log-Explorer sehen möchten, verwenden Sie die folgende Abfrage:

labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"

Cloud Monitoring kann Logeinträge nicht direkt darstellen. Daher müssen Sie diese Abfrage zuerst in einen logbasierten Messwert umwandeln.

  1. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namen 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)"
    

    Das Feld labelExtractors kopiert die Labels jedes Logeintrags in den Messwert. So können Sie das Diagramm nach Ereignistyp, Cluster oder Slurm-Job aufschlüsseln.

  2. Erstellen Sie den Messwert:

    gcloud logging metrics create training_cluster_resilience_events \
        --config-from-file=resilience_metric.yaml
    
  3. Prüfen Sie, ob der Messwert vorhanden ist:

    gcloud logging metrics describe training_cluster_resilience_events
    

    Sie können den Messwert auch in der Cloud de Confiance Console auf der Seite **Logbasierte Messwerte** bestätigen.

Dashboard erstellen

  1. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namen 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"
                }
              }
            }
          }
        ]
      }
    }
    

    Wenn Sie dem logbasierten Messwert im vorherigen Abschnitt einen anderen Namen gegeben haben, ändern Sie den Filter logging.googleapis.com/user/ entsprechend.

  2. Erstellen Sie das Dashboard:

    gcloud monitoring dashboards create \
        --config-from-file=resilience_dashboard.json
    
  3. Öffnen Sie in der Cloud de Confiance Console die Dashboards Seite und dann unter Meine Dashboards die Option Training Clusters Resilience Dashboard. Es kann etwa eine Minute dauern, bis das Dashboard angezeigt wird.

Fehlerbehebung

In den folgenden Abschnitten werden die Probleme beschrieben, die am wahrscheinlichsten auftreten, nachdem Sie den Messwert und das Dashboard erstellt haben.

Das Diagramm „Resilienzereignisse“ ist leer

Ein logbasierter Messwert wird nicht mit Daten aus der Vergangenheit gefüllt. Es werden nur Logeinträge gezählt, die nach der Erstellung des Messwerts eingehen. Wie in der Übersicht zu logbasierten Messwerten erläutert, wird ein Messwert nicht rückwirkend mit Daten aus Logeinträgen gefüllt, die bereits in Cloud Logging vorhanden sind.

Wenn seit der Erstellung des Messwerts Resilienzereignisse aufgetreten sind und das Diagramm noch immer leer ist, prüfen Sie, ob die Ereignisse im Log-Explorer vorhanden sind. Führen Sie dazu die Abfrage unter Logbasierten Messwert erstellen aus.

Im Diagramm „Slurm-Knotenstatus“ fehlen einige Cluster

Der Messwert hypercomputecluster.googleapis.com/slurm/node_state wird nur von Clustern gemeldet, auf denen eine aktuelle Version der Cluster-Software ausgeführt wird. Wenn ein Cluster im Diagramm fehlt, aktualisieren Sie den Cluster und prüfen Sie das Diagramm noch einmal.

Im Diagramm „Slurm-Knotenstatus“ werden keine Anmeldeknoten angezeigt

Dies ist zu erwarten. Anmeldeknoten haben keinen Slurm-Status wie idle oder mixed. Daher wird der Messwert slurm/node_state nicht gemeldet.

Im Diagramm „Resilienzereignisse“ werden Ereignisse zu oft gezählt

Cloud Logging verarbeitet jeden Logeintrag mindestens einmal. Ein vorübergehender interner Fehler kann dazu führen, dass ein Eintrag mehrmals gezählt wird. Weitere Informationen finden Sie unter siehe Fehlerbehebung bei logbasierten Messwerten.

Die Logeinträge selbst sind die Quelle der Wahrheit. Wenn Sie eine genaue Anzahl für einen Zeitraum erhalten möchten, fragen Sie die Ereignisse im Log-Explorer ab, anstatt sie aus dem Diagramm zu lesen.

Nächste Schritte