You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow运行数周后DAG集体故障,重启容器可恢复求排查建议

问题描述

部署了约10个Airflow DAG,初始运行正常,数周后全部故障:

  • 多数API拉取数据的DAG报错:
    [2024-02-05T19:00:01.155+0000] {DAGNAME.py:87} ERROR - An error occured: HTTPSConnectionPool(host='api.XXXXXX-au.com', port=443): Max retries exceeded with url: /api/v2/forms/15c8c779-5c38-4d9a-a474-37cb7ce8b1b9.json?schema=true (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fe465b22cd0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))
    
    本地用相同API密钥测试该API正常。
  • 另有一个DAG报错:
    Request URL is missing an 'http://' or 'https://' protocol. or https error
    
  • 未做任何改动突发故障,重启Docker容器可恢复,但无法根治。
  • 更新DAG脚本时常出现警告:WARNING:root:OSError while attempting to symlink the latest log directory,但日志可正常查看。
  • 已排查容器资源,CPU和内存使用率均较低。
排查方向

1. Docker容器DNS解析异常

核心报错是域名解析失败,重启容器恢复说明容器DNS配置在运行中失效:

  • 进入Airflow容器执行 cat /etc/resolv.conf,对比宿主机的resolv.conf,确认DNS服务器配置是否一致,是否存在DNS服务器不可用的情况。
  • 在docker-compose.yml中为Airflow服务(webserver、scheduler、worker)指定固定公共DNS,避免依赖宿主机动态DNS:
    services:
      airflow-webserver:
        dns:
          - 8.8.8.8
          - 1.1.1.1
    
  • 执行docker network inspect <airflow-network-name>,检查容器所属网络的DNS配置,确认网络未被意外修改。

2. HTTP客户端连接资源耗尽

长时间运行后,HTTP客户端未正确释放连接,导致无法新建连接:

  • 检查DAG中使用的requests等HTTP客户端代码,确保用上下文管理器管理会话,避免连接泄漏:
    with requests.Session() as session:
        response = session.get(api_url, headers=headers)
        # 处理响应逻辑
    
  • 在Airflow UI的Admin > Connections中,检查HTTP类型连接的超时、重试参数,避免无限制重试耗尽连接资源。

3. 日志目录权限/挂载问题

日志符号链接警告可能暗示文件系统权限异常,长期积累影响容器状态:

  • 检查宿主机挂载到容器的日志目录权限,确保容器内airflow用户(默认UID/GID为50000)拥有读写权限。
  • 定期清理旧日志,或配置Airflow日志轮转策略,避免日志文件过多导致符号链接创建失败。

4. 单个DAG的URL生成异常

针对协议缺失的DAG,排查URL动态生成逻辑:

  • 在DAG代码中打印完整请求URL,确认运行时是否出现协议截断,比如环境变量未正确加载、字符串拼接错误。
  • 确保URL配置从可靠来源读取(如Airflow Variables),避免动态生成时丢失协议部分。

5. Airflow进程状态异常

长时间运行后,scheduler或worker进程可能出现内部状态损坏:

  • 在docker-compose.yml中为Airflow服务添加restart: unless-stopped,并配置healthcheck定期检查服务可用性:
    airflow-scheduler:
      restart: unless-stopped
      healthcheck:
        test: ["CMD-SHELL", 'airflow jobs check --job-type SchedulerJob --hostname "$${HOSTNAME}"']
        interval: 30s
        timeout: 10s
        retries: 3
    
  • 升级Airflow到最新稳定版,旧版本可能存在内存泄漏、连接管理等已知bug。

内容的提问来源于stack exchange,提问作者SbE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:33:36