

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對日誌 AWS Glue 中的 Ray 錯誤進行故障診斷
<a name="troubleshooting-ray"></a>

**重要**  
AWS Glue for Ray 自 2026 年 4 月 30 日起不再向新客戶開放。如果您想要使用 AWS Glue for Ray，請在該日期之前註冊。現有客戶可以繼續正常使用該服務。如需類似 AWS Glue for Ray 的 功能，請探索 Amazon EKS。如需詳細資訊，請參閱 [AWS Glue 的 Ray 終止支援](https://docs.aws.amazon.com/glue/latest/dg/awsglue-ray-jobs-availability-change.html)。

AWS Glue 可讓您存取 Ray 程序在任務執行期間發出的日誌。如果您在 Ray 任務中遇到錯誤或非預期的行為，請先從日誌中收集資訊，用以判斷失敗的原因。我們還為互動式工作階段提供類似的日誌。工作階段日誌帶有 `/aws-glue/ray/sessions` 字首。

當您的任務執行時，日誌行會即時傳送至 CloudWatch。列印陳述式會在執行完成後附加至 CloudWatch 日誌中。任務執行後，日誌會保留兩週。

## 檢查 Ray 任務日誌
<a name="troubleshooting-ray-log-locations"></a>

如果任務失敗，請收集任務名稱和任務執行 ID。您可以在 AWS Glue 主控台中找到這些項目。瀏覽至任務頁面，然後找到 **Runs** (執行) 索引標籤。Ray 任務日誌會存放在下列專用的 CloudWatch 日誌群組中。
+ `/aws-glue/ray/jobs/script-log/` – 存放 Ray 主指令碼發出的日誌。
+ `/aws-glue/ray/jobs/ray-monitor-log/` – 存放 Ray 自動縮放器程序發出的日誌。這些日誌是針對前端節點產生，而不是針對其他工作節點產生。
+ `/aws-glue/ray/jobs/ray-gcs-logs/`：存放由 GCS (全域控制存放) 程序發出的日誌。這些日誌是針對前端節點產生，而不是針對其他工作節點產生。
+ `/aws-glue/ray/jobs/ray-process-logs/`：存放在前端節點上執行的其他 Ray 程序 (主要是儀表板代理) 發出的日誌。這些日誌是針對前端節點產生，而不是針對其他工作節點產生。
+ ` /aws-glue/ray/jobs/ray-raylet-logs/`：存放每個 raylet 程序發出的日誌。系統會將這些日誌收集在每個工作節點的單一串流中，包括前端節點。
+ `/aws-glue/ray/jobs/ray-worker-out-logs/`：將每個工作者的 `stdout` 日誌存放在叢集中。這些日誌會針對每個工作節點 (包括前端節點) 產生。
+ `/aws-glue/ray/jobs/ray-worker-err-logs/`：將每個工作者的 `stderr` 日誌存放在叢集中。這些日誌會針對每個工作節點 (包括前端節點) 產生。
+ `/aws-glue/ray/jobs/ray-runtime-env-log/`：存放有關 Ray 設定程序的日誌。這些日誌會針對每個工作節點 (包括前端節點) 產生。

## 對 Ray 任務錯誤進行故障診斷
<a name="troubleshooting-ray-errors"></a>

若要了解 Ray 日誌群組的組織，並尋找可協助您針對錯誤進行故障診斷的日誌群組，取得 Ray 架構的背景資訊會很有幫助。

在 AWS Glue ETL 中，工作者會對應至執行個體。當您為 AWS Glue 任務設定工作者時，您要設定專用於任務的執行個體類型和數量。Ray 對 *worker* (工作、工作者) 一詞的使用方式有所不同。

Ray 使用*前端節點*和*工作節點*來區分 Ray 叢集中執行個體的責任。Ray 工作節點可以託管多個*執行者*程序，這些程序會執行計算以實現分佈式計算的結果。執行函數複本的執行者稱為*複本*。複本執行者也可以稱為工作者程序。複本也可以在前端節點 (稱為前端) 上執行，因為該節點會執行額外的程序來協調叢集。

參與計算的每個執行者會產生自己的日誌串流。這為我們提供了一些見解：
+ 發出日誌的程序數目可能大於配置給任務的工作者數目。通常，每個執行個體上的每個核心都有一個執行者。
+  Ray 前端節點會發出叢集管理和啟動日誌。相對地，Ray 工作節點只會針對在其上執行的工作發出日誌。

如需有關 Ray 架構的詳細資訊，請參閱 Ray 文件中的 [Architecture Whitepapers]( https://docs.ray.io/en/latest/ray-contribute/whitepaper.html) (架構白皮書)。

### 問題領域：Amazon S3 存取
<a name="troubleshooting-ray-errors-s3"></a>

檢查任務執行的失敗訊息。如果提供的資訊不足，請查閱 `/aws-glue/ray/jobs/script-log/`。

### 問題領域：PIP 相依性管理
<a name="troubleshooting-ray-errors-dependencies"></a>

檢查 `/aws-glue/ray/jobs/ray-runtime-env-log/`。

### 問題領域：檢查主程序中的中繼值
<a name="troubleshooting-ray-errors-main-process"></a>

從主指令碼中寫入 `stderr` 或 `stdout`，並從 `/aws-glue/ray/jobs/script-log/` 擷取日誌。

### 問題領域：檢查子程序中的中繼值
<a name="troubleshooting-ray-errors-worker-process"></a>

從 `remote` 函數寫入 `stderr` 或 `stdout`。然後，從 `/aws-glue/ray/jobs/ray-worker-out-logs/` 或 `/aws-glue/ray/jobs/ray-worker-err-logs/` 擷取日誌。函數可能已在任何複本上執行，因此您可能必須檢查多個日誌才能找到預期的輸出。

### 問題領域：解譯錯誤訊息中的 IP 地址
<a name="troubleshooting-ray-errors-ips"></a>

在某些錯誤情況下，您的任務可能會發出包含 IP 地址的錯誤訊息。這些 IP 地址是暫時的資訊，叢集會用於識別節點並在節點之間進行通訊。節點的日誌會發布至日誌串流，其具有以 IP 地址為基礎的唯一字尾。

在 CloudWatch 中，您可以透過識別此字尾來篩選日誌，以檢查特定於此 IP 地址的日誌。例如，假設為 *FAILED\$1IP* 和 *JOB\$1RUN\$1ID*，您可以透過以下方式識別字尾：

```
filter @logStream like /JOB_RUN_ID/
| filter @message like /IP-/
| parse @message "IP-[*]" as ip
| filter ip like /FAILED_IP/
| fields replace(ip, ":", "_") as uIP
| stats count_distinct by uIP as logStreamSuffix
| display logStreamSuffix
```