Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本頁僅討論與 DAG 檔案處理相關的問題。如要瞭解排程工作的問題,請參閱「排解 Airflow 排程器問題」。
排解工作流程問題
檢查 DAG 處理器記錄檔
如果 DAG 很複雜,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.
DAG 處理器發生問題,導致重新啟動。
已排定執行的 Airflow 工作會取消,且無法剖析的 DAG 的 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 剖析相關參數:
將 dagbag-import-timeout 增加至至少 120 秒 (或視需要增加更多)。
將 dag-file-processor-timeout 調高至至少 180 秒 (或更多,視需求而定)。這個值必須高於
dagbag-import-timeout
。
修正或移除會導致 DAG 處理器發生問題的 DAG。
檢查 DAG 剖析時間
如要確認問題是否發生在 DAG 剖析期間,請按照下列步驟操作。
主控台
在 Google Cloud 控制台中,您可以使用「Monitoring」頁面和「Logs」分頁檢查 DAG 剖析時間。
透過 Cloud Composer 監控頁面檢查 DAG 剖析時間:
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。系統會開啟「監控」頁面。
在「監控」分頁中,查看「DAG 執行作業」部分的「剖析所有 DAG 檔案的總時間」圖表,找出可能的問題。
使用「Cloud Composer 記錄檔」分頁檢查 DAG 剖析時間:
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。系統會開啟「監控」頁面。
前往「Logs」分頁,然後從「All Logs」導覽樹狀圖中選取「DAG processor manager」部分。
查看
dag-processor-manager
記錄,找出可能的問題。
gcloud
使用 dags report
指令查看所有 DAG 的剖析時間。
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
dags report
取代:
- 將
ENVIRONMENT_NAME
替換為環境的名稱。 LOCATION
改成環境所在的地區。
指令輸出結果類似以下格式:
Executing within the following Kubernetes cluster namespace: composer-2-0-31-airflow-2-3-3
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 的 duration 值。如果值偏高,可能表示某個 DAG 並未以最佳方式實作。您可以從輸出表格中找出哪些 DAG 的剖析時間過長。
排解 DAG 剖析期間的問題
以下各節說明 DAG 剖析期間的常見問題及其可能的修正方式。
執行緒數量有限
如果允許 DAG 處理器管理員只使用有限數量的執行緒,可能會影響 DAG 剖析時間。
如要解決這個問題,請覆寫下列 Airflow 設定選項:
-
區段 鍵 值 附註 scheduler
parsing_processes
NUMBER_OF_CPUs_IN_DAG_PROCESSOR - 1
將 NUMBER_OF_CPUs_IN_DAG_PROCESSOR
替換為 DAG 處理器中的 CPU 數量
。
讓 DAG 處理器忽略不必要的檔案
您可以略過 DAG 資料夾中的不必要檔案,藉此改善 DAG 處理器的效能。DAG 處理器會忽略 .airflowignore
檔案中指定的檔案和資料夾。
如要讓 DAG 處理器忽略不必要的檔案,請按照下列步驟操作:
- 建立
.airflowignore
檔案。 - 在這個檔案中,列出應忽略的檔案和資料夾。
- 將這個檔案上傳至環境值區中的
/dags
資料夾。
如要進一步瞭解 .airflowignore
檔案格式,請參閱 Airflow 說明文件。
Airflow 處理暫停的 DAG
Airflow 使用者會暫停 DAG 以避免執行。這樣可節省 Airflow 工作站的處理週期。
Airflow 會繼續剖析已暫停的 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 UI 或 DAG UI 中。
下列 Airflow 設定選項會定義 DAG 剖析的逾時值:
[core]dagbag_import_timeout
定義 DAG 處理器剖析單一 DAG 所需的時間。[core]dag_file_processor_timeout
定義 DAG 處理器可用於剖析所有 DAG 的總時間長度。
如果無法在 Airflow UI 或 DAG UI 中查看 DAG,請按照下列步驟操作:
檢查 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 和記憶體資源,以便加快處理速度。