【发布时间】:2023-03-10 12:00:01
【问题描述】:
这让我发疯了。
我正在云环境中设置气流。我有一台服务器运行调度程序和网络服务器,还有一台服务器作为 celery worker,我正在使用气流 1.8.0。
运行作业可以正常工作。 拒绝工作的是日志记录。
我已经在两个服务器上的气流.cfg 中设置了正确的路径:
remote_base_log_folder = s3://my-bucket/airflow_logs/
remote_log_conn_id = s3_logging_conn
我已经在气流 UI 中设置了 s3_logging_conn,访问密钥和密钥如 here 所述。
我检查了连接使用
s3 = airflow.hooks.S3Hook('s3_logging_conn')
s3.load_string('test','test',bucket_name='my-bucket')
这工作在两台服务器上。因此,连接已正确设置。然而,每当我运行一项任务时,我得到的只是
*** 日志文件不是本地的。
*** 在这里获取:http://*******
*** 无法从 worker 获取日志文件。
*** 正在读取远程日志...
无法从 s3://my-bucket/airflow_logs/my-dag/my-task/2018-02-15T21:46:47.577537 读取日志
我尝试按照预期的约定手动上传日志,但网络服务器仍然无法获取它 - 所以问题出在两端。我不知道该怎么做,到目前为止我所阅读的所有内容都告诉我这应该起作用。我即将安装 1.9.0,我听到更改记录,看看我是否更幸运。
更新:我对 Airflow 1.9 进行了全新安装,并按照here 的具体说明进行操作。
Webserver 现在甚至无法启动,并出现以下错误:
airflow.exceptions.AirflowConfigException:在配置中找不到部分/键 [core/remote_logging]
在this config template 中明确引用了此部分。
所以我尝试删除它并只加载 S3 处理程序而不先检查,然后我收到以下错误消息:
无法加载配置,包含配置错误。
Traceback(最近一次调用最后一次):
文件“/usr/lib64/python3.6/logging/config.py”,第 384 行,解析中:
self.importer(使用)
ModuleNotFoundError: 没有名为的模块
'airflow.utils.log.logging_mixin.RedirectStdHandler';
'airflow.utils.log.logging_mixin' 不是一个包
我觉得这不应该这么难。
任何帮助将不胜感激,干杯
【问题讨论】:
-
我现在已经重新安装了所有东西,生成了新的凭据并升级到 Airflow 1.9,问题仍然存在。
-
请用 Airflow 1.9 中的错误更新日志,它应该可以工作并且一些用户实际上在生产中使用它。
-
完成,添加了新的错误。
-
顺便说明一下,master 分支中的当前模板 incubator-airflow/airflow/config_templates/airflow_local_settings.py 包含对“airflow.utils.log.s3_task_handler.S3TaskHandler”类的引用,其中在 apache-airflow==1.9.0 python 包中不存在。修复很简单——使用这个基本模板:github.com/apache/incubator-airflow/blob/v1-9-stable/airflow/… 完成之后,按照mentioned answer 中的所有其他说明进行操作。请注意,此调整涉及 s