DaskExecutor的实时执行器日志

时间:2018-11-02 15:24:32

标签: airflow dask

我在Kubernetes上安装了Airflow。我的设置使用DaskExecutor。我还配置了到S3的远程日志记录。但是,当任务正在运行时,我看不到日志,而是出现此错误:

*** Log file does not exist: /airflow/logs/dbt/run_dbt/2018-11-01T06:00:00+00:00/3.log
*** Fetching from: http://airflow-worker-74d75ccd98-6g9h5:8793/log/dbt/run_dbt/2018-11-01T06:00:00+00:00/3.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='airflow-worker-74d75ccd98-6g9h5', port=8793): Max retries exceeded with url: /log/dbt/run_dbt/2018-11-01T06:00:00+00:00/3.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f7d0668ae80>: Failed to establish a new connection: [Errno -2] Name or service not known',))

完成任务后,将正确显示日志。

我相信气流在做什么:

  • 对于已完成的任务,请从s3中读取日志
  • 对于正在运行的任务,连接到执行程序的日志服务器终结点并显示出来。

好像Airflow正在使用celery.worker_log_server_port连接到我的dask执行器以从那里获取日志。

如何配置DaskExecutor公开日志服务器端点

我的配置:

core    remote_logging          True 
core    remote_base_log_folder  s3://some-s3-path
core    executor                DaskExecutor    
dask    cluster_address         127.0.0.1:8786
celery  worker_log_server_port  8793    

我验证了什么: -验证日志文件存在,并且在任务运行时正在将其写入执行程序 -在执行程序容器上称为netstat -tunlp,但未发现任何可以暴露日志的额外端口。

1 个答案:

答案 0 :(得分:0)

我们通过简单地在worker上启动python HTTP处理程序解决了该问题。

Dockerfile:

RUN mkdir -p $AIRFLOW_HOME/serve
RUN ln -s $AIRFLOW_HOME/logs $AIRFLOW_HOME/serve/log

worker.sh(由Docker CMD运行):

#!/usr/bin/env bash

cd $AIRFLOW_HOME/serve
python3 -m http.server 8793 &

cd -
dask-worker $@