Airflow运行数周后DAG集体故障,重启容器可恢复求排查建议
问题描述
部署了约10个Airflow DAG,初始运行正常,数周后全部故障:
- 多数API拉取数据的DAG报错:
本地用相同API密钥测试该API正常。[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')) - 另有一个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
相关产品推荐
相关产品推荐

