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

Airflow 2.5.1日志存本地与S3但UI无法加载问题求助

Airflow 2.5.1 UI无法加载S3远程日志(EKS环境)

日志已成功写入本地目录/home/ubuntu/airflow/logs和指定S3存储桶,但在Airflow UI中查看任务日志时,界面持续转圈无法加载日志内容。

现有Logging配置

base_log_folder = /home/ubuntu/airflow/logs
remote_logging = True
remote_log_conn_id = daairflowupgradelogs
google_key_path =
remote_base_log_folder = s3://da-airflow-logging/daairflowupgradelogs
encrypt_s3_logs = False
logging_level = INFO
celery_logging_level =
fab_logging_level = WARNING
logging_config_class =
colored_console_log = True
colored_log_format = [%(blue)s%(asctime)s%(reset)s] {%(blue)s%(filename)s:%(reset)s%(lineno)d} %(log_color)s%(levelname)s%(reset)s - %(log_color)s%(message)s%(reset)s
colored_formatter_class = airflow.utils.log.colored_log.CustomTTYColoredFormatter
log_format = [%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s
simple_log_format = %(asctime)s %(levelname)s - %(message)s
dag_processor_log_target = file
dag_processor_log_format = [%(asctime)s] [SOURCE:DAG_PROCESSOR] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s
log_formatter_class = airflow.utils.log.timezone_aware.TimezoneAware
task_log_prefix_template =
log_filename_template = dag_id={{ ti.dag_id }}/run_id={{ ti.run_id }}/task_id={{ ti.task_id }}/{% if ti.map_index >= 0 %}map_index={{ ti.map_index }}/{% endif %}attempt={{ try_number }}.log
log_processor_filename_template = {{ filename }}.log
dag_processor_manager_log_location=/home/ubuntu/airflow/logs/dag_processor_manager/dag_processor_manager.log
task_log_reader = task
extra_logger_names =
worker_log_server_port = 8793

补充信息

  • 部署环境:Amazon Elastic Kubernetes Service(EKS)
  • 已验证S3存储桶中存在对应任务的日志文件
  • EKS节点/服务账户关联的IAM角色已配置S3存储桶的读写权限
  • Worker Pod的AWS凭据、环境变量配置已确认无误

已尝试操作

  • 校验S3存储桶权限及IAM角色策略
  • 检查Worker Pod的环境变量与凭据配置
  • 查阅Airflow官方文档及社区资源

排查与解决思路

1. 确认Webserver的S3访问权限

Airflow Webserver需要独立具备读取S3日志的权限(而非仅Worker节点):

  • 检查Webserver Pod关联的IAM角色是否包含s3:GetObject、s3:ListBucket权限,目标资源指定为s3://da-airflow-logging/daairflowupgradelogs及子路径
  • 在Webserver Pod内执行测试命令验证访问性:
    # 列出存储桶内日志路径
    aws s3 ls s3://da-airflow-logging/daairflowupgradelogs
    # 下载单条日志文件测试
    aws s3 cp s3://da-airflow-logging/daairflowupgradelogs/[具体任务日志路径] /tmp/test.log
    

2. 核对remote_log_conn_id配置有效性

配置中remote_log_conn_id = daairflowupgradelogs,需确认:

  • Airflow连接管理中存在ID为daairflowupgradelogs的AWS连接(而非仅配置了aws_default)
  • 该连接配置正确:若使用EKS服务账户,需勾选Use IAM Role选项,无需手动填写Access Key/Secret;若使用凭据,需确认密钥有效且权限匹配

3. 校验日志路径模板匹配度

对比log_filename_template生成的路径与S3中实际存储的日志路径是否完全一致:

  • 从S3复制一条实际日志的完整路径,与Airflow任务实例详情中显示的日志路径对比
  • 注意map_index判断逻辑是否与实际任务的映射状态匹配,避免路径拼接错误导致找不到文件

4. 验证Webserver与S3的网络连通性

  • 检查Webserver Pod所在安全组是否允许出站HTTPS(443端口)访问S3服务
  • 在Webserver Pod内测试S3端点解析:nslookup s3.[你的区域].amazonaws.com
  • 若使用VPC端点访问S3,需确认端点配置正确,且Pod所在子网具备访问该端点的权限

5. 查看Webserver日志定位错误

提取Webserver Pod日志,搜索与S3日志读取相关的错误信息:

kubectl logs -n [你的Airflow命名空间] [webserver-pod-name] | grep -i s3

常见错误包括权限拒绝、路径不存在、AWS SDK初始化失败等,可直接指向问题根源

6. 调整task_log_reader配置强制读取远程日志

当前配置task_log_reader = task,Webserver会优先尝试从Worker节点的日志服务获取日志,若Worker与Webserver网络不通会导致超时。可修改配置强制从S3读取:

task_log_reader = remote

修改后重启Webserver服务,测试日志加载情况


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:08:34