Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本頁面僅說明 DAG 檔案處理相關問題。如要排解工作排程問題,請參閱「排解 Airflow 排程器問題」。
疑難排解工作流程
檢查 DAG 處理器記錄
如果 DAG 複雜,Airflow DAG 處理器可能無法剖析所有 DAG。這可能會導致許多問題,出現下列徵兆。
症狀:
如果 DAG 處理器在剖析 DAG 時遇到問題,可能會導致列出的問題一併發生。如果 DAG 是動態產生,這些問題的影響可能比靜態 DAG 更大。
- Airflow UI 和 DAG UI 不會顯示 DAG。
- 系統不會排定 DAG 的執行時間。
- DAG 處理器記錄檔有錯誤,例如:
dag-processor-manager [2023-04-21 21:10:44,510] {manager.py:1144} ERROR - Processor for /home/airflow/gcs/dags/dag-example.py with PID 68311 started at 2023-04-21T21:09:53.772793+00:00 has timed out, killing it.
或
dag-processor-manager [2023-04-26 06:18:34,860] {manager.py:948} ERROR - Processor for /home/airflow/gcs/dags/dag-example.py exited with return code 1.
系統會取消排定執行的 Airflow 工作,而無法剖析的 DAG 執行作業可能會標示為
failed
。例如:airflow-scheduler Failed to get task '<TaskInstance: dag-example.task1--1 manual__2023-04-17T10:02:03.137439+00:00 [removed]>' for dag 'dag-example'. Marking it as removed.
解決方法:
增加與 DAG 剖析相關的參數:
將
[core]dagbag_import_timeout
增加至至少 120 秒 (或更多,視需要而定)。將
[core]dag_file_processor_timeout
增加至至少 180 秒 (或視需要增加)。這個值必須大於[core]dagbag_import_timeout
。
修正或移除導致 DAG 處理器發生問題的 DAG。
檢查 DAG 剖析時間
如要確認問題是否發生在 DAG 剖析時間,請按照下列步驟操作。
主控台
在 Google Cloud 控制台中,您可以使用「Monitoring」頁面和「Logs」分頁標籤檢查 DAG 解析時間。
使用 Cloud Composer Monitoring 頁面檢查 DAG 解析時間:
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。 「監控」頁面隨即開啟。
在「Monitoring」(監控) 分頁中,選取「DAG Statistics」(DAG 統計資料),然後查看「Total parse time for all DAG files」(剖析所有 DAG 檔案所需時間總計) 圖表,找出可能的問題。建議您持續監控這張圖表一段時間,以便在多個 DAG 剖析週期內找出 DAG 剖析問題。
使用「Cloud Composer Logs」(Cloud Composer 記錄) 分頁檢查 DAG 剖析時間:
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。 「監控」頁面隨即開啟。
前往「記錄」分頁,然後從「所有記錄」導覽樹狀結構中選取「DAG 處理器管理工具」部分。
查看
dag-processor-manager
記錄並找出可能的問題。
gcloud
使用 dags report
指令查看所有 DAG 的剖析時間。
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
dags report
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 LOCATION
改成環境所在的地區。
指令輸出結果類似以下格式:
file | duration | dag_num | task_num | dags
======================+================+=========+==========+===================
/manydagsbig.py | 0:00:00.038334 | 2 | 10 | serial-0,serial-0
/airflow_monitoring.py| 0:00:00.001620 | 1 | 1 | airflow_monitoring
在表格中找出每個 DAG 的時間長度值。 如果值很大,可能表示其中一個 DAG 的實作方式不夠理想。從輸出資料表,您可以找出剖析時間較長的 DAG。
排解 DAG 剖析時的問題
以下各節說明 DAG 剖析時發生的一些常見問題,以及可能的修正方式。
執行緒數量有限
如果只允許 DAG 處理器使用有限數量的執行緒,可能會影響 DAG 的剖析時間。
如要解決這個問題,請覆寫 [scheduler]parsing_processes
Airflow 設定選項。將初始值設為單一 DAG 處理器使用的 vCPU 數量。接著調整 DAG 處理器的資源分配,讓處理器以約 70% 的 vCPU 或記憶體容量運作。
讓 DAG 處理器忽略不必要的檔案
您可以略過 DAG 資料夾中的非必要檔案,藉此提升 Airflow DAG 處理器的效能。Airflow DAG 處理器會忽略.airflowignore
檔案中指定的檔案和資料夾。
如要讓 Airflow DAG 處理器忽略非必要檔案,請按照下列步驟操作:
- 建立
.airflowignore
檔案。 - 在這個檔案中,列出應忽略的檔案和資料夾。
- 將這個檔案上傳至環境值區的
/dags
資料夾。
如要進一步瞭解 .airflowignore
檔案格式,請參閱 Airflow 說明文件。
Airflow 處理已暫停的 DAG
您可以暫停 DAG,停止執行。這可節省 Airflow 工作站的資源。
Airflow DAG 處理器會繼續剖析已暫停的 DAG。如要提升 DAG 處理器的效能,請使用 .airflowignore
,或從 DAG 資料夾中刪除已暫停的 DAG。
一般問題
以下各節說明一些常見剖析問題的徵兆和可能修正方式。
DAG 負載匯入逾時
症狀:
- 在 Airflow 網頁介面中,DAG 清單頁面頂端有一個紅色快訊方塊顯示
Broken DAG: [/path/to/dagfile] Timeout
。 在 Cloud Monitoring 中:
airflow-scheduler
記錄檔包含類似下列的項目:ERROR - Process timed out
ERROR - Failed to import: /path/to/dagfile
AirflowTaskTimeout: Timeout
修正方式:
覆寫 dag_file_processor_timeout
Airflow 設定選項,並給予系統更多時間進行 DAG 剖析:
區段 | 鍵 | 值 |
---|---|---|
core |
dag_file_processor_timeout |
新逾時值 |
Airflow UI 或 DAG UI 中未顯示 DAG,且排程器未排定 DAG
DAG 處理器會剖析各個 DAG,接著排程器才能為 DAG 排程,且 DAG 必須先經過剖析,才會顯示在 Airflow 使用者介面或 DAG 使用者介面中。
下列 Airflow 設定選項會定義剖析 DAG 的逾時時間:
[core]dagbag_import_timeout
定義 DAG 處理器剖析單一 DAG 的時間長度。[core]dag_file_processor_timeout
:定義 DAG 處理器可花費在剖析所有 DAG 的總時間。
如果 DAG 未顯示在 Airflow UI 或 DAG UI 中,請按照下列步驟操作:
如果 DAG 處理器可以正確處理 DAG,請檢查 DAG 處理器記錄。如果發生問題,您可能會在 DAG 處理器或排程器記錄中看到下列記錄項目:
[2020-12-03 03:06:45,672] {dag_processing.py:1334} ERROR - Processor for /usr/local/airflow/dags/example_dag.py with PID 21903 started at 2020-12-03T03:05:55.442709+00:00 has timed out, killing it.
檢查排程器記錄檔,確認排程器是否正常運作。如有問題,排程器記錄中可能會顯示下列記錄項目:
DagFileProcessorManager (PID=732) last sent a heartbeat 240.09 seconds ago! Restarting it Process timed out, PID: 68496
解決方法:
修正所有 DAG 剖析錯誤。DAG 處理器會剖析多個 DAG,在極少數情況下,一個 DAG 的剖析錯誤可能會對其他 DAG 的剖析作業造成負面影響。
如果剖析 DAG 所需的時間超過
[core]dagbag_import_timeout
中定義的秒數,請增加這個逾時時間。如果剖析所有 DAG 所需的時間超過
[core]dag_file_processor_timeout
中定義的秒數,請增加這個逾時時間。如果 DAG 需要很長時間才能剖析,也可能表示實作方式不夠理想。舉例來說,如果讀取許多環境變數,或對外部服務或 Airflow 資料庫執行呼叫,請盡量避免在 DAG 的全域區段中執行這類作業。
增加 DAG 處理器的 CPU 和記憶體資源,加快處理速度。