我正在从事一个Dockerized /Django项目,其中包括一个用于芹菜工人的容器,我一直在将现成的气流码头容器集成到其中。
我已经在预先存在的容器中成功地运行了芹菜任务,方法是使用指定的redis代理和后端实例化芹菜应用程序,并通过send_task进行远程调用;然而,芹菜任务执行的日志记录都不能返回到气流日志。
最初,作为一个概念的证明,因为我对气流完全陌生,我把它设置为运行相同的代码,方法是将它暴露在气流容器中,并创建气流任务在气流芹菜工人容器上运行它。这确实导致捕获了所有的日志记录,但这绝对不是我们希望它架构的方式,因为这使得气流容器由于django项目的依赖项的重复而变得非常胖。
文档中说,“大多数任务处理程序在任务完成后发送日志”,但是我无法找到更多的细节,这些细节可能会给我提供在我的情况下如何启用同样的功能的线索。
在远程执行芹菜任务时,有没有办法将这些日志送回气流中?
发布于 2022-09-16 10:22:23
而不是“返回日志到气流”,一个容易实现的替代方案(因为气流本身支持它)是激活远程日志记录。这样,来自所有工作人员的所有日志都将结束,例如在S3上,而way服务器将自动获取它们。
以下说明如何使用S3后端配置远程日志记录。其他选项(例如,Elastic)也可以类似地实现。
remote_logging中将True设置为airflow.cfgaws://AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI%2FK7MDENG%2FbPxRfiCYEXAMPLEKEY@/?
endpoint_url=http%3A%2F%2Fs3%3A4566%2F如果需要的话,也可以通过webserver创建连接器。
AIRFLOW_CONN_{YOUR_CONNECTION_NAME}可用。连接名REMOTE_LOGS_S3示例export AIRFLOW_CONN_REMOTE_LOGS_S3=aws://AKIAIOSFODNN7EXAMPLE:wJalrXUtnFEMI%2FK7MDENG%2FbPxRfiCYEXAMPLEKEY@/?endpoint_url=http%3A%2F%2Fs3%3A4566%2Fremote_log_conn_id设置为airflow.cfg中的连接名称(例如REMOTE_LOGS_S3)remote_base_log_folder在airflow.cfg中设置为所需的桶/前缀。示例:remote_base_log_folder = s3://my_bucket_name/my/prefix这个相关SO更深入地涉及远程日志记录。
如果需要调试,在本地(即工作人员内部)查看任何工作日志应该会有所帮助。
https://stackoverflow.com/questions/72546194
复制相似问题