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
相关产品推荐
相关产品推荐

