我在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',))
完成任务后,将正确显示日志。
我相信气流在做什么:
好像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
,但未发现任何可以暴露日志的额外端口。
答案 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 $@