本頁面說明如何設定 Google Kubernetes Engine (GKE),以便收集在 Google Kubernetes Engine (GKE) 上執行的 Ray 叢集記錄和指標,以及如何在 Cloud Logging 和 Cloud Monitoring 中查看 Ray 記錄和指標。
如要進一步瞭解 Ray 和 KubeRay,請參閱 Google Kubernetes Engine (GKE) 上的 Ray 總覽。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
需求條件和限制
- 如要為 Ray 叢集啟用記錄檔收集功能,您必須先在現有的 GKE 叢集上啟用系統和工作負載記錄功能。
- 如果您在現有 GKE 叢集上啟用 Ray 叢集的記錄收集功能,GKE 只會收集新建立的 Ray Pod 記錄,不會收集現有 Ray Pod 的記錄。
- 如果是 Standard GKE 叢集,您必須啟用 Google Cloud Managed Service for Prometheus,才能啟用 Ray 叢集的指標收集功能。對於 Autopilot 叢集,Google Cloud Managed Service for Prometheus 預設為啟用。
- 您「不得」在 Ray 叢集中的任何 Ray 容器中指定名為
ray-logs的磁碟區。否則 GKE 不會收集記錄。 - GKE v1.35.1-gke.1616000 以上版本支援 JSON 記錄。如要啟用結構化 JSON 記錄功能,請在 Ray 容器規格中設定特定環境變數。
啟用 Ray 叢集的記錄收集功能
您可以透過新的或現有的 Autopilot 或 Standard GKE 叢集,為 Ray 叢集啟用記錄收集功能。GKE 從 Ray 叢集收集的 Ray 記錄會歸類為容器記錄。這包括 Ray 叢集標頭和工作節點產生的所有記錄。
您可以使用 Google Cloud 控制台或 gcloud CLI,為 Ray 叢集啟用記錄收集功能。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
依序點按 建立,然後在「標準」或「Autopilot」部分中,點按 設定。
在導覽窗格的「Cluster」(叢集) 底下,按一下「Features」(功能)。
在「Operations」(作業) 區段中,確認已勾選「System and Workloads」(系統和工作負載) 核取方塊。
在「AI and Machine Learning」(AI 和機器學習) 專區中,選取「Enable Ray Operator」(啟用 Ray 運算子),然後選取「Enable log collection for Ray clusters」(啟用 Ray 叢集的記錄檔收集功能)。
點選「建立」。
如果是 Standard 叢集,您也必須啟用 Google Cloud Managed Service for 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 記錄
您可以使用 Logging 查看從 GKE 上執行的 Ray 叢集收集的記錄。
前往 Google Cloud 控制台的「Cloud Logging」頁面。
開啟查詢編輯器,然後將運算式貼到查詢編輯器中
按一下「執行查詢」
您可以在 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 記錄會擷取為 Cloud Logging 中 jsonPayload.log 欄位內的非結構化文字字串。為提升查詢、分析和可觀測性,您可以將 Ray 叢集設定為以結構化 JSON 格式產生記錄。這個強化格式會將記錄檔剖析為詳細的鍵/值組合,方便您根據 task_id 和 job_id 等屬性,更快地進行欄位式查詢。強化結構化記錄功能可提供正確的嚴重程度標籤、防止多行記錄遭到分割,並與 Cloud Logging 功能無縫整合,進一步提升分析和偵錯作業的品質。
如要啟用結構化 JSON 輸出內容,請完成下列步驟:
- 為 Ray 叢集啟用記錄收集功能
在
RayClusterYAML 資訊清單的 Ray 容器規格中,設定下列環境變數:RAY_LOGGING_CONFIG_ENCODING="JSON":將 Ray 應用程式記錄 (Ray Core、執行者和工作) 設定為使用結構化 JSON 編碼。RAY_BACKEND_LOG_JSON="1":設定以結構化 JSON 格式產生 Ray 系統記錄 (例如來自 GCS 伺服器和 Raylet 的記錄)。
舉例來說,下列 RayCluster 資訊清單包含所有 Ray 容器的 env 區段,包括 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"套用更新後的 RayCluster 資訊清單:
kubectl apply -f your-raycluster.yaml
結構化記錄的查詢
| 查詢/篩選器名稱 | 運算式 |
|---|---|
| 特定 Ray 工作 ID 的所有錯誤記錄 | resource.type="k8s_container" labels."k8s-pod/ray_io/is-ray-node"="yes" severity=ERROR jsonPayload.job_id="YOUR_JOB_ID" |
| 特定 Ray 工作站程序 ID 的記錄 | resource.type="k8s_container" labels."k8s-pod/ray_io/is-ray-node"="yes" jsonPayload.worker_id="YOUR_WORKER_ID" |
| 特定工作 Pod 上特定工作 ID 的錯誤記錄 | 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 叢集的指標收集功能
您可以透過新的或現有的 Autopilot 或 Standard GKE 叢集,啟用 Ray 叢集的指標收集功能。
啟用 Ray 叢集的指標收集功能後,GKE 會從現有和新的 Ray 叢集收集指標。GKE 會以 Prometheus 格式收集 Ray 匯出的所有系統指標。
您可以使用Google Cloud 控制台或 gcloud CLI,為 Ray 叢集啟用指標收集功能。
控制台
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
依序點按 建立,然後在「標準」或「Autopilot」部分中,點按 設定。
在導覽窗格的「Cluster」(叢集) 底下,按一下「Features」(功能)。
在「Operations」(作業) 區段中,確認已勾選「System and Workloads」(系統和工作負載) 核取方塊。
在「AI and Machine Learning」(AI 和機器學習) 區段中,選取「Enable Ray Operator」(啟用 Ray Operator),然後選取「Enable metrics collection for Ray clusters」(啟用 Ray 叢集的指標收集功能)。
點選「建立」。
如果是 Standard 叢集,您也必須啟用 Google Cloud Managed Service for 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 Managed Service for Prometheus 提供預先設定的「Ray on GKE Overview」(GKE 上的 Ray 總覽) 資訊主頁,集中顯示重要 Ray 指標。建議您使用這種方式,快速開始監控 GKE 上的 Ray 叢集。
為 Ray 叢集啟用指標收集功能後,系統就會自動填入資訊主頁。
或者,如要探索從 GKE 上執行的 Ray 叢集收集的個別指標,請按照下列步驟操作:
前往 Google Cloud 控制台的「Metrics Explorer」頁面。
在「選取指標」欄位中,您可以搜尋 Ray 專屬指標。 這些指標通常會加上
prometheus/ray_前置字元。例如prometheus/ray_worker_cpu_seconds_total或prometheus/ray_memory_bytes_max。選取適當的資源類型 (例如
k8s_pod、k8s_container),並依與 Ray 叢集相關的標籤 (例如ray.io/cluster) 篩選,即可進一步縮小搜尋範圍。
後續步驟
- 瞭解 Kubernetes 上的 Ray。
- 參閱 KubeRay 說明文件。