跳至內容

如何對 Amazon MWAA 中的「任務是否從外部終止」錯誤進行疑難排解?

2 分的閱讀內容
0

我想追蹤 Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 中的「任務是否從外部終止」錯誤。

簡短描述

當 Airflow 中繼資料資料庫和任務啟動器之間的任務狀態不同時,會發生「任務是否從外部終止」錯誤。以下是導致此錯誤的原因:

  • 已達到 task_queued_timeout 值。預設值為 600 秒。如果是早期版本的 Apache Airflow,請查看 task_adoption_timeout 值。如需詳細資訊,請參閱 Apache Airflow 網站上的 task_queued_timeout_check_interval。
  • 任務因工作者的資源使用率過高而失敗。

解決方法

檢查排程器日誌

請完成下列步驟:

  1. 開啟 Amazon CloudWatch console (Amazon CloudWatch 主控台)。

  2. 在導覽窗格中,選擇 Logs (日誌)。

  3. 選擇 Log groups (日誌群組)。

  4. 選擇您要檢視的日誌群組。

  5. 選擇 Search All LogStream (搜尋所有 LogStream)。

  6. 若要搜尋任務失敗的時間段,請更新時間間隔。此外,請使用您的任務 ID 篩選搜尋:

    "example-dag-name.example-task-name manual__example-time-202X-XX-XXTXX:XX:XX.758774+00:00"

    **注意:**將 example-dag-name 替換為您的有向無環圖 (DAG) 名稱,將 example-task-name 替換為您的任務名稱,並將 example-time 替換為您要使用的時間段。

  7. 在搜尋結果中,找出參考您任務的兩行日誌:

    以下是佇列任務的範例:

    [[34m**2024-01-17T11:19:07.487+0000**[0m] [34mscheduler_job_runner.py:[0m713 INFO[0m - Setting external_id for <TaskInstance: dag_name.task_name manual__202X-XX-XXTXX:XX:XX.758774+00:00[queued]> to 8b49b168-992d-4db6-bdc7-a143d55720c8[0m

    以下是已停止任務的範例:

    [[34m**2024-01-17T11:30:18.936+0000**[0m] [34mscheduler_job_runner.py:[0m771 ERROR[0m - Executor reports task instance <TaskInstance: dag_name.task_name manual__202X-XX-XXTXX:XX:XX.758774+00:00 [queued]> finished (failed) although the task says it's queued. (Info: None) Was the task killed externally?[0m

您可以對下列情況進行進一步疑難排解。

由於 task_queued_timeout,任務失敗

比較您排程任務的時間和任務停止時間的時間戳記。如果差值大於或等於 task_queued_timeout 值,表示您的任務在佇列時間過長。

若要解決此問題,請執行下列動作:

  • 增加 task_queued_timeout 值,以便任務可以在佇列中等待更長時間而不會逾時。
  • 升級到更高的環境類型,以增加每個工作容器中的 Celery 工作節點數量。環境上可執行的並行任務數為 maxWorkers * celery.worker_autoscale。
  • 分散 DAG 和任務的負載。不要一次執行多個 DAG。
  • 檢查排程器是否沒有超載。如果您的排程器超載,那麼任務可能無法按時排程。

**注意:**增加排程器數量可能會影響中繼資料庫的使用率和剖析時間。增加排程器數量可以提高高可用性(HA),但不會為任務排程增加更多資源。如果未達到 task_queued_timeout 的值,請檢查您的工作者日誌。

若要檢查您的工作者日誌,請完成下列步驟:

  1. 存取您的 Apache Airflow UI。
  2. 選擇一個 DAG。
  3. 選取 Graph (圖形)。
  4. 選擇任務執行。
  5. 選擇 Instance details (執行個體詳細資訊)。然後,記下任務的 external_executor_id 值。
  6. 開啟 Amazon CloudWatch console (Amazon CloudWatch 主控台)。
  7. 在導覽窗格中,選擇 Logs (日誌)。
  8. 選擇 Log groups (日誌群組)。
  9. 選擇您要檢視的日誌群組。
  10. 選擇 Search All LogStream (搜尋所有 LogStream)。
  11. 若要搜尋任務失敗的時間段,請更新時間間隔。
  12. 使用 external_executor_id 值篩選搜尋,以查看與工作者上的任務相關的日誌行。
  13. 識別與您任務相關的錯誤訊息。如需錯誤的詳細資訊,請選擇日誌串流的名稱。

任務因 CPU 或記憶體使用率過高而失敗

如果您收到下列錯誤訊息,表示您的工作者有資源使用率問題,例如 CPU 或 RAM 過高。因此,在工作者容器上執行的工作者處理程序會失敗並提早退出。

"[2023-07-26 13](tel:2023072613):00:49,356: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: signal 15 (SIGTERM) Job: 1049.')"

若要對上述錯誤訊息進行疑難排解,請查看 CPUUtilization 和 MemoryUtilization 指標。如果指標持續處於高位或出現峰值,則表示您的 Amazon MWAA 工作者超載了。

若要解決工作者超載問題,請執行下列動作:

  • 降低 celery.worker_autoscale 值,以減少在工作者上同時執行的任務數量。
  • 使用更高層級的 Amazon MWAA 執行個體類別來獲得更多 RAM 和 vCPU。
  • 重寫 DAG,將運算工作負載從 Amazon MWAA 卸載到其他運算平台。

相關資訊

Apache Airflow 網站上的最佳做法