DAG 问题排查(工作流)

本页面介绍常见工作流问题的问题排查步骤和信息。

排查工作流问题

要开始排查问题,请按如下所述操作:

  1. 检查 Airflow 日志
  2. 查看 Stackdriver
  3. 在 GCP Console 中,检查与运行环境的 GCP 组件对应的页面中是否显示错误。
  4. Airflow 网页界面中,检查相应 DAG 的图表视图中是否显示失败的任务实例。

    提示:要浏览大型 DAG 以查找失败的任务实例,请替换 Web 服务器的默认 dag_orientation 配置,以将图表视图方向从 LR(从左到右)更改为 RL(从右到左)

调试操作器故障

要调试某个操作器的故障,请执行以下操作:

  1. 检查任务特定的错误
  2. 检查 Airflow 日志
  3. 查看 Stackdriver
  4. 检查该操作器的专属日志。
  5. 修复错误。
  6. 将相应 DAG 上传dags/ 文件夹。
  7. 在 Airflow 网页界面中,清除该 DAG 的过往状态
  8. 恢复或运行该 DAG。

常见问题

以下部分介绍了一些常见工作流问题的症状和可行修复措施。

任务失败但未发出日志

日志被缓冲。如果工作器在缓冲区刷新之前崩溃,则不会发出日志。如果没有任务故障日志,则表示 Airflow 工作器已因内存不足 (OOM) 重启。

DAG 的执行受 RAM 限制。对于任务的所有执行来说,都离不开两个最基础的 Airflow 进程,即任务的执行与监控。目前,每个节点最多可以并发执行 6 项任务(也就是说,Airflow 模块大约需要加载 12 个进程)。任务的执行可能会使用较多内存,具体取决于 DAG 的大小。

症状

  1. 在 GCP Console 中,转到 GKE 工作负载面板。
  2. 如果存在显示“Evicted”的“airflow-worker”pod,请点击每个被逐出的 pod,然后在窗口顶部查找“The node was low on resource: memory”消息。

修复

  1. 使用资源规模比当前机器类型更大的机器类型创建新的 Cloud Composer 环境。
  2. 确保 DAG 中的任务遵循幂等原则且可重试。
  3. 配置任务重试次数

DAG 加载导入超时

症状

  • Airflow 网页界面:DAG 列表页面顶部出现一个红色提醒框,其中显示“Broken DAG: [/path/to/dagfile] Timeout”。
  • Stackdriver:airflow-scheduler 日志包含类似如下所示的条目:
    • “ERROR - Process timed out”
    • “ERROR - Failed to import: /path/to/dagfile”
    • “AirflowTaskTimeout: Timeout”

修复

替换 Airflow 配置 core-dagbag_import_timeout,并将更多时间用于 DAG 解析。

DAG 导致 Airflow Web 服务器崩溃或导致其返回 502 gateway timeout 错误

有多种原因都会导致 Web 服务器故障。如果您运行的是 composer-1.5.2 或更高版本,请检查 Stackdriver Logging 中的 airflow-webserver 日志以调试 502 gateway timeout 错误。

重量级计算负载

避免在 DAG 解析时运行重量级计算负载。与工作器和调度器节点不同(它们可以通过自定义机器类型来提高 CPU 和内存容量),Web 服务器使用的是固定机器类型,因此,如果解析时的计算量过于庞大,可能会导致 DAG 解析失败。

请注意,Web 服务器具有 2 个 vCPU 和 2 GB 内存core-dagbag_import_timeout 的默认值为 30 秒。此超时值决定了 Airflow 在将 Python 模块载入 dags/ 文件夹时所花费的最大时长。

权限不正确

Web 服务器不是使用与工作器和调度器相同的服务帐号运行。因此,工作器和调度器可能可以访问 Web 服务器无法访问的用户管理资源。

我们建议您避免在 DAG 解析期间访问非公开资源。在某些情况下,如果需要访问此类资源,您需要向 Web 服务器的服务帐号授予相应权限。该服务帐号名称来源于您的 Web 服务器网域。例如,如果网域为 foo-tp.appspot.com,则该服务帐号为 foo-tp@appspot.gserviceaccount.com

DAG 错误

Web 服务器在 App Engine 上运行,并且独立于环境的 GKE 集群。Web 服务器会解析 DAG 定义文件;如果 DAG 中存在错误,则会发生 502 gateway timeout。如果有问题的 DAG 没有导致 GKE 中运行的任何进程中断,则 Airflow 会在 Web 服务器未正常发挥作用的情况下正常工作。在这种情况下,您可以使用 gcloud composer environments run 来从您的环境中检索详细信息,以便在 Web 服务器变得不可用时解决此问题。

在其他情况下,您可以在 GKE 中运行 DAG 解析,并查找抛出致命 Python 异常或发生超时(默认为 30 秒)的 DAG。要进行问题排查,请连接到 Airflow 工作器容器中的远程 shell,并测试是否存在语法错误。如需了解详情,请参阅测试 DAG

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Composer