איסוף וצפייה ביומנים ובמדדים של אשכולות Ray ב-Google Kubernetes Engine‏ (GKE)

בדף הזה מוסבר איך להגדיר את Google Kubernetes Engine ‏ (GKE) כדי לאסוף יומנים ומדדים של אשכולות Ray שפועלים ב-Google Kubernetes Engine ‏ (GKE), ואיך להציג את היומנים והמדדים של Ray ב-Cloud Logging וב-Cloud Monitoring.

מידע נוסף על Ray ו-KubeRay זמין במאמר סקירה כללית על Ray ב-Google Kubernetes Engine‏ (GKE).

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

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

דרישות ומגבלות

  • כדי להפעיל איסוף יומנים באשכולות Ray, צריך להפעיל קודם רישום ביומן של המערכת ועומסי העבודה באשכול GKE קיים.
  • אם מפעילים איסוף יומנים עבור אשכולות Ray באשכול GKE קיים, מערכת GKE אוספת יומנים רק מ-Pods חדשים של Ray שנוצרו, ולא מ-Pods קיימים של Ray.
  • במקרה של אשכולות GKE רגילים, צריך להפעיל את השירות המנוהל של Google Cloud ל-Prometheus כדי להפעיל איסוף מדדים לאשכולות Ray. בקטגוריות של Autopilot, השירות המנוהל של Google Cloud ל-Prometheus מופעל כברירת מחדל.
  • אסור לציין נפח בשם ray-logs באף קונטיינר Ray באשכול Ray. אחרת, GKE לא יאסוף יומנים.
  • רישום ביומן בפורמט JSON זמין ב-GKE בגרסה v1.35.1-gke.1616000 ואילך. כדי להפעיל רישום בפורמט JSON מובנה, צריך להגדיר משתני סביבה ספציפיים במפרט של קונטיינר Ray.

הפעלת איסוף יומנים עבור אשכול Ray

אפשר להפעיל איסוף יומנים לאשכולות Ray עם אשכולות GKE חדשים או קיימים במצב Autopilot או במצב רגיל. יומני Ray שמערכת GKE אוספת מאשכולות Ray מסווגים כיומני קונטיינרים. הם כוללים את כל היומנים שנוצרו על ידי הכותרת של אשכול Ray וצמתי העובדים.

אפשר להפעיל איסוף יומנים עבור אשכולות Ray באמצעות מסוף Google Cloud או ה-CLI של gcloud.

המסוף

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. לוחצים על יצירה ואז בקטע 'רגיל' או 'טייס אוטומטי' לוחצים על הגדרה.

  3. בחלונית הניווט, בקטע Cluster, לוחצים על Features.

  4. בקטע Operations, מוודאים שתיבת הסימון System and Workloads מסומנת.

  5. בקטע AI and Machine Learning (AI ולמידת מכונה), בוחרים באפשרות Enable Ray Operator (הפעלת Ray Operator) ואז באפשרות Enable log collection for Ray clusters (הפעלת איסוף יומנים עבור אשכולות Ray).

  6. לוחצים על יצירה.

בנוסף, באשכולות רגילים צריך להפעיל את השירות המנוהל של Google Cloud ל-Prometheus.

gcloud

יוצרים אשכול באמצעות האפשרות --addons=RayOperator והאפשרות --enable-ray-cluster-logging:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --addons=RayOperator \
    --enable-ray-cluster-logging

מחליפים את מה שכתוב בשדות הבאים:

  • CLUSTER_NAME: השם של האשכול החדש.
  • LOCATION: המיקום של האשכול החדש, לדוגמה, us-central1.

אפשר להפעיל איסוף יומנים עבור אשכולות Ray באשכול קיים באמצעות הפקודה gcloud container clusters update עם האפשרות --addons=RayOperator והאפשרות --enable-ray-cluster-logging.

צפייה ביומני Ray

אפשר לראות את היומנים שנאספו מאשכולות Ray שפועלים ב-GKE באמצעות Logging.

  1. נכנסים לדף Cloud Logging במסוף Google Cloud .

    כניסה ל-Cloud Logging

  2. פותחים את עורך השאילתות ומדביקים את הביטוי בעורך השאילתות.

  3. לוחצים על Run query (הפעלת שאילתה).

אפשר להשתמש בשאילתות לדוגמה הבאות ב-Logs Explorer:

שם השאילתה או המסנן ביטוי
כל יומני Ray
resource.type="k8s_container"
labels."k8s-pod/ray_io/is-ray-node"="yes"
כל היומנים של ראש ה-Ray
resource.type="k8s_container"
labels."k8s-pod/ray_io/node-type"="head"
כל היומנים באשכול Ray
resource.type="k8s_container"
labels."k8s-pod/ray_io/cluster"="RAY_CLUSTER_NAME"
כל יומני הנהגים מעבודת Ray
resource.type="k8s_container"
jsonPayload.ray_submission_id="RAY_JOB_SUBMISSION_ID"
כל יומני העובדים ממשימת Ray
resource.type="k8s_container"
labels."k8s-pod/ray_io/cluster"="RAY_CLUSTER_NAME"
labels."k8s-pod/ray_io/node-type"="worker"
jsonPayload.filename=~"/tmp/ray/session_latest/logs/worker-(.*).out"

הפעלת רישום משופר של נתונים מובנים (מומלץ)

רישום מובנה משופר זמין ב-GKE מגרסה v1.35.1-gke.1616000 ואילך.

כברירת מחדל, יומני Ray נשמרים כמחרוזות טקסט לא מובנות בשדה jsonPayload.log ב-Cloud Logging. כדי לשפר את השאילתות, הניתוח והיכולת לראות את המערכת, אפשר להגדיר אשכולות Ray ליצירת יומנים בפורמט JSON מובנה. בפורמט המשופר הזה, המערכת מנתחת את היומנים לצמדי מפתח/ערך מפורטים, וכך מאפשרת לבצע שאילתות מהירות שמבוססות על שדות במאפיינים כמו task_id ו-job_id. רישום משופר של נתונים מובנים ביומן מספק תיוג נכון של רמת החומרה, מונע פיצול של יומנים מרובי שורות ומשתלב בצורה חלקה עם תכונות של Cloud Logging לניתוח וניפוי באגים משופרים.

כדי להפעיל פלט JSON מובנה, מבצעים את השלבים הבאים:

  1. הפעלת איסוף יומנים באשכול Ray
  2. מגדירים את משתני הסביבה הבאים במפרט של קונטיינר Ray בקובץ המניפסט RayCluster YAML:

    1. RAY_LOGGING_CONFIG_ENCODING="JSON": מגדיר את היומנים של אפליקציית Ray (Ray Core, שחקנים ומשימות) לשימוש בקידוד JSON מובנה.
    2. RAY_BACKEND_LOG_JSON="1": מגדיר את יצירת יומני המערכת של Ray (כמו אלה משרת GCS ו-Raylet) בפורמט JSON מובנה.

    לדוגמה, המניפסטים הבאים של RayCluster כוללים את הקטע env לכל קובצי ה-container של Ray, במפרטים headGroupSpec ו-workerGroupSpecs:

    # Example snippet for a RayCluster manifest
    apiVersion: ray.io/v1
    kind: RayCluster
    metadata:
      name: raycluster-structured
    spec:
      headGroupSpec:
        template:
          spec:
            containers:
            - name: ray-head
              image: rayproject/ray:2.54.0 # Replace with your desired Ray image
              # ... other container settings
              env:
              - name: RAY_LOGGING_CONFIG_ENCODING
                value: "JSON"
              - name: RAY_BACKEND_LOG_JSON
                value: "1"
      workerGroupSpecs:
      - groupName: small-group
        replicas: 1
        minReplicas: 1
        maxReplicas: 5
        template:
          spec:
            containers:
            - name: ray-worker
              image: rayproject/ray:2.54.0 # Replace with your desired Ray image
              # ... other container settings
              env:
              - name: RAY_LOGGING_CONFIG_ENCODING
                value: "JSON"
              - name: RAY_BACKEND_LOG_JSON
                value: "1"
    
  3. מחילים את מניפסט RayCluster המעודכן: kubectl apply -f your-raycluster.yaml

שאילתות ליומנים מובְנים

שם השאילתה או המסנן ביטוי
כל יומני השגיאות של מזהה משימת Ray ספציפי
resource.type="k8s_container"
labels."k8s-pod/ray_io/is-ray-node"="yes"
severity=ERROR
jsonPayload.job_id="YOUR_JOB_ID"
יומנים של מזהה תהליך ספציפי של Ray worker
resource.type="k8s_container"
labels."k8s-pod/ray_io/is-ray-node"="yes"
jsonPayload.worker_id="YOUR_WORKER_ID"
יומני שגיאות של מזהה משימה ספציפי ב-Pod ספציפי של עובד
resource.type="k8s_container"
resource.labels.pod_name="YOUR_WORKER_POD_NAME"
labels."k8s-pod/ray_io/is-ray-node"="yes" 
severity=ERROR
jsonPayload.task_id="YOUR_TASK_ID"

הפעלת איסוף מדדים עבור אשכול Ray

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

אחרי שמפעילים את איסוף המדדים עבור אשכולות Ray, ‏ GKE אוסף מדדים מאשכולות Ray קיימים ומאשכולות Ray חדשים. ‫GKE אוסף את כל מדדי המערכת שמיוצאים על ידי Ray בפורמט Prometheus.

אפשר להפעיל איסוף מדדים עבור אשכולות Ray באמצעות מסוףGoogle Cloud או ה-CLI של gcloud.

המסוף

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. לוחצים על יצירה ואז בקטע 'רגיל' או 'טייס אוטומטי' לוחצים על הגדרה.

  3. בחלונית הניווט, בקטע Cluster, לוחצים על Features.

  4. בקטע Operations, מוודאים שתיבת הסימון System and Workloads מסומנת.

  5. בקטע AI and Machine Learning (AI ולמידת מכונה), בוחרים באפשרות Enable Ray Operator (הפעלת Ray Operator) ואז באפשרות Enable metrics collection for Ray clusters (הפעלת איסוף מדדים עבור אשכולות Ray).

  6. לוחצים על יצירה.

בנוסף, באשכולות רגילים צריך להפעיל את השירות המנוהל של Google Cloud ל-Prometheus.

gcloud

יוצרים אשכול באמצעות האפשרות --addons=RayOperator והאפשרות --enable-ray-cluster-monitoring:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --addons=RayOperator \
    --enable-ray-cluster-monitoring

מחליפים את מה שכתוב בשדות הבאים:

  • CLUSTER_NAME: השם של האשכול החדש.
  • LOCATION: המיקום של האשכול החדש, לדוגמה, us-central1.

אפשר להפעיל איסוף יומנים עבור אשכולות Ray באשכול קיים באמצעות הפקודה gcloud container clusters update עם האפשרות --addons=RayOperator והאפשרות --enable-ray-cluster-monitoring.

הצגת מדדים של Ray

השירות המנוהל של Google Cloud ל-Prometheus מספק לוח בקרה מוגדר מראש של Ray on GKE Overview, שבו מוצגות באופן מרכזי מדדי Ray חשובים. זו הדרך המומלצת להתחיל במהירות לעקוב אחרי אשכולות Ray ב-GKE.

מעבר ללוח הבקרה של Ray ב-GKE

מרכז הבקרה מתמלא באופן אוטומטי כשמפעילים איסוף מדדים עבור אשכול Ray.

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

  1. נכנסים לדף Metrics Explorer במסוף Google Cloud .

    לדף Metrics Explorer

  2. בשדה Select a metric, אפשר לחפש מדדים שספציפיים ל-Ray. בדרך כלל, המדדים האלה מתחילים בקידומת prometheus/ray_. לדוגמה, prometheus/ray_worker_cpu_seconds_total או prometheus/ray_memory_bytes_max.

  3. אפשר לצמצם עוד יותר את החיפוש על ידי בחירת סוג המשאב המתאים (לדוגמה, k8s_pod, k8s_container) וסינון לפי תוויות שרלוונטיות לאשכול Ray (לדוגמה, ray.io/cluster).

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