מעקב אחרי אירועי חוסן באמצעות מרכז בקרה

אם אתם מעוניינים באשכולות אימון של Gemini Enterprise Agent Platform, אתם יכולים לפנות לנציג המכירות שלכם כדי לקבל גישה.

במהלך הרצת אשכולות אימון מתבצעות בדיקות תקינות אוטומטיות בצמתים, ואם אחת מהבדיקות נכשלת, המערכת מתערבת. לדוגמה, אם מזוהה שגיאת XID חמורה, המערכת עשויה לנקז את הצומת, להוסיף מחדש את עבודת Slurm המושפעת לתור וליצור מחדש את הצומת. כל אחד מהשינויים האלה נרשם ביומנים של הפרויקט כאירוע חוסן.

בדף הזה נסביר איך ליצור לוח בקרה מותאם אישית ב-Cloud Monitoring שבו מוצגים תרשימים של אירועי החוסן האלה לצד מצב Slurm של צמתי החישוב, כדי שתוכלו לראות אילו פעולות שחזור בוצעו על ידי השירות ואיך הן קשורות למצב של האשכול. מרכז הבקרה כולל שני תרשימים:

  • מצבי צמתים ב-Slurm: מספר הצמתים בכל מצב של Slurm לאורך זמן, מתוך המדד hypercomputecluster.googleapis.com/slurm/node_state.
  • אירועי חוסן: ספירה של אירועי חוסן, עם פירוט לפי סוג האירוע, שנלקחת ממדד מבוסס-יומן שיוצרים בקטע הבא.
לוח בקרה עם שני תרשימים: צמתים בכל מצב של Slurm לאורך זמן, ותרשים עמודות אופקי מוערם שבו מוצגת ספירת אירועי החוסן לפי סוג האירוע.
איור 1. כשקוראים את שני התרשימים יחד, אפשר לראות את ההשפעה של שחזור: מספר הצמתים הלא פעילים יורד בזמן שהשירות מחליף צומת שנכשל בבדיקת תקינות של הקדמה, והאירועים שגרמו לכך מופיעים מתחת.

לפני שמתחילים

מתקינים ומאתחלים את Google Cloud CLI, ואז מגדירים את הפרויקט שמכיל את אשכולות האימון:

gcloud auth login
gcloud config set project PROJECT_ID

מחליפים את PROJECT_ID במזהה הפרויקט.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירת מדד מבוסס-יומנים ולוח בקרה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

התפקידים המוגדרים מראש האלה מכילים את ההרשאות שנדרשות ליצירת מדד מבוסס-יומן ולוח בקרה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

כדי ליצור את המדד מבוסס-היומן ואת מרכז הבקרה, נדרשות ההרשאות הבאות:

  • יוצרים את המדד מבוסס-היומנים: logging.logMetrics.create
  • יוצרים את לוח הבקרה: monitoring.dashboards.create

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

יצירת מדד מבוסס-יומנים

אירועי חוסן נרשמים ביומנים של הפרויקט, כאשר כל אירוע נושא תווית event_type עם הקידומת RESILIENCE_EVENT_TYPE_. כדי לראות את האירועים הגולמיים ב-Logs Explorer, משתמשים בשאילתה הבאה:

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. נכנסים לדף Dashboards במסוף Cloud de Confiance , ואז פותחים את Training Clusters Resilience Dashboard בקטע My Dashboards. יכול להיות שיעברו כדקה עד שהמרכז יופיע.

פתרון בעיות

בקטעים הבאים מתוארות הבעיות שסביר להניח שתיתקלו בהן אחרי יצירת המדד ולוח הבקרה.

התרשים 'אירועי חוסן' ריק

לא מתבצע מילוי חוזר של מדד מבוסס-יומנים. הוא סופר רק רשומות ביומן שמגיעות אחרי שיוצרים את המדד. כפי שמוסבר בסקירה הכללית של מדדים מבוססי-יומן, מדד לא מאוכלס רטרואקטיבית בנתונים מיומני אירועים שכבר נמצאים ב-Cloud Logging.

אם התרחשו אירועים של חוסן מאז שיצרתם את המדד והתרשים עדיין ריק, צריך להריץ את השאילתה שבקטע יצירת מדד מבוסס-יומן כדי לוודא שהאירועים מופיעים ב-Logs Explorer.

בתרשים 'מצבי צמתים של Slurm' חסרים חלק מהאשכולות

המדד hypercomputecluster.googleapis.com/slurm/node_state מדווח רק על ידי אשכולות שפועלת בהם גרסה עדכנית מספיק של תוכנת האשכול. אם חסר אשכול בתרשים, מעדכנים את האשכול ואז בודקים שוב את התרשים.

תרשים 'מצבי צומת של Slurm' לא מציג צמתי התחברות

זה תקין. לצמתי התחברות אין מצב Slurm, כמו idle או mixed, ולכן הם לא מדווחים על המדד slurm/node_state.

התרשים 'אירועי חוסן' סופר יותר מדי אירועים

שירות Cloud Logging מעבד כל רשומה ביומן לפחות פעם אחת, ולכן שגיאה פנימית זמנית עלולה לגרום לכך שרשומה תיספר יותר מפעם אחת. מידע נוסף זמין במאמר פתרון בעיות במדדים שמבוססים על יומנים.

הרשומות עצמן ביומן הן המקור הקובע. כדי לקבל ספירה מדויקת של אירועים בטווח זמן מסוים, צריך להריץ שאילתה על האירועים בכלי Logs Explorer במקום לקרוא אותם מהתרשים.

המאמרים הבאים